اذهب الي المحتوي
أوفيسنا

دورة شرح الفيجول بيسك للتطبيقات VBA


الردود الموصى بها

فعلا أخي يحياوي فملف المعلومات قبل السحب ولكن وضع في مووديل مستقل وليس في المعلومات البرمجية لليوزر فورم

فقط كانت محاولة لأنه عندي مجموعة يوزرفورم vb6 وحاولت سحبها فقلت ربما هناك طرقة أخرى .

الفكرة وصلت إن شاء الله جزاك الله خير

تم تعديل بواسطه الشهابي
رابط هذا التعليق
شارك

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

استكمالاً لما بدأه الإخوة الأعزاء أواصل معكم أحبابي أعضاء منتدى أوفيسنا سلسلة شرح فيجوال بيسك التطبيقات vba

عرفنا في الفصل الأول تسجيل الماكرو ومستويات الأمان والتعامل مع ما تم تسجيله من الماكروات سواء بالحذف أو تعيين اختصار أو ربطه بزر ........ والكثير.

وفي الفصل الثاني تعرفنا على محرر فيجوال بيسك وواجهته الرئيسية ومكونات نافذته واستخدامات كل جزء فيها وخصائص معظم عناصر التحكم التي يمكن استعمالها في نماذج vba.

والآن جاء دورنا مع التعرف على أساسيات لغة vba كلغة برمجة:

ما الفرق بين vb (فيجوال بيسك) و vba (فيجوال بيسك التطبيقات) ؟

لا أجد فرقا كبيراً فالقواعد المتبعة هنا هي نفسها هناك ولكن الفرق الوحيد الجوهري هو أن vb قائمة بذاتها أما vba فيتم احتوائها داخل أي تطبيق مثل الإكسل أو الوورد أو أي تطبيق آخر كما أن vb قادرة على إنتاج ملفات تنفيذية exe تكون واجهة للبرنامج بعد ذلك أما vba فتستعمل التطبيق المضمنة داخله كواجهة لها ولا تنتج ملفات تنفيذية.

* من أول ما يجب علينا معرفته في أي لغة برمجة هي:

المتغيرات : وهي عبارة عن مخازن يتم تحزين البيانات بداخلها في ذاكرة الحاسب وتختلف مساحة المخزن باختلاف حجم ما يتم تخزينه بداخله

وهنا يجدر بنا الإشارة إلى شروط تسمية المتغيرات

فيجب ألا يكون اسم المتغير من الكلمات المحجوزة في إكسل وهذه صورة لبعضها

post-20707-0-63291000-1323800712_thumb.j

ويجب ألا يبدأ اسم المتغير برقم ويمكن أن يبدأ بحرف أو _ (underscore)

وألا يحتوي على مسافة أو رمز خاص

لذلك نجد أن vba تحتوي على مجموعة من أنواع البيانات التي تحدد نوعية المتغيرات منها:

Byte : وهو اصغر أنواع البيانات مساحة حيث يشغل في ذاكرة الكمبيوتر 1 بايت ومداه الأرقام من صفر إلى 255 فقط.

Integer : وهو لتخزين الأرقام الصحيحة بطول 5 خانات ويشغل في الذاكرة 2 بايت ويمكن اختصار تعريفه هكذا:


dim variableName%

