اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

محمد حجازي

المشرفين السابقين
  • Posts

    771
  • تاريخ الانضمام

  • تاريخ اخر زياره

  • Days Won

    2

كل منشورات العضو محمد حجازي

  1. السلام عليكم ... جرب المثال المبسط التالي ، وذلك بفرض أن التاريخ مرتب بشكل تصاعدي: FIFO.zip
  2. 2.استخدام متغيرات الهدف: قد نحتاج في كثير من الأحيان للإشارة إلى هدف معين عدد من المرات (قد تزيد على المئة مرة :d ) ، وفي هذه الحالة ولتقليص حجم الكود وسهولة قراءته و متابعته فإننا نقوم بتخصيص متغير ليحل محل الهدف الذي نتعامل معه ، حيث أنه يمكننا استبدال التعامل ليكون مع المتغير مباشرةً . انظر للكود التالي: Sub Report() MsgBox "المجموع " & Application.WorksheetFunction.Sum(Sheets(1).Range("A1:D5,E10,F5,G1:G4")) MsgBox "المعدل " & Application.WorksheetFunction.Average(Sheets(1).Range("A1:D5,E10,F5,G1:G4")) MsgBox "الحدالأعلى " & Application.WorksheetFunction.Max(Sheets(1).Range("A1:D5,E10,F5,G1:G4")) MsgBox "الحد الأدنى " & Application.WorksheetFunction.Min(Sheets(1).Range("A1:D5,E10,F5,G1:G4")) MsgBox "عدد الأرقام " & Application.WorksheetFunction.Count(Sheets(1).Range("A1:D5,E10,F5,G1:G4")) End Sub لاحظ كيف أننا أشرنا إلى الهدف التالي خمس مرات خلال الكود السابق: Sheets(1).Range("A1:D5,E10,F5,G1:G4") لنقوم الآن باستخدام متغير معين (المتغير MyRange مثلاً) للدلالة على الهدف السابق: Sub Report1() Dim MyRange As Range Set MyRange = Sheets(1).Range("A1:D5,E10,F5,G1:G4") MsgBox "المجموع " & Application.WorksheetFunction.Sum(MyRange) MsgBox "المعدل " & Application.WorksheetFunction.Average(MyRange) MsgBox "الحدالأعلى " & Application.WorksheetFunction.Max(MyRange) MsgBox "الحد الأدنى " & Application.WorksheetFunction.Min(MyRange) MsgBox "عدد الأرقام " & Application.WorksheetFunction.Count(MyRange) End Sub لاحظ أننا لم نحتاج لكتابة الهدف سوى مرة واحدة خلال الكود (y) تستطيع الآن أن تقدر (من خلال تقيمك للكودين السابقين) مدى التخفيض الذي نستطيع أن نحققه في حجم الأكواد باستخدام الطريقة السابقة.
  3. السلام عليكم ... لقد راودني اليوم خاطر بينما كنت أكتب أحد الأكواد و أحببت أن أروي لكم ما كنت قد فكرت به : من المسلم به أن ما يزيد على 50% من مشاركات منتدانا تعتمد بصورة رئيسية على أكواد الـ VBA ، وجميعنا نتعامل مع هذه الأكواد و الملفات المرفقة بثقة تامة وبدون أي تردد، ولكن هل فكرت يوماً في احتمال كون إحدى هذه المرفقات تحتوي على فيروس مصمم بواسطة لغة الـ VBA!!! :o الطامة الكبرى تكمن في أن معظمنا (وأنا واحد منهم) قد ضبط مستوى أمان المايكرو في تطبيقات الأوفيس على الخيار منخفض ولم يفكر ولو مرة واحدة في تفحص الكود الموجود في المرفق قبل تشغيله. قد يبدو لك أنا كلامي فيه بعض التهويل ، ولكنك ستغير رأيك إذا عرفت ما يلي: - تتمتع لغة الـ VBA بمزايا واسعة تتعدى حدود التطبيقات التي تعمل عليها ، حيث أن هذه اللغة قادة على استخدام توابع الـ API والتعامل مع مكتبات الربط الديناميكي الخاصة بالنظام ، وكما أنها قادرة على التعامل مع الريجستري وتغيير إعداداته ، وهذا فضلاً عن قدرتها على التعامل مع ملفات جهازك بكل سهولة ؛ ولا تتفاجئ إذا أخبرتك بأنني قادر (باستخدام لغة الـ VBA) على مسح محتويات أي قرص في جهازك بواسطة كود لا يتجاوز الثلاثة أسطر. :@ - لقد ظهرت بالفعل نسخ من فيروسات مصممة على شكل مايكروات تخزن داخل تطبيقات الأوفيس :') ، ومن هذه الفيروسات: Microsoft.Excel.Spellcheck W97/X97M Shiver WM.PolyPoster XM.Compat الآن وبعد كل ما سبق أرجو أن تذهب فوراً إلى برنامج الاكسل (أو أي برنامج آخر من تطبيقات الأوفيس) وتغير مستوى أمان الماكرو إلى متوسط (على أقل تقدير) ، وتنتهج سياسة مبدأها الحذر و التشكيك في كل ملف اكسل تقوم بفتحه ؛ وفي سبيل إقناعك بذلك فقد صممت فيروس بسيط ووديع جداً ، جربه إذا كنت لا تزال غير مقنعاً بما كنت قد قلته لك. :pp: الفيروس كما قلت وديع ولا يسبب أية أضرار تذكر ، ولكن ولتفادي حدوث أي ضرر فإني أنصحك بإغلاق جميع التطبيقات قبل فتح الملف (لا تترك أي برنامج قيد العمل وأنت تقوم بتشغيل الفيروس). الفيروس موجود كمرفق في هذه المشاركة (بصيغتي xla و xls). تحياتي Virus.zip
  4. السلام عليكم ... سؤال ، هل التواريخ مرتبة عندك بشكل تصاعدة (من الأقدم إلى الأحدث) ، إذا كانت التواريخ كذلك فمشكلتك بسيطة ، أما إذا كانت التواريخ غير مرتبة فسوف تحتاج إلى كود طويل بعض الشيئ.
  5. السلام عليكم ... جربي الكود التالي: Sub Sort111() On Error GoTo OutRange Dim MyValue() As Double Dim MyRange As Range Dim sort1 As String Set MyRange = Application.InputBox(prompt:="أدخل مجال النسب", Title:="تصفية", Type:=8) If MyRange Is Nothing Then Exit Sub For i = 1 To Application.Count(MyRange) If MyValue(1, UBound(MyValue, 2)) = Application.WorksheetFunction.Large(MyRange, i) Then MyValue(2, UBound(MyValue, 2)) = MyValue(2, UBound(MyValue, 2)) + 1 Else ReDim Preserve MyValue(1 To 2, UBound(MyValue, 2) + 1) RE: MyValue(1, UBound(MyValue, 2)) = Application.WorksheetFunction.Large(MyRange, i) MyValue(2, UBound(MyValue, 2)) = MyValue(2, UBound(MyValue, 2)) + 1 End If Next i For n = LBound(MyValue, 2) To UBound(MyValue, 2) sort1 = sort1 & MyValue(1, n) & "=n(" & MyValue(2, n) & ")، " Next n Erase MyValue MsgBox prompt:=sort1, Title:="النتائج" Exit Sub OutRange: If Err = 9 Then ReDim MyValue(1 To 2, 0) GoTo RE End If End Sub ويمكنك لصق النتائج في خلية معينة (عوضاً عن رسالة النتائج) وذلك بتبديل الصف : MsgBox prompt:=sort1, Title:="النتائج" إلى: Sheets(1).Range("D2").Value = sort1 بالتوفيق
  6. السلام عليكم ... تابعي الرد في الموضوع السابق: http://www.officena.net/ib/index.php?showtopic=530
  7. السلام عليكم ... هذا تعديل لكود الأخ أمير عاطف بحيث لاتتكرر النتائج أكثر من مرة: RondonChoise.zip
  8. السلام عليكم ... كثرت التساؤلات في الفترة الأخيرة عن كيفية حفظ و فتح مصنف الاكسل بواسطة الكود ، لذلك سأتناول إن شاء الله في هذا الموضوع الطرق المختلفة لحفظ وفتح مصنفات الاكسل . - أبسط الطرق المستخدمة لحفظ وفتح المصنفات تستخدم الأسلوبين SaveAs، Open المبسطين: Sub SaveWorkBook() Workbooks("MAH").SaveAs Filename:="C:\MY WORK\New_MAH" End Sub Sub OpenWorkbook() Workbooks.Open Filename:="C:\MY WORK\MAH" End Sub نلاحظ أنه يجب علينا الإشارة بشكل صريح إلى الملف الواجب حفظه(خلافاً لأسلوب فتح الملف) ، كما نلاحظ أنه يمكننا حفظ الملف باسم مخالف للاسم الأصلي (New_MAH مثلاً). يمكننا الاستفادة من الأسلوب Open في القيام بعمليات على الملف المفتوح وذلك من خلال إسناد الملف المفتوح في متغير: Sub OpenWorkbook() Set MyBook = Workbooks.Open(Filename:="C:\MY WORK\MAH") MsgBox MyBook.Sheets(1).Range("A1").Value End Sub في الكود السابق قمنا بفتح الملف MAH ومن ثم قمنا بعرض محتويات الخلية A1 الموجودة في أول ورقة عمل في هذا الملف . لاحظ أننا استخدمنا القوسين في الأسلوب Open وذلك لأننا نتعامل هنا مع القيم المسترجعة من هذا الأسلوب. - عندما يكون مسار الملف (المفتوح/المحفوظ) متغيراً بصورة مستمرة ، في هذه الحالة يمكننا استخدام متغير نصي لإرجاع المسار واسم الملف وبذلك يمكننا تغيير المسار متى نشاء (طبعاً تبعاً لما تمليه علينا الظروف) : Sub OpenWorkbook() Dim MyPath As String MyPath = "C:\MY WORK\MAH" Workbooks.Open Filename:=MyPath End Sub يمكننا تغيير محتويات المتغير MyPath بواسطة كود نكتبه لتلك المهمة ، كما يمكننا الاستعانة بعدد من الأساليب لإسناد مسار الملف المطلوب في المتغير MyPath : 1. يمكننا الاعتماد على مستكشف (شبيه بمستكشف الويندوز) من أجل تحديد مسار الملف ، وذلك من خلال الاستعانة بالأسلوبين GetSaveAsFilename و GetOpenFilename : Sub SaveWorkBook() Dim MyPath As String MyPath = Application.GetSaveAsFilename If MyPath = "False" Then Exit Sub Workbooks("MAH").SaveAs Filename:=MyPath End Sub Sub OpenWorkbook() Dim MyPath As String MyPath = Application.GetOpenFilename If MyPath = "False" Then Exit Sub Workbooks.Open Filename:=MyPath End Sub لاحظ أننا أضفنا الشرط IF من أجل تلافي الخطأ الذي قد يحصل عندما لا يرجع المستكشف أي قيمة (عندما نقوم بالضغط على الزر Cancel). 2. يمكننا الاعتماد على مسار ملف نشط (قيد الاستخدام) ، وذلك من خلال استخدام الأسلوب Path مع الهدف Workbooks : Sub SaveWorkBook() Dim MyPath As String MyPath = Workbooks("MAH").Path & "\New_MAH" Workbooks("MAH").SaveAs Filename:=MyPath End Sub 3. يمكنك الاعتماد على مسار فهرس المكتبة الخاصة بالاكسل (المجلد الذي يحتوي على الملف التنفيذي للاكسل) ، وذلك من خلال استخدام الأسلوب Path مع الهدف Application : Sub OpenWorkbook() Dim MyPath As String MyPath = Application.Path & "\MAH" Workbooks.Open Filename:=MyPath End Sub عند القيام بحفظ ملف فوق آخر موجود تظهر لك رسالة تخبرك بأنك على وشك الحفظ فوق ملف موجود بالفعل وتسألك فيما إذا كنت ترغب بالمتابعة. إذا كنت لا ترغب بظهور الرسالة السابقة ، فعليك هنا إضافة سطرين إضافيين للكود ، السطر الأول لإزالة الخاصية DisplayAlerts من التطبيق و الثاني لإعادة تمكينها (بعد الانتهاء من حفظ الملف) ، مثال: Sub SaveWorkBook() Dim MyPath As String MyPath = Application.GetSaveAsFilename If MyPath = "False" Then Exit Sub Application.DisplayAlerts = False Workbooks("MAH").SaveAs Filename:=MyPath Application.DisplayAlerts = True End Sub لاحظ أن الأسلوب SaveAs يقوم بتنشيط الملف المنشأ (المحفوظ للتو) ويضعه بالوضعية النشطة الجاهزة للاستخدام ويقوم بالوقت ذاته بإغلاق الملف الأصلي (المصدر) ، ويمكنك الاستعاضة عن الأسلوب SaveAs بالأسلوب SaveCopyAs وذلك في حالة رغبتك بالإبقاء على الملف الأصلي في حالة نشطة بعد عملية التخزين. مثال: Sub SaveWorkBook() Workbooks("MAH").SaveCopyAs Filename:="C:\MY WORK\MAH_NEW.xls" End Sub بفرض أن مسار الملف موجود في في خلية ما من ورقة العمل (الخلية A1 الموجودة في ورقة العمل الأولى): Sub SaveWorkBook() Workbooks("MAH").SaveAs Filename:=Sheets(1).Range("A1").Value End Sub أرجو أن أكون قد وفقت في نقل المعلومة . تحياتي
  9. السلام عليكم ... جرب التنسيق التالي: "//"###,###.00"//" أما بالنسبة للأكسس فليس لدي معرفة فيما إذا كانت التنسيقات تنتقل عند التصدير.
  10. 1. التقليل بقدر الإمكان من مرات اختيار وتنشيط الهدف: بدايتي وبداية أغلب مبرمجي الـ VBA كانت تعتمد على مسجل الماكرو ، و السبب الذي يبرر هذه البداية بسيط جداً ألا وهو جهل المبرمج المبتدأ بالخصائص و الأساليب المستخدمة في الفيجوال والخاصة بتطبيق الاكسل . الطريقة السهلة التي يُنصح بها للتغلب على هذا الجهل (الجهل بالخصائص و الأساليب الخاصة بتطبيق الاكسل) هو تسجيل ماكرو لما تريد أن تقوم به ومن ثم إجراء بعض التعديلات على المايكرو المسجل ، ولكن لماذا نجري تعديلات على المايكرو مادام ينفذ ما نريد بالضبط؟. من أهم الأسباب التي تجعل الكود المسجل غير فعال (والتي تدفعنا لتعديله لاحقاً) هو تنشيط الأهداف بصورة غير مبررة ، حيث أنه يمكننا في أغلب الأحيان كتابة كود يتعامل مع الأهداف بدون الحاجة لتنشيط أي منها ، ولكن مادام هذا هو الأسلوب الأنسب لماذا لا يعتمده مسجل المايكرو في عمله؟. إن مسجل المايكرو يقوم بمراقبة الحركات و الأفعال التي يقوم بها المستخدم ويعمل على تسجيلها بأمانة تامة ( يبدوا أن الأمانة الزائدة لمسجل المايكرو هي السبب في خلق هذه المشكلة :d ) لنقوم الآن بتسجيل مايكرو يقوم بمسح محتويات الخلية C5 الموجودة في الورقة Sheet2: اضغط على الخيار Record New Macro الموجود في القائمة Tools (القائمة الفرعية Macro) لتبدأ عملية تسجيل المايكرو. انتقل للورقة Sheet2 وانقر على الخلية C5 واضغط على الزر Delete ، ومن ثم أوقف تسجيل الماكرو من نفس الخيار السابق (لاحظ تغير اسمه إلى Stop Recording). الآن اضغط على Alt+Enter لتفتح لك نافذة محرر الفيجوال ، افتح الموديل المنشأ لترى فيه الكود الذي تم تسجيله مؤخراً: Sub Macro1() Sheets("Sheet2").Select Range("C5").Select Selection.ClearContents End Sub يمكننا تعديل الكود السابق ليتمتع بمزيد من البساطة و السرعة وفي نفس الوقت نحصل على نفس النتائج السابقة وذلك بدون الحاجة إلى تنشيط أو اختيار كل هدف قبل التعامل معه. الكود المعدل : Sub Macro1() Sheets("Sheet2").Range("C5").ClearContents End Sub لاحظ الفرق (y) هناك سبب آخر يدفعنا لتعديل الكود المسجل ، وهو تسجيل الحركات الزائدة التي قام بها المستخدم دون قصد منه (لاحظ أن مسجل المايكرو يمارس رقابة صارمة على جميع حركاتك). لاحظ الكود التالي: Sub Macro1() Sheets("Main").Select Application.CommandBars("Standard").Visible = False End Sub المستخدم كان يهدف من خلال تسجيله للمايكر إلى حذف شريط الأدوات القياسي ، ولكنه بشكل غير مقصود قام بتحديد الورقة Main ، وبما أن أشرطة الأدوات مرتبطة مباشرةً بالهدف Application فلا داعي هنا للسطر : Sheets("Main").Select أرجو أن أكون قد وفقت في إيصال المعلومة
  11. السلام عليكم ... سوف أحاول إن شاء الله في هذه السلسلة سرد بعض النصائح التي تمكنك من جعل الكود الموجود في لغة الـ VBA أكثر فاعلية بحيث تتمكن من إعداد مايكرو يستهلك وقتاً أقل في التنفيذ وقدراً أقل من الذاكرة. بعض هذه النصائح التي سوف أطرحها تتعلق بلغة الفيجوال بيسك بشكل عام وبعضها الآخر خاص بتطبيق الفيجوال على الاكسل . عملية طرح المشاركات لن تعتمد على جدول زمني محدد ، وإنما سيتم طرح المشاركات تبعاً لتوفر الوقت لدي. لقد اعتمدت في طرحي لهذه النصائح على مصدرين أساسيين: - البرمجة التفاعلية باستخدام الفيجوال بيسك و الاكسل : كتاب ورقي للمهندس شريف فتحي الشافعي. - مجموعة كتابات حصلت عليها من الويب للأخ المتميز تركي العسيري. أنا مبتدئ ولا أملك أي فكرة عن لغة الفيجوال: لا تقلق يا أخي ، يمكنك فهم و استيعاب الدروس إذا كنت تمتلك خلفية بسيطة عن لغة الـفيجوال وكيفية تطبيقها على الاكسل ، ولكن كيف يمكنك الحصول على هذه المعرفة البسيطة؟ كيف يمكنني أن أحصل على أساسيات الـ VBA؟ بصورة عامة فإنك تحتاج من أجل الولوج إلى عالم الـ VBA إلى معرفتين أساسيتين: 1. معرفة مبادئ الفيجوال الأساسية : - الأحداث وكيفية ربط السبب بالنتيجة (ربط الحدث بالإجراء) - المتغيرات و الثوابت و أنواعها - خصائص الكائنات - أداة الشرط IF و الحلقات التكرارية ويمكنك الحصول على هذه المعلومات بسهولة من دروس الفيجوال المنتشرة بكثرة في المواقع العربية. 2. معرفة الأهداف في الاكسل وتسلسلها الهرمي. في الروابط التالية دروس للأخ محمد طاهر عن لغة الـ VBA: http://www.officena.net/Tips/Excel1-intr.htm http://www.officena.net/Tips/Excel2-vbeditor.htm http://www.officena.net/Tips/Excel3-Invoice.htm http://www.officena.net/Tips/Excel4-Grades.htm ومن خلال تصفحي السريع لهذه الدروس فإنني أعتقد بأنها تمثل خير بداية لمن يريد الدخول لعالم الـ VBA الممتع . أنصحك الآن بقراءة هذه الدروس لكي تتمكن من متابعة سلسلة النصائح التي سنوردها. أنا لا أرى من ضرورة تدفعني لتعلم الـ VBA! بالنسبة لي فأنا أرى أن الـ VBA تعني الإبداع و السرعة و المرونة ، وسوف يمنحك تعلم الـ VBA الفرصة في انتقالك من مجرد مستخدم عادي للتطبيق إلى مطور له ، وسوف تتمكن من القيام بمهام ما كنت لتحلم بتنفيذها بواسطة استخدام الأدوات التقليدية في الاكسل ، ولا تعجب إذا أخبرتك بأنني أختصر عملاً قد يستغرق عدة ساعات بكتابة كود لا يتجاوز السبعة أسطر . أظن أنك قد اقتنعت بتعلم الـ VBA. :d هذا الموضوع مفتوح لمشاركات الجميع ونحن نرحب بأي مشاركة لأي أخ ، ولكن رجاء ممن يريد إضافة أي مشاركة التقيد بالترقيم الذي سوف ننتهجه في طرح النصائح.
  12. السلام عليكم ... أنا استخدم التعليمة CurrentRegion من أجل معرفة نطاق البيانات القديم ، وبذلك أستطيع الكتابة تحت هذا النطاق بدون أن أمسح أي جزء من البيانات القديمة. راجع الرابط: http://www.officena.net/ib/index.php?showtopic=5234
  13. السلام عليكم ... لا أعرف لماذا لا يعمل الكود عندك؟ ، أنا الكود عندي شغال! على أية حال ، هناك طريقة أخرى لحل مشكلتك ، وذلك عن طريق الارتباط التشعبي. جرب و أخبرني بالنتيجة
  14. السلام عليكم ... فقط وضح ما هي طريقة الترحيل التي تتبعها (بواسطة الصيغة ، بواسطة الكود)؟
  15. السلام عليكم ... آسف على التأخر بسبب نسياني للموضوع ! :) جرب الدالة التالية التي كتبتها في عجالة : Function ARRAYING(MyRange As Range, Rank As Byte, NumberRow As Long) For i = 1 To Rank If Application.WorksheetFunction.Large(MyRange, i) = Application.WorksheetFunction.Large(MyRange, Rank) Then n = n + 1 End If Next i For Each MyCell In MyRange.Cells If MyCell.Value = Application.WorksheetFunction.Large(MyRange, Rank) Then n1 = n1 + 1 If n1 = n Then ARRAYING = Cells(NumberRow, MyCell.Column).Value Exit Function End If End If Next MyCell End Function Electricity1.zip
  16. السلام عليكم ... من القائمة Data اختاري Sort لتظهر لك نافذة ، في القائمة الأولى حددي عامود النسب واختاري نوع الفرز (تصاعدي ، تنازلي).
  17. السلام عليكم ... تأكد أخي من أنك كتبت اسم المسار بشكل صحيح ، وعلى كل حال فيمكنك الاستعانة بالأسلوب GetOpenFilename بدلاً من الأسلوب التقليدي Open. الفرق بين الأسلوبين هو أنه في الأسلوب GetOpenFilename يعرض لك صندوق حوار فتح ملف وهذا قد يكون أفضل. نستطيع تغيير الكود السابق إلى : Sub open_1() Dim FName As String FName = Application.GetOpenFilename If FName = "False" Then Exit Sub Workbooks.Open Filename:=FName End Sub بالتوفيق
  18. السلام عليكم ... اضغط على Alt+f11 ومن ثم أدرج Module من القائمة Insert ، وفي داخل المودل ألصق كود الدالة السابقة. راجع الرابط التالي ، مع الانتباه إلى أن الموضوع الموجود فيه يشرح كيفية إنشاء إجراء وليس دالة: http://www.officena.net/ib/index.php?showtopic=4624 الآن اذهب لورقة العمل واكتب في داخل أي خلية الدالة التالية: =constant() الدالة السابقة ترجع الرقم 101، ويمكنك استخدام الدالة السابقة داخل أي صيغة تريد. يمكنك إنشاء أكثر من دالة في الموديل الواحد ولكن مع الانتباه لعدم تشابه أسماء الدوال المنشئة. كما ذكرت سابقاً ، يجب عليك تغيير نوع الثابت ليتناسب مع البيانات المخزنة فيه ، ولمزيد من المعلومات على أنواع البيانات راجع الدرس التالي للأخ محمد طاهر: http://www.officena.net/Tips/Excel4-Grades.htm بالتوفيق
  19. السلام عليكم ... جرب التعديل التالي: ________.zip
  20. السلام عليكم ... يمكنك حل مشكلتك عن طريق التنسيق الشرطي ، وفي حالة احتواء الأعمدة على صيغ يمكنك الاستعانة بالدالة INDIRECT لتنظيم المجالات. لم أعدل المرفق لأن السؤال لم يكن واضح ، وفي حالة رغبتك بالتعديل فرجاء بتوضيح السؤال وإرفاق ملف جديد يحتوي على الصيغ.
  21. السلام عليكم ... ربما يكون الخطأ في أن الفاصلة المنقوطة ليست افتراضية في نظام التشغيل لديك ، يمكنك تغيير إعدادات الوندوز أو تغيير الفاصلة في الصيغة السابقة إلى عادية . جرب وأخبرني بالنتيجة.
  22. السلام عليكم ... الحل بسيط جداً ، فقط أنشئ دالة كما في الكود: Function constant() Const Number As Integer = 101 constant = Number End Function ويمكنك تغيير نوعية البيانات الموجودة بداخل الثابت حسبما تريد ، وذلك طبعاً مع مراعاة تغيير نوع الثابت ليتوافق مع البيانات الموضوعة بداخله.
  23. السلام عليكم ... أخي الفاضل راجع قسم الخلاصات لعلك تجد فيه ضالتك ، وإن لم تجد شيئاً يفيدك فابدأ في برنامجك ونحن جاهزون لتساؤلاتك ، وسوف توفق إن شاء الله
  24. السلام عليكم ... للاعتبار: http://groups.yahoo.com/group/IslamicReminder/message/216
  25. السلام عليكم ... جرب الطريقة الموجودة في المرفق CheckBoxes.zip
×
×
  • اضف...

Important Information