اگر تا به حال ماکروهایی را برنامه ریزی کرده اید، احتمالاً با نحوه تعریف متغیرها با استفاده از کلمه کلیدی Dim آشنا هستید. به عنوان مثال، می توانید یک متغیر عدد صحیح را با نام MyVar به صورت زیر تعریف کنید:
Dim MyVar As Integer
این بسیار ساده است و در کد شما به خوبی کار خواهد کرد. ممکن است وسوسه شوید که در هر خط چندین متغیر تعریف کنید، با این حال:
Dim x, y, z As Integer
در برخی از نسخه های زبان بیسیک، این سه متغیر را تعریف و مقداردهی اولیه می کند، هر کدام به عنوان یک عدد صحیح. در VBA نیز به نظر می رسد که به درستی اجرا می شود و هیچ خطایی ایجاد نمی شود. با این حال، یک مشکل کوچک وجود دارد - فقط آخرین متغیر (z) در واقع به عنوان یک عدد صحیح تعریف می شود. با استفاده از کد زیر می توانید ببینید که چگونه این کار می کند:
Sub DimTest()
Dim x, y, z As Integer
MsgBox "x is type " & VarType(x)
MsgBox "y is type " & VarType(y)
MsgBox "z is type " & VarType(z)
End Sub
هنگامی که ماکرو را اجرا می کنید، دو جعبه پیام اول که ظاهر می شوند نشان می دهد که نوع متغیر x و y 0 است، که به معنای مقداردهی اولیه نیست. فقط آخرین جعبه پیام (برای z) یک متغیر از نوع 2 را نشان می دهد که به معنای یک عدد صحیح است.
راه حل این است که اطمینان حاصل کنید که متغیرهای خود را یک عدد در هر خط اعلام می کنید، یا از دستور کامل برای هر متغیر استفاده می کنید، مانند شکل زیر:
Dim x As Integer, y As Integer, z As Integer