بدلا من
dim variableName as integer
Long : وهو رقم صحيح طويل بطول 7 خانات ويشغل في الذاكرة 4 بايت ويختصر بإضافة & في نهاية اسم المتغير. Single : وهو لتخزين رقم عشري بطول 7 خانات ويشغل في الذاكرة 4 بايت ويختصر بإضافة ! في نهاية اسم المتغير. Double : لتخزين رقم عشري بطول 15 خانة ويشغل في الذاكرة 8 بايت ويختصر بإضافة # في نهاية اسم المتغير. Boolean : لتخزين قيم منطقية true/false ويشغل في الذاكرة 2 بايت. String : لتخزين النصوص حتى أكثر من 2 مليار حرف والحرف يشغل 1 بايت أي يتسع المتغير النصي إلى 2 جيجا بايت نصوص. Date : لتخزين التواريخ والأوقات ويشغل في الذاكرة 8 بايت يبدأ تاريخ vba من 1/1/100 حتى 31/12/9999 (لاحظ أن تاريخ الإكسل يبدأ من 1/1/1900) ويجب إحاطته بعلامة # مثال : mydate=#1/1/2000# Object : لتخزين الكائنات التي تحتوي على خصائص ووظائف ويتم تعيينه بجملة set ويشغل في الذاكرة 4 بايت أو حسب خصائص ووظائف الكائن المحدد. Variant : لتخزين كل الأنواع السابقة ويمكن تخزين المصفوفات بداخله أيضاً. وهذه الصورة توضح أنواع البيانات post-20707-0-52794100-1323631081_thumb.j ......................... نأتي إلى معاملات لغة vba وتنقسم إلى : معاملات حسابية مثل الأس والضرب والجمع وهكذا يجب علينا معرفة أولوية حساب هذه المعاملات (أي العمليات يتم أولاً؟) وهي كالتالي مرتبة من الأكثر أولوية إلى الأقل كما بالصورة: post-20707-0-14362400-1323631142_thumb.j نأتي الآن إلى معاملات المقارنة وهي تستعمل للمقارنة بين قيمتين وهي كالتالي:


=

يساوي


<>

لا يساوي


>

أكبر من


>=

أكبر من أو يساوي


<

أصغر من


<=

أصغر من أو يساوي والآن جاء دور المعاملات المنطقية : وهي التي تستعمل للتحقق من أكثر من شرط وهي كالتالي: Not : وهي لعكس نتيجة قيمة فإذا كانت true ترجع هي القيمة false والعكس صحيح. And : وترجع true إذا كان كلا الشرطين صحيح وترجع false فيما عدا ذلك. Or : وترجع false إذا كان كلا الشرطين غير صحيح وترجع true فيما عدا ذلك. Xor : وترجع false إذا كان كلا الشرطين صحيحاً أو خطأً وترجع true فيما عدا ذلك. Eqv : وهي عكس xor حيث ترجع true إذا كان كلا الشرطين صحيحاُ أو خطأً وترجع false فيما عدا ذلك. .......... إن أول ما يستعمله المبرمج في لغة البرمجة هي دالة الرسائل حيث يقوم من خلالها بإرسال رسائل للمستخدم أو يأخذ منه قيم من خلال مربع الإدخال فهيا بنا نتعلم الرسائل ومربع الإدخال: الصيغة العامة لصندوق الرسالة msgbox :
MsgBox(prompt[, buttons] [, title] [, helpfile, context])
وتعني prompt نص التنبيه ثم بعدها الأزرار المستخدم في الرسالة ثم عنوان الرسالة ثم ملف المساعدة ثم رقم المقالة داخل ملف المساعدة وكل القيم اختيارية ما عدا نص الرسالة وهذه صورة تحتوي على أسماء الثوابت والقيم الرقمية المستخدم في خانة الأزرار. post-20707-0-58380000-1323631454_thumb.j ويمكننا أن نضع القيمة الراجعة من الرسالة في متغير مثل:
Mas=msgbox(“are you ready”,vbyesno,”title”)
وهذه صورة توضح القيم الراجعة من صندوق الرسائل كثوابت وكقيم رقمية لاستعمالها في كاستجابة لاختيار المستخدم فإذا اختار المستخدم نعم نفذ كذا وإذا اختار المتخدم لا نفذ كذا. post-20707-0-58510600-1323631524_thumb.j نأتي الآن لمربع الإدخال inputbox وهو شبيه بصندوق الرسائل وصيغته العامة هي:
myValue = InputBox(message, title, defaultValue)

وتحتاج إلى نص الرسالة وعنوان الصندوق والقيمة الافتراضية بحيث إذا لم يدخل المستخدم قيمة أو وافق على القيمة المقترحة منك

ويمكننا التعامل مع القيمة الراجعة منه كما تعاملنا مع القيمة الراجعة من الرسالة.

.....................

وبإذن الله في الدرس القادم

سوف نتعرف على كيفية الإعلان عن المتغيرات والثوابت

