من هنا (المتغيرات فى اكسيل VBA) سنبدأ التعمق شيئا فشيئا داخل هذا العالم الخاص ب vba excel ذلك العالم الجميل . وسنتعرف على ما يلى
ما هي المتغيرات
أنواع المتغيرات
الإعلان عن المتغيرات
أهمية المتغيرات
مدى الاتاحة للمتغيرات
أولا ما هي المتغيرات variables
المتغير هو موقع تخزين مسمى في برنامج حيث يمكن تخزين البيانات واستردادها. عند إنشاء متغير ، فإنك تعطيه اسما ، وتعين له قيمة. يمكن أن تتغير قيمة المتغير أثناء تنفيذ البرنامج ، ولهذا السبب يطلق عليه “متغير”.
فكر في المتغير على أنه حاوية او مكان يحتوي على معلومات. يمكن الوصول إلى المعلومات الموجودة في متغير واستخدامها بواسطة البرنامج عند الحاجة. على سبيل المثال ، إذا كنت تريد تخزين اسم شخص ما في برنامج ، فيمكنك إنشاء متغير يسمى “الاسم” ، وتعيين قيمة اسم الشخص له. فيما بعد اثناء عمل البرنامج ، يمكنك استرداد هذه المعلومات واستخدامها عند الحاجة إليها.
تعد المتغيرات جزءا أساسيا من معظم لغات البرمجة لأنها تسمح للبرامج بتخزين المعلومات ومعالجتها واستردادها حسب الحاجة. باستخدام المتغيرات ، يمكنك جعل برامجك أكثر مرونة وديناميكية ، مما يسمح لها بالعمل مع أنواع مختلفة من المعلومات بطرق مختلفة.
باختصار ، المتغيرات هي مفهوم أساسي في لغات البرمجة التي تسمح للبرامج بتخزين البيانات ومعالجتها ، مما يجعلها أكثر مرونة وديناميكية.
هي عباره عن أماكن في ذاكرة الحاسب يتم حجزها لحفظ قيم وهذة القيم ذات أنواع مختلفة واحجام مختلفة وعلية تختلف حجم الذاكرة التي سيتم حجزها من نوع لأخر و سنتعرف عليها فيما يلى .فائدة هذه الأماكن إما ان نحفظ بها قيمة او نستدعى منها قيمة وقت ما نشاء اثناء كتابة الكود البرمجي .
شروط تسمية المتغيرات
1 يجب الا يبدا اسم المتغير برقم
2 بعد الحرف الأول يمكن ان تكون حروف وأرقام
3 لا يحتوي على مسافات او رموز وعلامات مثل &*()
4 يجب الا يتكرر اسم المتغير أكثر من مره
هناك قائمة بكلمات محجوزة لاستخدامها من قبل تطبيق الاكسيل لا يمكن استخدامها كأسماء متغيرات
هذه هي الكلمات المحجوزة كما وردت في موقع دعم مايكروسوفت وهذا هو الرابط
Keywords – Visual Basic | Microsoft Docs
https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/keywords/
إليكم جدول موضح به أنواع البيانات
نوع البيانات هو طريقة لتصنيف أنواع مختلفة من المعلومات التي يعالجها البرنامج. هي الشكل الذي تُحفظ به البيانات وتنتقل بين أجزاء الكود يمكن أن تكون هذه المعلومات أرقاما أو نصا أو تواريخ أو أنواعا أخرى من البيانات. من خلال تحديد نوع بيانات لمتغير ، فإنك تخبر الكمبيوتر بنوع البيانات التي يجب توقعها ، وكيفية تخزين هذه البيانات ومعالجتها.
على سبيل المثال ، إذا كنت تريد تخزين عمر شخص في متغير ، فيمكنك إعلان هذا المتغير كنوع بيانات عدد صحيح (عدد صحيح) ، لأن الأعمار هي أعداد صحيحة. إذا كنت تريد تخزين اسم شخص ما ، فستعلن هذا المتغير كنوع بيانات (نص) ، لأن الأسماء تتكون من أحرف
يساعد تحديد نوع البيانات أيضا الكمبيوتر على اتخاذ قرارات حول كيفية إجراء العمليات على تلك البيانات. على سبيل المثال، إذا كان لديك متغير من نوع عدد صحيح وحاولت إضافته إلى متغير من نوع نص لن يعرف الكمبيوتر كيفية تنفيذ العملية وإرجاع خطأ.
باختصار ، تعد أنواع البيانات مفهوما مهما في لغات البرمجة لأنها تساعد على ضمان قدرة الكمبيوتر على معالجة البيانات بطريقة منضبطة ويمكن التنبؤ بها ، كما تساعد في منع الأخطاء التي يمكن أن تحدث عندما يطلب من الكمبيوتر إجراء عمليات على البيانات.
Data type | Storage size | Range |
Boolean | 2 bytes | True or False |
Byte | 1 byte | 0 to 255 |
Collection | Unknown | Unknown |
Currency (scaled integer) | 8 bytes | -922,337,203,685,477.5808 to 922,337,203,685,477.5807 |
Date | 8 bytes | January 1, 100, to December 31, 9999 |
Decimal | 14 bytes | +/-79,228,162,514,264,337,593,543,950,335 with no decimal point +/-7.9228162514264337593543950335 with 28 places to the right of the decimal Smallest non-zero number is+/-0.0000000000000000000000000001 |
Dictionary | Unknown | Unknown |
Double (double-precision floating-point) | 8 bytes | -1.79769313486231E308 to -4.94065645841247E-324 for negative values 4.94065645841247E-324 to 1.79769313486232E308 for positive values |
Integer | 2 bytes | -32,768 to 32,767 |
Long (Long integer) | 4 bytes | -2,147,483,648 to 2,147,483,647 |
LongLong (LongLong integer) | 8 bytes | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 Valid on 64-bit platforms only. |
LongPtr (Long integer on 32-bit systems, LongLong integer on 64-bit systems) | 4 bytes on 32-bit systems 8 bytes on 64-bit systems | -2,147,483,648 to 2,147,483,647 on 32-bit systems -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 on 64-bit systems |
Object | 4 bytes | Any Object reference |
Single (single-precision floating-point) | 4 bytes | -3.402823E38 to -1.401298E-45 for negative values 1.401298E-45 to 3.402823E38 for positive values |
String (variable-length) | 10 bytes + string length | 0 to approximately 2 billion |
String (fixed-length) | Length of string | 1 to approximately 65,400 |
Variant (with numbers) | 16 bytes | Any numeric value up to the range of a Double |
Variant (with characters) | 22 bytes + string length (24 bytes on 64-bit systems) | Same range as for variable-length String |
User-defined (using Type) | Number required by elements | The range of each element is the same as the range of its data type. |
هذه هي أنواع البيانات من موقع دعم مايكروسوفت وهذا هو الرابط
https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/data-type-summary
بإختصار
انواع البيانات فى vba اكسيل (البيانات الرقمية )
توضيح للارقام العائمة single / double
تمثل الأرقام العائمة الأرقام الحقيقية بدقة محدودة، ويمكنها تخزين الأرقام الكبيرة جدًا والصغيرة جدًا عن طريق استخدام التمثيل العلمي للأرقام . في التمثيل العلمي، الرقم يُعبَّر عنه كمضاعف للعدد 10 مرفوع لقوة بعض القيمة.
على سبيل المثال، العدد 3000 يمكن تمثيله على الشكل 3×10 ^ 3، والعدد 0.0004 يمكن تمثيله على الشكل 4× 10 ^ -4 هذا يمكنك من تخزين الأرقام الكبيرة والصغيرة جدًا بطريقة فعالة في مساحة صغيرة من الذاكرة، ولكن بدقة محدودة

