TOP

VBA-Lesson 6.2.1 تحديث أنواع البيانات (Variables)

في الدرس السابق ، نظرنا إلى المتغيرات التي يمكن كتابة بيانات معينة فيها ، لكن لا يمكن أن تحتوي على أكثر من قيمة واحدة. للتغلب على هذا القيد ، توجد مصفوفات في VBA يمكنها تخزين قيم متعددة.


فيما يلي بعض الأمثلة على المصفوفات المختلفة:

Sub variables()
    'مثال على التصريح عن متغير
    Dim var1 As String
    
    'مثال على إعلان مصفوفة ذات بعد واحد
    Dim array1(4) As String
    
    'مثال على إعلان مصفوفة ثنائية الأبعاد
    Dim array2(4, 3) As String
    
    'مثال على إعلان مصفوفة ثلاثية الأبعاد
    Dim array3(4, 3, 2) As String
End Sub

صفيف أحادي البعد

Dim array1(4) As String

يمكن اعتبار المصفوفة أحادية البعد كجدول يتكون من عمود واحد. المصفوفة 1 (4) هي مصفوفة ذات بعد واحد يمكن أن تحتوي على 5 سجلات. لماذا 5؟ لأن أعداد السجلات في الصفيف تبدأ من صفر (0 ، 1 ، 2 ، 3 ، 4).

الآن دعنا نفكر في مصفوفة ثنائية الأبعاد:

Dim array2(4, 3) As String

سيبدو بالفعل كجدول مكون من 5 صفوف و 4 أعمدة:

"تعيين قيم للخلايا الملونة
array2(0, 0) = "القيمة في الخلية الحمراء"
array2(4, 1) = "القيمة في الخلية الخضراء"
array2(2, 3) = "القيمة في الخلية الزرقاء"

الثوابت

مثل المتغيرات ، يمكن استخدام الثوابت لتخزين القيم ، لكن الاختلاف هو أن القيم لا يمكن أن تتغير. يمكننا إضافة ثابت لتجنب تكرار القيمة ، على سبيل المثال 13.14:

Sub const_example()
    Cells(1, 1) = Cells(1, 2) * 13.14
    Cells(2, 1) = Cells(2, 2) * 13.14
    Cells(3, 1) = Cells(3, 2) * 13.14
    Cells(4, 1) = Cells(4, 2) * 13.14
    Cells(5, 1) = Cells(5, 2) * 13.14
End Sub

هذا يجعل الكود أسهل للفهم والتحرير. كما يسمح لك بتغيير قيمة الثابت بكل بساطة:

Sub const_example()
   'إعلان ثابت + إسناد قيمة
    Const ANNUAL_RATE As Double = 13.14
   
    Cells(1, 1) = Cells(1, 2) * ANNUAL_RATE
    Cells(2, 1) = Cells(2, 2) * ANNUAL_RATE
    Cells(3, 1) = Cells(3, 2) * ANNUAL_RATE
    Cells(4, 1) = Cells(4, 2) * ANNUAL_RATE
    Cells(5, 1) = Cells(5, 2) * ANNUAL_RATE
End Sub

نطاق المتغيرات

إذا تم الإعلان عن متغير في بداية الإجراء (Sub) ، فيمكن استخدامه فقط في هذا الإجراء. لن تكون قيمة المتغير متاحة بعد تنفيذ الإجراء.

Sub procedure1()
   Dim var1 As Integer
   '=> المتغير صالح فقط في هذا الإجراء
End Sub

Sub procedure2()
   '=> لا يمكن استخدام var1 هنا
End Sub

من أجل استخدام متغير في أي إجراء وحدة نمطية ، نحتاج فقط إلى الإعلان عنه في بداية الوحدة. وإذا قمت بتعريف متغير مثل هذا ، فسيكون متاحًا حتى يتم إغلاق المصنف.

Dim var1 As Integer

Sub procedure1()
   '=> يمكن استخدام var1 هنا
End Sub

Sub procedure2()
   '=> يمكن أيضًا استخدام var1 هنا
End Sub

إذا كنت تريد استخدام نفس المتغير في جميع وحدات الكتاب ، فعليك فقط استبدال Dim بـ Global في المثال السابق:

Global var1 As Integer

لاستخدام متغير بعد تنفيذ الإجراء الذي يظهر فيه ، استبدل Dim بـ Static:

Sub procedure1()
    Static var1 As Integer
End Sub

لاستخدام قيم جميع المتغيرات في الإجراء ، أضف Static قبل Sub:

Static Sub procedure1()
    Dim var1 As Integer
End Sub

إنشاء نوع المتغير الخاص بك

فيما يلي مثال سريع لكيفية إنشاء نوع خاص بك:

 'إنشاء نوع متغير
 Type customers
    last_name As String
    first_name As String
 End Type
   
 Sub variables()
    'إعلان متغير
    Dim cust1 As customers
   
    'تعيين قيمة إلى cust1
    cust1.last_name = "Smith"
    cust1.first_name = "John"
   
    'مثال على الاستخدام
    MsgBox cust1.last_name & " " & cust1.first_name
 End Sub