وكذلك ما يسمى بمدى المتغيرات

وكيفية إنشاء ماكرو من خلال الكود وليس بتسجيل ماكرو

وكذلك كيفية إنشاء دالة .

وكيفية إضافة تعليقات للكود

وبإذن الله سوف يكون فيديو.

..........

وأعدكم بهديتين في الفيديو ولكن بعد أن يتم اكتشافهما من حضراتكم سوف يتم إخباركم بالسر فيهما.

  • Like 5
رابط هذا التعليق
شارك

أشكر جميع الإخوة على المرور والكلمات الرقيقة

وكما وعدتكم هذا أول فيديو

وهو يخص الإعلان عن المتغيرات والثوابت بصورة كاملة وبصورة مختصرة

ومعرفة نوع بيانات متغير بالكود

وكذلك التحويل بين أنواع البيانات

وسيتم بإذن الله شرح كيفية كتابة الماكرو والدالة وإضافة تعليقات في المرة القادمة

ولا تنسوا أخاكم محمد صالح من صالح دعائكم

  • Like 7
رابط هذا التعليق
شارك

السلام عليكم

بارك الله فيك اخي محمد صالح على هذا الشرح وهو من اهم الدورس المتعلقة بال vba واسمح لي بهذه المداخلة البسيطة وليتسع صدرك لي قليللا

هناك خطأ شائع يقع فيه اغلب المبرمجين في تعريف المتغيرات بل ان اغلب المراجع المتعلقة بهذا الجانب تقع في نفس الخطأ وهو طريقة تعريف مجموعة متغيرات متشابهة فلو فرضا اردنا تعريف المتغيرات c1 , c2 , c3 من النوع date فسيتم تعريفها كالتالي



Dim c1, c2, c3 As Date

وهذا بالطبع خطأ ففي الحالة هذه لن يتم إلا تعريف المتغير الاخير (c3) فقط من النوع (date) أما المتغيران (c1 , c2 ) فسيتم تعريفهما من النوع الافتراضي وبالتالي فأن الكود

Dim c1, c2, c3 As Date

يعادل الكود

Dim c3 As Date

وليس الكود الذي نريده

Dim c1 As Date

Dim c2 As Date

Dim c3 As Date

ويمكننا كتابته ايضا على النحو التالي

Dim c1 As Date, c2 As Date, c3 As Date

عذرا على هذه المداخلة ولكن اقتضت الفائدة لها والله من وراء القصد

  • Like 2
رابط هذا التعليق
شارك

بارك الله لك أخي عماد

بالفعل ما تقوله صحيح وربما اشتبه علي الأمر حيث توجد هذه الميزة في vb و vb.net

ولكن بالتحقق من نوع بيانات المتغير c1 من خلال كتابة الدالة


typename(c1)

يظهر لنا أنه بالفعل تم الإعلان عن المتغير وحجز مكان في الذاكرة له ولكن يبقى نوع بياناته فارغاً empty فإذا تم تعيين قيمة له وكانت هذه القيمة تاريخ يظهر لنا أن نوع بيانات هذا المتغير date .............. فالفرق الجوهري بين المتغير الأول والثالث في السطر هو: أن المتغير الأول والثاني يمكن تغيير نوع بياناتهم حسب القيمة التي يتم تعيينها لهم أما المتغير الثالث يثبت على نوع البيانات التي تم تعريفه بها وممكن أن يرى أحدنا هذه بأنها ميزة في تغير نوع بيانات المتغير. .......... أنا شخصياً أعتمد على الطريقة الثانية وهي الأصح

dim c1 as date,c2 as date,c3 as date

وفي الأخير أتمنى أن نكون قد استفدنا من هذا الجزء

وبانتظار ملاحظتكم بخصوص الهديتين

  • Like 2
رابط هذا التعليق
شارك

ما شاء الله

شرح رائع وصوت اروع

بارك الله فيك

وبالفعل هذا من اهم الدروس

واضيف الى المتغيرات هذا


dim a1 as range

وهذا يخص تعريف الخلايا او المدى

والله اعلم

  • Like 2
رابط هذا التعليق
شارك