في VBA ، لا يعد نوع البيانات Decimal نوع بيانات أصليا ، ولكن يمكن استخدامه كنوع فرعي لنوع بيانات Variant. هذا يعني أنه لا يمكنك إعلان متغير من النوع Decimal كما تفعل مع Integer, Long, Single, Double, ، إلخ. بدلا من ذلك، يمكنك تعريف متغير من النوع variant ثم قم باستخدام الدالة CDec لتحويله إلى Decimal
هنا مثال:
Dim myVar As Variant
myVar = CDec(123.456)
Debug.Print TypeName(myVar) ‘ Outputs “Decimal”
في هذا المثال ، يتم الإعلان عن myVar ك variant ، ولكن بعد ذلك يتم تحويله إلى Decimal باستخدام الدالة CDec. يخرج سطر Debug.Print TypeName (myVar) ” Decimal ” ، مما يؤكد أن myVar هو بالفعل رقم Decimal.
يرجى ملاحظة أن النوع الفرعي Decimal يمكنه التعامل مع 28 منزلة عشرية ويمكنه الحفاظ على دقة جميع العمليات الحسابية إلى 28 منزلة عشرية. ومع ذلك ، تجدر الإشارة أيضا إلى أن استخدام Decimal يمكن أن يكون أبطأ من استخدام Single أو Double ، لذلك يتم استخدامه عادة في الحسابات المالية حيث تكون الدقة أكثر أهمية من السرعة
الإعلان عن المتغيرات
لفهم المتغيرات اكثر تعالوا نتعرف عليها اكثر واكثر من قرب
المتغيرات إما ان نعلن عنها او لا نعلن عنها للإعلان عن متغير يتم ذلك بكتابة ثلاثة احرف قبل نوع المتغير وفى الجدول بالأعلى جميع أنواع المتغيرات الموجودة منها ما سوف تحتاج إليه ومنها ما لن تحتاج إلية
هذه الثلاثة احرف هي DIM وهي اختصار كلمة DIMENSION وهي تعنى بعد او حجم
وهي تستخدم لتعريف
- Basic variables
- Variant
- Object
- Array
- المتغيرات الأساسيه – يحمل هذا النوع المتغير قيمة واحدة. هذه هي الأنواع مثل Long, String, Date, Double, Currency.
date | string | long | integer | byte | double | single | boolean | currancy |
- Variant – يقرر VBA في وقت التشغيل النوع الذي سيتم استخدامه وهو يعمل مع أي نوع بيانات . يجب تجنب المتغيرات من هذا النوع حيثما أمكن ذلك بسبب حجمها الكبير وتبطيئها لعمل الأكواد ولكن في بعض الحالات يكون من الضروري استخدامها.
- Object – هذا المتغير يمكن أن يكون له طرق متعددة (أي subs / functions) وخصائص متعددة (أي قيم). هناك 3 أنواع:كائنات Excel مثل كائنات المصنف وورقة العمل والنطاق.كائنات المستخدم التي تم إنشاؤها باستخدام الاكواد بالوحدات النمطية للفئة.المكتبات الخارجية مثل كائن القاموس.
- Array – هذه مجموعة من المتغيرات أو الكائنات
- النوع object (كائن ) هذا المتغير يمثل نطاق في المثال التالي وعند الإعلان عن متغير من النوع كائن نستخدم بعدها set على سبيل المثال .
- Dim fruitname as range
- Set fruitname= range(“a3:a15”)
لماذا نستخدم Set with Dim عندما نضيف ورقة أو مصنف في Excel VBA
يتم استخدام الكلمة الأساسية Set هنا لأن ws ليس نوع بيانات بسيطا مثل عدد صحيح integer أ و سلسلة نصية string ، ولكنه كائن. الكائن هو نوع بيانات يمثل مثيلا لفئة، مثل ورقة عمل في هذه الحالة.يتيح لك استخدام Set بهذه الطريقة الوصول إلى خصائص وطرق الكائن المخزن في المتغير ws. على سبيل المثال، يمكنك استخدام التعليمة البرمجية التالية لتغيير اسم ورقة العمل:
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets.Add
. يتم استخدام الكلمة الأساسية Dim للتعريف عن متغير ، ويتم استخدام الكلمة الأساسية Set لتعيين مرجع كائن لهذا المتغير.على سبيل المثال، عند إضافة ورقة عمل جديدة إلى مصنف
هناك 3 أنواع من الكائنات:
Excel objects
Class Module objects
External library objects
ملاحظة: يتم استخدام كائن مجموعةcollection VBA بطريقة مشابهة لكيفية استخدامنا لكائن الوحدة النمطية للفئة Class Module . نستخدم new لإنشائه.لا تستخدم كائنات Excel مثل المصنف وورقة العمل والنطاق وما إلى ذلك new لأنه يتم إنشاؤها تلقائيا بواسطة Excel عند إنشاء مصنف أو فتحه ، يقوم Excel تلقائيا بإنشاء الكائن المقترن. عند فتح مصنف أو إنشائه، يقوم VBA تلقائيا بإنشاء كائن VBA له. كما يقوم بإنشاء كائن ورقة العمل لكل ورقة عمل في هذا المصنف.
على العكس من ذلك، عندما نغلق المصنف VBA سوف يحذف تلقائيا كائنات VBA المقترنة به.
على سبيل المثال ، في الكود أدناه نفتح مصنفا. سيقوم VBA بإنشاء الكائن وسترجع Open مصنفا يمكننا تخزينه في متغير
Sub OpenWorkbook()
Dim wk As Workbook
Set wk = Workbooks.Open(“C:\Docs\data.xlsx”)
End Sub
إذا أنشأنا ورقة عمل جديدة ، فسيحدث شيء مماثل. سيقوم VBA تلقائيا بإنشائه وتوفير الوصول إلى الكائن.
Sub AddSheet()
Dim sh As Worksheet
Set sh = ThisWorkbook.Worksheets.Add
End Sub
لا نحتاج إلى استخدام الكلمة الأساسية new لكائنات Excel هذه.
نقوم فقط بتعيين المتغير لل method التي إما تنشئ كائنا جديدا أو تتيح لنا الوصول إلى كائن موجود.
Using Dim with Class Module Objects
في VBA ، نستخدم وحدات Class لإنشاء كائنات مخصصة خاصة بنا
إذا كنا ننشئ كائنا ، فنحن بحاجة إلى استخدام الكلمة الأساسية New.
يمكننا فعل ذلك في العبارة Dim أو في العبارة المحددة.
تقوم التعليمة البرمجية التالية بإنشاء كائن باستخدام الكلمة الأساسية New في the Dim statement:
‘ Declare and create
Dim o As New class1
Dim coll As New Collection
بسبب طبيعة الموضوع ستم تقسية الي جزأين
يُتبع
Whats up very nice website!! Man .. Excellent
.. Superb .. I’ll bookmark your site and take the feeds also?
I’m satisfied to search out a lot of useful information here within the submit, we want
work out more strategies on this regard, thanks for sharing.
. . . . .
Hello everyone, it’s my first go to see at this web site, and article is genuinely fruitful in favor of me, keep up posting these types of content.
Wow that was odd. I just wrote an really long comment but after I clicked submit
my comment didn’t show up. Grrrr… well I’m not writing
all that over again. Regardless, just wanted to say fantastic blog!