نجوم المشاركات
Popular Content
Showing content with the highest reputation on 10/21/19 in all areas
-
بسم الله الرحمن الرحيم فى البداية لا اعلم ان كان قد تطرق احد الى هذا الموضوع الاتى شرحة من قبل ام لا وعلى كل لا ضرر فى توضيحة من جديد طبعا الحل دا هتلجأ لى بعد ما تنفذ منك كل سبل تصغير حجم قاعدة البيانات او ممكن تستخدمة عند انشاء برنامجك من البداية الموضوع ببساطة هو تحويل قاعدة بياناتاك من Access الى Sql تحويل الخلفية فقط ( الجداول ) اما النماذج فيتم انشائها فى اكسس عادى طريقة العمل المتطلبات ------------------ 1 - Microsoft SQL Server 2008 R2 RTM - Management Studio Express لينك التحميل https://www.microsoft.com/en-us/download/details.aspx?id=22985 2 - سيكوال سيرفير 2008 R2 لينك التحميل https://www.microsoft.com/en-us/download/details.aspx?id=30438 3- اوفيس اصدار 2007 فما فوق -------------------------------- شرح بسيط بالبلدى كدا احنا هنعمل سيرفير محلى وننشئ عليه قاعدة بيانات وبدل ما نصمم عليها الجداول من اول وجديد هنصدرها من الاكسس ببيانتها بكل ما تحتوى بس كدا هههههههههه طريقة العمل اول هنسطب السيرفر المحلى ( سيكوال سيرفير 2008 R2 ) طريقة تسطيب هتلاقوها فى الفيديو دا ثانيا تثبيت Microsoft SQL Server 2008 R2 RTM - Management Studio Express وهتلاقو طريقة التثبيت فى الفيديو دا نخش بقى على المهم بعد التثبيت هنفتح Management Studio Express هتلاقوه فاتح الشاشة دى هتكتب فى اسم السيرفير .\SQLEXPRESS وبعدين connect هتطلعلك الشاشة دى كليك يمين واختار داتابيز جديدة زى الصورة بالظبط هتظهرلك شاشة التالية هنكتب فيها اسم قاعدة بيانات اللى انت عاوزها وبعدين OK بعد كدا هتظهرلك قاعدة بايناتاك ضمن قواعد البيانات زى اللى فى الشاشة التالية لو مظهرتش كليك يمين ورفريش هتظهر معاك على طول --------------------------------------------------- كدا احنا انشأنا قاعدة البيانات على السيرفير ولكن بدون جداول فاضل بقى نظهر قاعدة البيانات للاكسس علشان يقدر يشوفها على السيرفير المحل تابع معايا اولا من قائمة استارت اختار بحث او ابحث عن البرنامج الاتى odbc data sources افتحه هيظهرلك الشاشة دى اختار Add بعد كدا هتظهرلك دى اختار Sql Server وبعدين Finsh هتظهرلك الشاشة دى طبعا هتكتب اسم قاعدة البيانات اللى انت عاوزها ونفسها فى حقل الوصف واسم السيرفير دا .\SQLEXPRESS وبعد كدا Next هتظهرلك الشاشة دى اختار منها Next هتظهر الشاشة دى علم على اللى فى الصورة واختار منها قاعدة بياناتك اللى انت انشأتها بعد كدا هتظهر اخر شاشة دى اختار منها Finsh هتظهرلك شاشة تاكيد اختار منها OK وممكن تعمل منها تيست لقاعدة البيانات تشوفها متصلة ولا لا بعد كدا هتلاقى قاعدة بياناتك ظاهرة فى كما فى الشاشة التالية --------------------------------------------- كدا احنا وصلنا لنص المهمة ظهرنا قاعدة البيانات للاكسس فاضل بس اصدر ليها الجداول بتاعتى هتفتح الاكسس وكليك يمين على الجدول نختار الاتى بعد كدا بعد كدا امسح الجدول طبعا قبل ما تمسح خد نسخة من قاعدة البيانات علشان مترجعش تصوتلى تقولى البرنامج باظ هههههههههه بعد كدا من بيانات خارجية فى الاكسس اختار التالى بعد كدا الاتباط بمصر البيانات علشان يعمل لينك للجدول بين السيكوال والاكسس بعد كدا اختار قاعدة البيانات بتاعتنا بعد كدا هتلاقى الجداول اللى صدرناها ظاهرة فى الاول مسبوقة بكلمة dbo_ اختاره واضغط اوكيه بعد كدا هياكد معاك حقول الجدول اللى هيا مفتاح اساسى اختار المفتاح الاساسى فقط هتلاقى الجدول ظهر عندك فى قاعدة البيانات الخاصة بك بهذا الشكل فقط اعد تسميته كما كان والجدول ظاهر بكل بياناته وبكدا يبقى قاعدة البيانات اتحول من اكسس الى سيكوال وسهل جدا تعمل لها باك اب من خلال سيكوال شكرا لكم3 points
-
فورم ترحيل بيانات الى الشيت المختار وطباعة البيانات الفيديو3 points
-
السلام عليكم اساتذتى الكرام اود ان اقدم لكم اليوم دالة أعجبتنى -وتقوم هذه الدالة بتحويل التقويم الميلادى الى التقويم القبطى ومن هنا لابد ان نعرف التقويم القبطى ولابد ان نقول نبذة عنه تبدأ السنة الجديدة عادة في 29 أغسطس، عدا السنة التي تسبق السنة الكبيسة حيث تبدأ في 30 أغسطس. للحصول على رقم السنة القبطية، يُطرح من رقم السنة اليوليانية إما 283 (قبل السنة اليوليانية الجديدة) أو 284 (بعدها). ويتكون التقويم القبطى من 13 شهر كالتالى : وهذا هو كود الدالة المستخدمة فى تحويل التاريخ من الميلادى الى القبطى Option Explicit Function CopticDate(WkDate As Date) As String Const YDiff = 284 Dim DateList As Object Set DateList = CreateObject("System.Collections.Sortedlist") Dim T, TT Dim I As Integer, II As Integer Dim WkY As Integer Dim WkM As String Dim WkD As Integer With Sheets("Data") For I = 1 To 13 T = Split(.Cells(I + 1, 3), "/") DateList.Add DateSerial(Year(WkDate), T(1), T(0)) * 1, .Cells(I + 1, 4) Next I End With WkY = Year(WkDate) - YDiff With DateList TT = WkDate * 1 If (TT >= .GetKey(.Count - 1)) Then WkM = .GetByIndex(0) WkD = TT - .GetKey(.Count - 1) + 1 Else If (TT <= .GetKey(0)) Then WkM = .GetByIndex(.Count - 1) II = TT - DateSerial(Year(WkDate), 1, 1) ' FIRST day of the year = 101 WkD = DateSerial(Year(WkDate), 12, 31) - .GetKey(.Count - 1) + II ' LAST day of the year = 1231 Else For I = 0 To 12 If ((TT > .GetKey(I)) And (TT <= .GetKey(I + 1))) Then WkM = .GetByIndex(I + 1) WkD = TT - .GetKey(I) Exit For End If Next I End If End If End With CopticDate = WkM & "/ " & WkD & "/ " & WkY End Function وتستخدم بهذه المعادلة =CopticDate() convert the Christmas calendar to the Coptic calendar.xlsm3 points
-
3 points
-
2 points
-
جزاك الله خيرا وجعل هذا العمل في ميزان حسناتك2 points
-
وعليكم السلام -تفضل من أعمال الأستاذ حسين مأمون 1فاتورة.xlsm2 points
-
السلام عليكم عند بحثى على احد المنتديات الاجنبية وجد مثال ممتاز من وجهة نظرى لاخفاء الجدول فى الاكسيس والعبرة عندى ليس الاخفاء فقط بل عدم القدرة على استيرادها فى ملف فارغ الوحده النمطية الحقيقة وافت بالغرض ولكن ..... مع ملف اكسيس جداوله مرتبطه link بالسيكول هنا الكول لايعمل على اخفاء الجداول فهل من حل اخر او تعديل على الملف المرفق وجزاكم الله كل خير HideUnhide all objects with VBA - CR.zip1 point
-
1 point
-
1 point
-
السلام عليكم من أجل الحصول على اسم الكمبيوتر ضع هذا الكود في وحدة نمطية جديدة (منقول): Private Declare Function apiGetUserName Lib "advapi32.dll" Alias _ "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long Public Function fOSUserName() As String ' Returns the network login name Dim lngLen As Long, lngX As Long Dim strUserName As String strUserName = String$(254, 0) lngLen = 255 lngX = apiGetUserName(strUserName, lngLen) If (lngX > 0) Then fOSUserName = Left$(strUserName, lngLen - 1) Else fOSUserName = vbNullString End If End Function قم بإستدعائها في مربع النص من خلال هذا الكود: =fOSUserName()1 point
-
أحسنت استاذ علي عمل ممتاز جعله الله فى ميزان حسناتك1 point
-
شكرا يا برنس طبعا حماية اكثر من الاكسس ولكن المشكلة تكمن فى الحفاظ على نظام التشغيل واخر باك اب لديك بعد كدا متقلقش وسيبها على الله ههههههههههه مرة اخرى اسعد بتعليقكم شكر الله لك اخى الكريم بوركت وطاب ممشاك جزاك الله خيرا وبارك الله لك للاسف لم الاحظ موضوع اخى ايمن ولكن هو اصدق منى لسانا واوفي شرحا بارك الله لكما1 point
-
بارك الله فيك استاذى الكريم وزادك الله من فضله ..... شرح وافى وكافى1 point
-
موضوع جميل يهم كل مستخدمي الاكسس وطبعا في طرق اسهل نسبياً هنا في الموقع للاستاذ محمد ايمن جزاك الله خيراً علي الشرح الوافي جدا1 point
-
يسعدني ان أكون أول من يعلق علي هذا الموضوع المهم رغم أنه يحتاج لبعض الوقت للاستيعاب والتجهيز والتنفيذ ولكن ما شاء الله أيه الجمال ده في الشرح فعلاً مجهود كبير لتوضيح موضوع مهم وأعتقد أن هذا التحول سيعطي حماية مضاعفة لقاعدة الخلفية المهم ألا يكون هناك أي عوائق تظهر بعد هذا التحول جزاك الله خيراً أخي دائماً متميز في أطروحاتك القيمة والمبدعة1 point
-
1 point
-
السلام عليكم ورحمة الله وبركاته تفضل اخي الكريم New Microsoft Office Access Application.rar تحياتي1 point
-
حاولت استخدام هذا الكود للتصدير لـ pdf ولكن واجهت مشكلة حاول الآن مع هذا المرفق واعذرني فأنا فاقد التركيز xx.accdb1 point
-
وعليكم السلام -اهلا بك فى المنتدى وذلك لا يمكن عمله الا ببرامج متخصصة مدفوعة الأجر1 point
-
1 point
-
الأستاذ mustafa khatab ان لا ارى اى ضغط على الإعجاب لإجابة الأستاذ سليم على الرغم انها أعجبتك واعتقد ان هذا هو اقل ما يقدم له لكل هذا المجهود المبذول فى حل مشكلتك1 point
-
1 point
-
وعليكم السلام اهلا بك اخى الكريم فى المنتدى عليك بتحديث برنامج الضغط عندك فالملف تمام تفضل وكلمة السر واسم المسخدم : 1 Arcives3.accdb1 point
-
1 point
-
السلام عليكم هذا كود صممته هدية مني لك يقوم بانشاء الاورق داخل الملف Option Explicit Dim Rng As Range Dim NamSheet As String Sub kh_Add_Worksheets() Dim Sh As Worksheet Dim i As Long, Last As Long Dim Msg As String ''''''''''''''''''''''' On Error Resume Next With Sheets("kh") Last = .Cells(.Rows.Count, 1).End(xlUp).Row If Last < 6 Then GoTo kh_ExT Set Rng = Range("B6:U" & Last) End With ''''''''''''''''''''''' kh_Application False ''''''''''''''''''''''' With Rng.Offset(0, -1).Columns(1) For i = 1 To .Rows.Count NamSheet = Trim(.Cells(i, 1)) If Len(NamSheet) = 0 Then GoTo 1 NamSheet = kh_Replace(NamSheet) ''''''''''''''''''' If IsError(Evaluate("'" & NamSheet & "'!A1")) Then Set Sh = ActiveWorkbook.Sheets.Add(After:=Sheets(Sheets.Count)) Sh.Name = NamSheet kh_CopyRng Sh, .ColumnDifferences(.Cells(i, 1)) End If ''''''''''''''''''''' 1: Next .Worksheet.Activate End With ''''''''''''''''''''''' kh_ExT: kh_Application True ''''''''''''''''''''''' Set Sh = Nothing Set Rng = Nothing On Error GoTo 0 End Sub Sub kh_CopyRng(Sht As Worksheet, RngHidden As Range) RngHidden.EntireRow.Hidden = True ''''''''''''''''''''''''''''''''''''' Rng.SpecialCells(xlCellTypeVisible).Copy '''''''''''''''''''''''''''' With Sht.Range("A6") .PasteSpecial xlPasteColumnWidths .PasteSpecial xlPasteValues .PasteSpecial xlPasteFormats Application.CutCopyMode = False End With ''''''''''''''''''''''''''''' RngHidden.EntireRow.Hidden = False ''''''''''''''''''''''''''''''''''''' 'نسخ رؤوس الاعمدة With Sht .Range("B1").Value2 = NamSheet Rng.Worksheet.Range("B2:U5").Copy With .Range("A2") .PasteSpecial xlPasteFormats .PasteSpecial xlPasteFormulas Application.CutCopyMode = False .Select End With End With ''''''''''''''''''''''''''''''''''''' End Sub Function kh_Replace(rName As String) As String Dim itm Dim myRep As String myRep = rName For Each itm In Array("/", "\", "*", ":", "؟", "?", "[", "]") myRep = Replace(myRep, itm, "") Next '''''''''''''''''''''''''''' myRep = Mid$(myRep, 1, 31) '''''''''''''''''''''''''''' kh_Replace = myRep End Function Sub kh_Application(mbol As Boolean) With Application .Calculation = IIf(mbol, -4105, -4135) .ScreenUpdating = mbol End With End Sub المرفق 2003-2007 انشاء اوراق بحسابات العملاء.rar1 point
-
اخى الكريم رضوان مين الى قال ان املف عباره عن دراسة اكاديمية الكلام ده لو انا بشرحلك مفهوم وتعريفات التكاليف وفلسفة التكاليف واهدافها وفوائدها ولكن انا دخلت فى صلب الموضوع وقلت الخطوة الأولى في تصميم النظام المحاسبي للتكاليف تتمثل في تحديد نوع المنتجات النهائية التي تقوم المنشأة بإنتاجها والتي تعبر عن الهدف الأساسي من قيامها . ويطلق على وحدات الإنتاج النهائي سواء كانت سلعة أو خدمة وحدات التكلفة يعنى لازم احدد وحده القياس بتعتى ايه وقلت ويتطلب إعداد دليل وحدات التكلفة اتخاذ الخطوات الآتية : 1- حصر المنتجات النهائية التي تقوم المنشأة بإنتاجها والتي تعبر عن هدف المنشأة 2- تقسيم المنتجات النهائية إلى مجموعات بحيث تتكون كل مجموعة من عدد البنود المتشابهة . أمثلة لوحدات تكلفة مستخدمة في بعض مجالات النشاط : 1- صناعة النقل بالسيارات أ- نقل ركاب راكب / كيلو ( عدد ) ب- نقل بضائع طن / كيلو ( وزن ) 2- صناعة النسيج متر أو ياردة ( طول ) 3- صناعة الأدوية : أ- أقراص 1000 قرص من دواء معين ( عدد ) ب- كبسولات كبسولة من مستحضر معين ( عدد ) ج- شراب مللتر من شراب معين ( حجم ) 4- صناعة الإسمنت كيس / طن ( بالوزن ) 5- صناعة الملابس ثوب / عباءة / قميص (عدد ) 6- صناعة السيارات سيارة موديل ( عدد ) بعد كده ندخل على النقطة الثانية وهى مراكز التكاليف وقلت فتقسم المنشأة إلى وحدات إدارية صغيرة تسمى مراكز التكاليف وبحيث تكون كل وحدة إدارية تحت مسؤولية شخص معين حتى يمكن الرقابة على التكاليف بشكل سليم وقلت كمان خطوات إعداد دليل مراكز التكاليف : 1- التعرف على مجالات النشاط المختلفة ( رئيسية ، فرعية ) في المنشأة . 2- دراسة التخطيط الفني للمنشأة الذي يبين العمليات والمراحل الصناعية . 3- دراسة التنظيم الإداري للمنشأة بهدف تحديد السلطات و المسؤوليات المتعلقة بكل وحدة . 4- مراعاة العوامل الاقتصادية بحيث لا تحدد مراكز التكاليف على أساس أكثر تفصيلا مما يجب حتى لا يؤدي إلى تجمل المنشأة بتكاليف إدارية لا تبررها النتائج التي تحصل عليها ز قولى حضرتك خطوات محدده انت عايزه وانا اديهالك يمكن اكون فاهم غلط وعلى فكره انا محاسب تكاليف1 point
-
بسم الله الرحمن الرحيم والصلاة والسلام على اشرف المرسلين نبينا محمد صلى الله عليه وسلم شرح الخاصية Offset بسؤال من اخونا justice وهذا رابط سؤال اخونا justice لمن اراد الاستفسار عن بعض النقاط او التعليق على هذه المشاركة التى تخص الموضوع المشار اليه سؤال فى VBA, دالة Offset توضيح :: بالنسبة الى لفظى واتجاة ( اليمين واليسار ) اللذان سيتم استخدامهما فى الشرح هنا هما اتجاهان بالنسبة الى الاوفيس العربى ويكون العمود الاول A جهة اليمين وليس اليسار اما من يعمل على نسخ غير النسخة العربية سيكون لفظى واتجاة ( اليمين واليسار ) معكوسين بالنسبة له بعيدا عن خاصية Offset نحكى معا قبل الشرح :: بفرض انك تجلس فى منزلك ثم احتجت الى بعض الاغراض من سوبر ماركت علاء الدين فقلت لابنك احمد اذهب الى سوبر ماركت علاء الدين واحضر لنا هذه الاغراض فقال لك لا اعرف سوبر ماركت علاء الدين فقلت له هل تعرف منزل صديقى ابو محمد فقال نعم فقلت عند منزل صديقى ابو محمد اذهب شارعين الى الامام ثم ثلاثة شوارع الى اليسار ستجد سوبر ماركت علاء الدين ماذا فعل ابو احمد ليحدد لأحمد مكان السوبر ماركت لأبنة احمد :: اولا :: مكان البداية :: حدد له مكان البداية التى يبدأ منها وهى منزل صديقة ابو محمد ثانيا :: الاتجاه من مكان البدايه الى مكان السوبر ماركت :: لفد قال أبو احمد لأحمد من مكان البديه اتجه شارعين الى الامام ثم ثلاثة شوارع الى اليسار لتصل الى الهدف المراد وهو السوبر ماركت اذن ماذا فعل ابو احمد ليصف لأحمد كيفية الوصول الى الهدف :: لقد حدد له مكان البداية ثم حدد له الاتجاه بمعرفة ( الى الامام ) وايضا ( الى اليسار ) اى تم الوصول الى الهدف عن طريق نقطة البداية والانحراف عنها بمعرفة الاتجاهين االرئيسيين وهما ( الى الامام " الى اعلى " او الى الاسفل ) و ( الى اليسار او الى اليمين ) هذا هو ما يفعله التعبير Offset بالتمام اذن ال Offset نحدد لها مكان البداية ثم نحدد لها قيم الانحراف عن مكان البداية بمعرفة الاتجاهين الرئسيين لنصل الى الهدف لنرى هذا التوضيح ليكون اقرب الى الحقيقة بعض الشئ ماذا يحدث اذا قلت لك اخى العزيز ان تفعل الاتى : افتح ملف اكسيل :: اولا :: ابدأ بالوقف فى الخلية A1 ثانيا :: اتجه الى اسفل عدد 2 صف ثالثا :: اتجه الى اليسار عدد 2 عمود رابعا :: اين تقف الان تعالى معى لنرى ماذا فعلت خطوة خطوة بالترتيب السابق ل 4 خطوات فى اولا :: مكان البداية او نقطة الانطلاق :: ستقف فى الخلية A1 وفى ثانيا :: الانحراف او الاتجاه الاول ( وهو عدد من الصفوف ) :: التى تقول ( اتجه الى اسقل عدد 2 صف ) ستتحرك اولا صف واحد الى اسفل لتصبح فى الخلية A2 وثم تتحرك للمرة الثانية صف واحد ايضا لأسفل لتصبح فى الخلية A3 ( هذا هو اول اتجاه ) وفى ثالثا :: الانحراف الثانى ( و هو عدد من الاعمدة اما جهة اليسار او جهة اليمين ) :: لا تنسى اننا وصلنا الى الخلية A3 وسننفذ البند الثالث الذى يقول ( اتجه الى اليسار عدد 2 عمود ) اذن سنتحرك الى جهة اليسار عمود واحد لنصبح فى الخلية B3 ثم نتحرك مرة ثانية الى جهة اليسار عمود واحد لنصبح فى الخلية C3 اما فى رابعا : نرى اين نحن :: فلن نفعل شئ سوى النظر حولنا لنرى اين نحن الان . سنجد اننا نقف فى الخلية C3 هذا ما تقوم به خاصية Offset :: تعطينا مدى يبعد عن مدى محدد بعدد من الصفوف والاعمدة اى تستخدم لتشير الى خلية او مدى بالنسبة الى خلية اخرى او مدى اخر اى ان الخلية او المدى المشار اليه يبعد عن الخلية الاخرى او المدى الاخر بعدد من الصفوف والاعمدة اى انها تعدل المدى الى مدى اخر بعمل ازاحة عنه بعدد من الصفوف والاعمدة اى انها تحدد لنا مدى جديد بدلا من المدى الاصلى اذن نستطيع بأنفسنا بناء صيغة الخاصية Offset لتكون على الشكل التالى :: Offset(rowOffset:=2, columnOffset:=2) وهذه الصيغة مقبولة فى الاكسيل اذن تعالى معى لنحول الاربع بنود السابقة الى لغة الفجوال بيسك Range("A1").Offset(2, 2).Select اولا :: الامر :: Range("A1") هذا هو مكان البداية او الانطلاق هذا هو المكان الذى سيتم التحرك منه للوصل الى الهدف ثانيا :: الامر :: Offset(2, 2) هذا هو وصف الطريق الى الهدف انطلاقا من مكان البداية ( A1 ) اى انه الخريطة التى من خلالها سنصل الى الهدف ماذا تقول هذه الخريطة : هى تقول كلمتان سحريتان للوصول الى الهدف هم :: اتجه الى اسقل عدد 2 صف اتجه الى اليسار عدد 2 عمود الكلمة السحرية الاولى :: ( اتجه الى اسفل عدد 2 صف ) :: هى الرقم الاول بعد ( Offset ) فى الامر اذن الرقم الاول بعد ( Offset ) هو عدد الصفوف التى سنعبرها الى اسفل ولكن عند التنقل بين الصفوف يمكن ان تكون حركتنا خلالها اما الى اسفل او الى اعلى اذن كيف نعرف هل سنتحرك الى اسفل ام الى اعلى اذا كان الرقم الاول بعد ( Offset ) موجب تكون الحركة الى اسفل اما اذا كان الرقم الاول بعد ( Offset ) سالب تكون الحركة الى اعلى اذن نقوم بتنفيذ هذا الرقم الاول بعد ( Offset ) وهو موجب 2 بعد ان عرفنا الفرق بين اعلى واسفل سيكون تحركنا هو موجب 2 اى الى اسفل 2 خلية احنا بدأنا من الخلية ( A1 ) ونود النزول الى اسفل 2 خلية اذن الجزء الاول من الامر ( Offset ) هو من نقطة البداية ( A1 ) تحركنا صفين الى اسفل فأصبحنا فى الخلية ( A3 ) الكلمة السحرية الثانية :: ( اتجه الى اليسار عدد 2 عمود ) :: هى الرقم الثانى بعد ( Offset ) فى الامر اذن الرقم الثانى بعد ( Offset ) هو عدد الاعمدة التى سنعبرها الى الى اليسار ولكن عند الانتقال بين الاعمدة يمكن ان تكون حركتنا خلالها اما الى اليسار او الى اليمين اذن كيف نعرف هل سنتحرك الى اليسار او الى اليمين اذا كان الرقم الثانى بعد ( Offset ) موجب تكون الحركة الى اليسار اما اذا كان الرقم الثانى بعد ( Offset ) سالب تكون الحركة الى اليمين اى بعد الحركة الاولى التى اشارت الى الخلية ( A3 ) سنشير الى عمودين جهة اليسار اى نشير الان الى الخلية ( C3 ) اذن هذا الجزء من سطر الاوامر الذى نفذناه وهو Range("A1").Offset(2, 2) ماذا يقول بعد ان استوعبنا اتجاهات الحركة الخاصة ب ( Offset ) يقول :: بالانتساب الى الخلية ( A1 ) نحن نشير الى الاتجاه صفين الى اسفل وعمودين الى اليسار يعنى اننا اشرنا الى الموقع الجديد وهو الخلية ( C3 ) يعنى مهمة الصيغة ( Offset ) هى الاشارة الى موقع جديد بالنسبة الى موقع البداية بمعلومية عدد الصفوف و الاعمدة يعنى هى لا تقوم بفعل اى شئ سوى الاشارة الى موقع جديد ثالثا :: الامر ( Select ) :: هو الامر التنفيذى فى سطر الاوامر Range("A1").Offset(2, 2).Select هو اخر امر فى الجملة اى هو الفعل الذى سيتم تنفيذة بعد عملية الوصف او الازاحة اى بعد ان تم الاشارة الى موقع جديد وهو الخلية ( C3 ) قم بأختيارة او الوقف فية اذن خلاصة الامر Offset :: بمعلومية خلية البداية يشير الى خلية جديد تبعد عن خلية البداية بعدد من الصفوف والاعمدة فأذا كان عددها الاول موجب كان الاتجاة عدد من الصفوف الى اسقل فأذا كان عددها الاول سالب كان الاتجاة عدد من الصفوف الى اعلى و اذا كان عددها الثانى موجب كان الاتجاة عدد من الاعمدة الى اليسار و اذا كان عددها الثانى سالب كان الاتجاة عدد من الاعمدة الى اليمين :: :: الى من يختلط عليه اتجاة الحركة بين السلب والموجب ولماذا لم يكن العكس الموجب بدلا من السالب والسالب بدلا من الموجب بالنسبة الى اتجاهات الحركة هذا التوضيح عام بمعنى انه ينطبق على نسخ الاكسيل العربية او غير العربية :: تبدأ ارقام الصفوف بالارقام : 1 - 2 - 3 :: سواء فى نسخ الاوفيس العربية والاجنبية اذن اتجاه ترقيم الصفوف هو الموجب دائما فى اى لغة ويبدأ ترقيم الاعمدة :: C - B - A : اذن اتجاه ترقيم الاعمدة هو الموجب دائما فى اى لغة هذا حتى لا يختلط الامر علينا بخصوص اتجاه السالب والموجب :: :: المثال_1 :: Sub Ex_1() Range("F5").Offset(1, -2).Select End Sub فى سطر الاوامر التالى :: Range("F5").Offset(1, -2).Select يشير الى الخلية جديدة بمعلوية الخلية ( F5 ) وتبعد عنها صف واحد الى اسفل وعمودين الى جهة اليمين اى الخلية ( D6 ) ويختارها اى يذهب اليها المثال_2 :: Sub Ex_2() Range("G10").Offset(-3, -5) = "Officena" End Sub يشير الى لخلية جديدة بمعلوية الخلية ( G10 ) وتبعد عنها ثلاثة صفوف الى اعلى وخمسة اعمدة الى جهة اليمين اى الخلية ( B7 ) ويكتب فيها ( Officena ) المثال_3 :: نتذكر احد الامثلة فى شرح الحلقات التكرارية For...Next وكان كالتالى :: Sub Ex_3() For x = 1 To 3 Range("F" & x) = x Next x End Sub وكان يكتب فى المدى F1:F3 الارقام من 1 إلى 3 سنضيف سطر واحد الى هذا المثال نريد منه انه عندما يكتب فى الخلية F1 يكتب معرفة هذه الخلية كلمة "Officena" فى الخلية G1 وهكذا مع F2 و F3 طبعا بإستخدام دالتنا Offset ستكون المخرجات على الشكل التالى الخلية F1 طبعا ستكون = 1 والخلية G1 ستكون = "Officena" الخلية F2 طبعا ستكون = 2 والخلية G2 ستكون = "Officena" الخلية F3 طبعا ستكون = 3 والخلية G3 ستكون = "Officena" لتحقيق ذلك سنضيف سطر واحد الى المثال السابق قبل Next x وهو :: Range("F" & x).Offset(0, 1) = "Officena" ليكون المثال على المنوال التالى :: Sub Ex_3() For x = 1 To 3 Range("F" & x) = x Range("F" & x).Offset(0, 1) = "Officena" Next x End Sub فى البداية سيكت الرقم 1 فى الخلية F1 بالسطر التالى Range("F" & x) = x ثم هذا السطر المضاف ماذا يقول :: Range("F" & x).Offset(0, 1) = "Officena" بالاشارة الى الخلية نفسها التى كتبت الرقم 1 فى الخلية F1 وهى :: Range("F" & x) اعمل لها ازاحة او انحراف عنها عمود واحد جهة اليسار اى الخلية المجاورة لها جهة اليسار اى :: Range("F" & x).Offset(0, 1) وضع فيها القيمة Officena اى :: Range("F" & x).Offset(0, 1) = "Officena" اى ضع فى الخلية G1 كلمة Offset وهكذا حتى يكمل الدورات الثلاثة لنتقدم خطوة مع خاصية Offset هل تعمل هذه الخصية مع خلية مفردة فقط لا طبعا فالخلية المفردة تعتبر مدى او نطاق مكون من خلية واحدة و الخاصية Offset تتعامل فى الاصل مع المدى سواء كان خلية واحدة او مدى مركب من عدة اعمدة وصفوف اى ( جدول بيانات ) لنرى هذا المثال البسيط الذى نود فيه ان نقوم بالاتى :: نريد ان نكتب كلمة Officena فى المدى A1:B10 وهو مكون من عشرة صفوف وهم من الصف 1 - 10 وعمودين اثنين هما العمود A والعمود B بمعنى انه مدى مكون من عشرون خلية اى عبارة عن جدوال من عشرة صفوف وعمودين ليس من المعقول ان نستخدم For...Next لعمل ذلك عن طريق حلقتين تكراريتين لنرى المثال وهو تمهيد فقط للمثال الخامس المثال_4 :: Sub Ex_4() Range("A1:B10") = "Officena" End Sub يقوم هذا المثال بتعبئة المدى A1:B10 بكلمة Officena دفعة واحدة انسخ المثال الى ملف لتجربتة عظيم حتى الان و واضح المثال_5 :: ولكن ماذا اذا اردنا ان نعمل ازاحة لهذا المدى A1:B10 بمقدار عمود واحد عن موقعة الاصلى ( A1:B10 ) بمعنى بدلا من ان يقوم بتعبئة المدى A1:B10 بكلمة Officena يقوم يتعبئة المدى B1:C10 بكلمة Officena Sub Ex_5() Range("A1:B10").Offset(0, 1) = "Officena" End Sub نرى فى هذا الكود اننا تعاملنا مع هذا المدى كما تعاملنا مع مدى مكون من خلية مفردة نعم فالخاصية Offset مرنة ويمكنها التعامل مع الاوضاع التالية :: مدى مكون من خلية واحدة مدى مكون من مجموهة صفوف واعمدة اى جدول مدى مكون من عدة امدية او نطاقات مجمعة تشمل اى عدد من النوعين السابقين ولنرى مثال لذلك وعليك ان تقوم بالتجربة وتعديل المدى الى اى من الحالات الثلاثة السابقة المثال_6 :: Sub Ex_6() Range("A1:B10,F1:G10").Offset(0, 1) = "Officena" End Sub يحتوى هذا المثال على نطاقين عبارة عن جدولين هما النطاقين :: A1:B1 F1:G10 وسوف يقوم الكود بتعبئة نطاقين جديدين بمعرفة النطاقات السابقه بكلمة Officena على ان تكون النطاقات الجديدة لها ازاحه او انحراف عن النطاقات الاصلية بمقدار عمود واحد Range("A1:B10,F1:G10").Offset(0, 1) وهذه النطاقات بعد الازاحة ستكون B1:C1 بدلا من A1:B1 G1:H10 بدلا من F1:G10 وعليك تطبيق هذا المثال عمليا لترى وتستوعب طريقة عمل الخاصية Offset وايضا لتعرف هل استوعبت هذا الشرح ام هو غير مجدى والى لقاء قريب بإذن الله بصالح دعائكم1 point