ما شاء الله

شرح رائع وصوت اروع

بارك الله فيك

وبالفعل هذا من اهم الدروس

واضيف الى المتغيرات هذا


dim a1 as range

وهذا يخص تعريف الخلايا او المدى والله اعلم
بارك الله لك أخي عبد الله range ليس نوع بيانات وإنما هو كائن object كامل له خصائصه وأحداثه وأفعاله
Object : لتخزين الكائنات التي تحتوي على خصائص ووظائف ويتم تعيينه بجملة set ويشغل في الذاكرة 4 بايت أو حسب خصائص ووظائف الكائن المحدد.
لذلك يلزمنا عند تعيين قيمة له أن نستعمل كلمة set بهذه الصورة

set a1=range("a25")

أما طريقة تعيين قيمة لمتغير فتتم بالصورة الافتراضية

varibalename=value

وبانتظار ملاحظات الإخوة ومناقشاتهم حول هذا الموضوع

وقد ظهرت هديتي للإخوة في الشرح

فما هي؟

حتى يتم شرحها أيضاً

  • Like 1
رابط هذا التعليق
شارك

جزاك الله خيرا وبارك فيك .

والسؤال الاول : هل نستطيع ان نقول ان الاعلان عن المتغيرات في VBA يكون بواسطة DIM

وان الاعلان عن القيم الثابتة يكون بواسطة CONST

والسؤال الثاني : في الدالة التي في الشرح تم تعريف F1 انها Integer يعني انها تحتمل ان تكون عدد من الارقام المتغيرة

ثم بعدها تم تعريفها انها f1=10 فهل صارت بهذا المعادلة تعتبر قيمة ثابته فاذا كان كذلك

فلماذا لم يتم تعريفها بداية كقيمة ثابتها const f1=10

ولك جزيل الشكر .

تم تعديل بواسطه mom101
رابط هذا التعليق
شارك

أخي الكريم mom101

بالنسبة للسؤال الأول: نعم تستعمل dim للإعلان عن المتغيرات و const للإعلان عن الثوابت

وبالنسبة للسؤال الثاني : يتم تعريف المتغير ب dim ثم تعيين قيمة مبدئية له من خلال

variablename=value

وفي حالتنا هذه قمنا بتعيين قيمة 10 كقيمة مبدئية للمتغير f1 ولا يمنع هذا من تغير قيمة f1 أثناء عمل البرنامج فمثلا لو كتبنا هذا السطر


f1=f1+10

msgbox f1

ستكون النتيجة ظهور الرقم 20 في رسالة وهذا يعني أن قيمة المتغير f1 تغيرت إلى 20 ولم تظل ثابتة على 10 التي تم تعيينها له مبدئياً

أما إذا نفذت نفس الخطوات مع الثابت فقمت بالإعلان عنه ثم تعيين قيمة له (لاحظ عدم ذكر كلمة مبدئية) ثم حاولت أن تضيف له 10 بنفس الكود المستعمل مع المتغير ستظهر رسالة خطأ تخبر بأنه

assignment to constant not permitted

وتعني

لا يجوز تعيين قيمة لثابت

أتمنى أن يكون اتضح الأمر

رابط هذا التعليق
شارك

استاذى محمد صالح

اولا اود ان اتقدم بالشكر لك خاصة شرحك روعه والاخوة القائمين على الدورة عامة

جزاك الله خيرا وبارك فيك

ارجو ان يتسع صدرك ووقتك لمناقشة وشرح المتغيرات ببطء فهى من وجهة نظرى بداية البناء

ما هو Objectsالكائن هل هو

VBA Collection Objects

The Application Object

Workbook and Window Objects

The Worksheet Object

The Range Object

علمنا منك انه يعلن عنه dim

ويعين set

ارجو ضرب امثله بسيط للاعلان عن كل كائن وتعيينه

ولك الشكر

اخوك

سعد عابد

رابط هذا التعليق
شارك

شاكر جدا لجميع الإخوة على المرور وأتمنى للجميع الفائدة والمتعة

