بطور مختصر:
- برد متغیرها در همون محدوده ای هست که تعریف میشن.
- عبارت DIM فقط برای تعریف متغیر هست (نه مقادیر ثابت یا روتین)
- عبارت های PUBLIC و PRIVATE برای تعریف هر چیزی (متغیر، ثابت، روتین، ...)
- عبارت GLOBAL فقط و فقط در سطح ماجول VBA (نه ماجول فرم یا گزارش) - در واقع نیازی به استفاده ازش ندارید! همون PUBLIC کافی هست
- هر چیزی که در سطح ماجول VBA تعریف بشه بصورت خودکار در سطح تمام برنامه PUBLIC هست مگر اینکه با PRIVATE تعریف بشه که در اینصورت بردش در محدوده همون ماجول خواهد بود.
متغیرهای local داخل یک روتین تعریف میشن و فقط همونجا معنی دارن. فقط میشه با DIM اونها رو تعریف کرد.
پس متغیر A در دو روتین زیر از هم مستقلن:
SUB SUB1(....)
DIM A AS LONG ' PRIVATE A AS LONG (INVALID) / PUBLIC A AS LONG (INVALID)
....
END SUB
FUNCTION F2(...) AS ...
DIM A AS STRING
....
END FUNCTION
متغیرهایی که داخل ماجول فرم یا ماجول گزارش تعریف میشن بردشون در محدوده همون فرم یا گزارش هست و بصورت خودکار در همون محدوده PUBLIC رفتار میکنن و مهم نیست که با DIM یا PRIVATE یا PUBLIC تغریف بشن.
البته بعضی چیزها رو نمیشه با PUBLIC تعریف کرد.
OPTION COMPARE DATABASE
OPTION EXPLICIT
DIM A AS LONG ' = PUBLIC A AS LONG = PRIVATE A AS LONG
DIM B AS STRING
CONST G AS STRING ="AAA" ' = PRIVATE CONST G AS STRING="AAA" / PUBLIC CONST G AS STRING="AAA" (INVALID)
PRIVATE K(3) AS DOUBLE ' = DIM K(3) AS DOUBLE / PUBLIC K(3) AS DOUBLE (INVALID)
SUB FORM_OPEN(...)
A=5
B="XXX"
K(1)=3.14
....
END SUB
SUB BTN_CLICK(...)
MSGBOX(A)
MSGBOX(B)
END SUB