PDA

View Full Version : تفاوت استفاده از Global و Dim و Public در ابتدای تعریف متغیر



jmfnima
یک شنبه 05 آذر 1396, 22:01 عصر
با سلام به همه دوستان
تفاوت استفاده از Global و Dim و Public در ابتدای تعریف متغیر چیه و چه فرقی این سه مورد با همدیگه داره ؟؟؟

mazoolagh
پنج شنبه 09 آذر 1396, 12:04 عصر
بطور مختصر:

برد متغیرها در همون محدوده ای هست که تعریف میشن.
عبارت 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