وبالنسبة لأخي سعد : نوع البيانات object هو عام يمكن استعماله مع أي كائن من الكائنات المذكورة من سيادتكم وغيرها

فمثلا تطبيق الإكسل هو عبارة عن كائن له خصائصه ومنها شرائط الأدوات ومكانه على الشاشة وله أحداثه (أفعال) منها مثلا quit

ويمكن التعامل مع المصنف النشط ككائن وكذلك ورقة العمل النشطة وكذلك المدى المحدد

وللتعرف أكثر على الكائنات الموجودة في برنامج الإكسل وخصائصها ووظائفها

يمكنك استعمال مستعرض الكائنات object browser وذلك بالضغط على f2 في محرر الفيجوال بيسك

حيث تجد في الناحية اليسرى كل الكائنات الممكنة وبالضغط على الكائن المطلوب يظهر في الناحية اليمنى خصائصه ووظائفه التي يمكنك استعمالها

مع العلم أنه يمكن أن يكون كائن معين خاصية ضمن كائن آخر (رغم كونه كائن كامل) مثل المصنف النشط هو ضمن التطبيق وكذلك ورقة العمل النشطة ضمن المصنف وكذلك المدى ضمن ورقة العمل وهكذا

أتمنى أن يكون الأمر اتضح

رابط هذا التعليق
شارك

بارك الله فيك اخي الكريم mas123 على الشرح الرائع وجزاك الله خيرا

ما الهدف من الاعلان عن المتعيرات وماذا سيحدث لو لم يتم الاعلان عن متغير

سؤال وجيه أخي عبد القادر

يمكنك عدم الإعلان عن المتغيرات في vba وتكتفي فقط بتعيين قيمتها وسوف يتم إنشاء هذا المتغير عند قراءة سطر التعيين

ولكن الأصح والأسلم من الوقوع في الخطأ هو الإعلان عن كل متغير وتحديد نوعه في جملة الإعلان

تصور معي مثلا أنك لا تعلن عن المتغيرات ولا أنواعها:

ثم عينت قيمة لمتغير اسمه student ثم بعدها قمت بتغيير قيمة هذا المتغير ولكن بخطأ إملائي مثلا

student=tudent+10 (لاحظ الخطأ الإملائي في اسم المتغير)

في هذه الحالة سيتم إنشاء متغير جديد باسم tudent وسيتم وضع 0 فيه ثم يتم إضافة 10 عليه وبالتالي تكون قد تغيرت قيمة student الأصلية إلى 10 فقط في حين أنك تريد أن تزيد على الرقم الأصلي 10

طبعاً تقول أنه يسهل عليك اكتشاف موضع الخطأ يدويا في حالة سطور قليلة من الكود

ولكن كيف يتم متابعة الخطأ في الملفات التي تحتوي على أكواد كثيرة

نأتي للصورة الصحيحة: إذا حدث هذا وأنت قد قمت بتنشيط require variable deceleration في نافذة الخيارات لمحرر الفيجوال بيسك أو كتبت Option Explicit في أعلى الموديول

سيتم الانتقال مباشرة إلى موضع الخطأ ويسهل تصحيحه بإذن الله

  • Like 1
رابط هذا التعليق
شارك

السلام عليكم

الاستاذ القدير محمد صالح حفظك الله ورعاك

ماهي الاسباب التي تنتج عن خطاء غير إثبات المتغيرات

مثلا انا كتبت كود هكذا


thedate = Format(Date, "long date")

وهو معرف في بداية الكود على انه

Dim thedate As String

على أساس اريده ينقراء في مسج بوكس

فيظهر خطاء عند كلمة التنسيق thedate = Format(Date, "long date")

المشار اليها باللون الأحمر

فأين بيت الداء بارك الله فيك

رابط هذا التعليق
شارك

أخي الكريم alidroos

الدالة format ترجع قيمة من نوع


Variant (String)

ولا ترجع أي خطأ عندي ولكن جرب أن تعلن عن المتغير بنوع variant وليس string ليصبح الإجراء كاملا إلى

Sub mas()

Dim thedate As Variant

thedate = Format(Date, "long date")

MsgBox thedate

End Sub

رابط هذا التعليق
شارك

استاذي الحبيب

وبرضه مثل ماقلت جربت سابقاً اعلنت المتغير


Dim thedate As Variant

ونفس الخطاء يظهر

استاذي الحبيب محمد صالح

انا شغال على الكود طبيعي في ملفاتي

والمشكله حاصله عند الاخ الفاضل AbedElkader

الذي هو متواجد في هذا الموضوع

انا حبيت اعرف اين الخطاء كي نتلافى مثل هكذا مشاكل

تم تعديل بواسطه alidroos
  • Like 1
رابط هذا التعليق
شارك

أخي عبد القادر

ياريت تذكر لي رقم الخطأ ونص رسالة الخطأ ونوع نظام التشغيل لديك

حتى أتمكن من معرفة سبب الخطأ وعلاجه

رابط هذا التعليق
شارك

والآن مع الجزء الثاني من الفصل الثالث لدورة vba والذي يحتوي على:

إنشاء ماكرو بدون معاملات (parameters)

إنشاء ماكرو بمعاملات

إنشاء دالة بدون معاملات (parameters)

إنشاء دالة بمعاملات

استدعاء ماكرو أو دالة من داخل ماكرو

استعمال نافذة التصحيح debug

ربط النصوص والمتغيرات ونتائج الدوال ببعض

إضافة تعليق

التحكم بالتعليقات بالقائمة المتخصرة

ولا ينقصني سوى دعاؤكم لي بالخير والتوفيق في الدنيا والآخرة

  • Like 6
رابط هذا التعليق
شارك

السلام عليكم

أسأل الله ان يوفقك دنيا واخرة

طريقة تضليل الكود الغير مستخدم

معلومة كنت اتمناها

فأعتبرها إضافه من قبلك للإكسل لجهلي التام بها

ولي استفسار اخر استاذ محمد صالح

وهو هل اقدر احتفظ بأدواتي في محرر الفيجول

ادواتي يعني المعادلات والمتغيرات التي استخدمها في صياغة الاكواد بإستمرار

يعني عند كتابة كود اريد استخدم on error resume next

وغيرها تكون الجمله موجوده اختارها من القائمة فتكتب في السطر الواقف عليه في الكود

بارك الله فيك

تم تعديل بواسطه alidroos
  • Like 1
رابط هذا التعليق
شارك

السلام عليكم

أسأل الله ان يوفقك دنيا واخرة

طريقة تضليل الكود الغير مستخدم

معلومة كنت اتمناها

فأعتبرها إضافه من قبلك للإكسل لجهلي التام بها

ولي استفسار اخر استاذ محمد صالح

وهو هل اقدر احتفظ بأدواتي في محرر الفيجول

ادواتي يعني المعادلات والمتغيرات التي استخدمها في صياغة الاكواد بإستمرار

يعني عند كتابة كود اريد استخدم on error resume next

وغيرها تكون الجمله موجوده اختارها من القائمة فتكتب في السطر الواقف عليه في الكود

بارك الله فيك

أشكر جميع الإخوة على المرور

ولكن اسمح لي أخي أبا نصار العيدروس

ماذا تعني بـ "طريقة تضليل الكود الغير مستخدم"

وبالنسبة لطلبك الثاني فمضمونه هو الهدية الثانية

وإن كان طلبك الأول يخص كيفية تلوين الكود داخل نافذة الفيجوال بيسك كما يظهر في vb.net

فهذه هي الهدية الأولى

التي وعدتكم بهما لمن يكتشفهما

..........

وأعدكم بهديتين في الفيديو ولكن بعد أن يتم اكتشافهما من حضراتكم سوف يتم إخباركم بالسر فيهما.

وفقنا الله وإياكم لكل ما يحب ويرضى

  • Like 1
رابط هذا التعليق
شارك

السلام عليكم

استاذي الحبيب محمد صالح حفظك الله ورعاك

"

طريقة تضليل الكود الغير مستخدم

"

اعتبرها الهديه الثانية وياريت تكثر الهدايا

هداياك قيمة لاتقدر بثمن بارك الله فيك ووهب لك ماتتمنى

رابط هذا التعليق
شارك

السلام عليكم

بعد اذن استاذنا الفاضل والماسة المنتدى

اضع هنا شرح لطريقة كتابة الكود والدالة في المحرر كنت قد اعددته من فترة

  • Like 5
رابط هذا التعليق
شارك

أخي عبد القادر

ياريت تذكر لي رقم الخطأ ونص رسالة الخطأ ونوع نظام التشغيل لديك

حتى أتمكن من معرفة سبب الخطأ وعلاجه

بارك الله فيك اخي العزيز على الشرح الوافي

بالنسبة لسؤالك عن الخطأ الحاصل عندي هو كما في الصورة

اما بالنسبة لنظام التشغيل عندي فهو ويندوز 7 واستخدم اوفيس 2010

2vbm0j6.jpg

رابط هذا التعليق
شارك

أخي عبد القادر

ياريت تذكر لي رقم الخطأ ونص رسالة الخطأ ونوع نظام التشغيل لديك

حتى أتمكن من معرفة سبب الخطأ وعلاجه

بارك الله فيك اخي العزيز على الشرح الوافي

بالنسبة لسؤالك عن الخطأ الحاصل عندي هو كما في الصورة

اما بالنسبة لنظام التشغيل عندي فهو ويندوز 7 واستخدم اوفيس 2010

2vbm0j6.jpg

أستاذ عبدالقادر

اعتقد ان الخطأ الذي تحصل عليه نتيجة استخدامك للمتغير على انه دالة، بمعنى

انت قمت بتعريف المتغير FORMAT على انه من النوع Varient

لكن في VBA توجد دالة اسمها Format تقوم بعمل تنسيق على قيمة محددة بالتنسيق الذي تريده

ويكون إستخدام دالة التنسيق Format كما ذكر الأستاذ / محمد صالح

Format(myValue, myFormat)
Format(1234.5, 0.00)

نتيجتها ستكون 1234.50

رابط هذا التعليق
شارك

السلام عليكم

الاستاذ الحبيب معتصم محمد

هذه كانت احد المحاولات للحصول على حل

هو كان الكود كما تفضلت

بهذا الشكل


Sub MACRO15()

Dim thedate As String, thetime As String, greeting As String, fullname As String, firstname As String, ali As String

    Dim spaceinname As Integer, abood As String, alidroos As String, MY As String, thkr As String, thedat As String

    VBA.Calendar = vbCalGreg

    thedat = Format(Date, "long date")

    VBA.Calendar = vbCalHijri

    thedate = Format(Date + 1, "long date")

    thetime = Format(Time, "medium time")

    abood = "التـاريخ هجري"

    ali = "التاريخ ميلادي"

    alidroos = "السـاعه"

    thkr = "لاتنسـى ذكــر الله"

    MY = "لا اله الا الله محمد رسول الله maicl2010ye@gmail.com"

    Select Case Time

	    Case Is < TimeValue("12:00"): greeting = "السـلام عليكم  صبــاح الخير"

	    Case Is >= TimeValue("12:00"): greeting = "السـلام عليكم  مســاء الخير"

	    Case Else: greeting = "تصبح على خير"

	    End Select

	    fullname = Application.UserName

	    spaceinname = InStr(1, fullname, "", 1)

	    If spaceinname = 0 Then spaceinname = Len(fullname)

	    firstname = Left(fullname, spaceinname)

	    greeting = greeting

	    MsgBox abood & thedate & vbNewLine & "=====================" _

	    & vbNewLine & vbCrLf & ali & thedat & vbNewLine & _

	    "=====================" & vbNewLine & vbCrLf & alidroos & thetime _

	    & vbNewLine & "=====================" & vbNewLine & vbCrLf & thkr _

	    & vbNewLine & "=====================" & vbNewLine & vbCrLf & MY _

	    & vbNewLine & "====================================" & vbNewLine, vbInformation, greeting

End Sub

وعند الأخ عبدالقادر لايعمل

بهذا الشكل ولا عند استخدام متغير Variant

رابط هذا التعليق
شارك

زائر
هذا الموضوع مغلق.
×
×
  • اضف...

Important Information