برای برخی از ماکروها ممکن است لازم باشد تعیین کنید آیا راهی برای تعیین ماشین خاصی که ماکرو روی آن کار می کند وجود دارد یا خیر. به عنوان مثال، ممکن است یک رایانه رومیزی داشته باشید که یک فهرست خاص در D:OraNTPlus33 دارد، در حالی که رایانه نوت بوک شما دایرکتوری در C:OraNTPlus33 دارد. البته ماکرو باید تشخیص دهد که کدام ماشین در حال استفاده است تا بداند از کدام دایرکتوری برای پردازش خود استفاده کند.
راه های مختلفی وجود دارد که می توان به این کار نزدیک شد. امکان ایجاد یک ماکرو اکسل وجود دارد که در واقع به API ویندوز دسترسی داشته باشد و نام رایانه ای را که در آن اجرا می شود تعیین کند. با این حال، چنین رویکردی می تواند کاملاً درگیر شود.
یک راه ساده تر این است که فقط از دستور VBAs DIR برای تعیین محل وجود دایرکتوری مورد نظر استفاده کنید. موارد زیر این کار را انجام خواهند داد:
Sub OracleQueries()
Dim sTemp As String
Dim sGoodPath As String
sGoodPath = "D:OraNTPlus33"
sTemp = Dir("D:OraNTPlus33
ul")
If sTemp = "" Then
sGoodPath = "C:OraNTPlus33"
sTemp = Dir("C:OraNTPlus33
ul")
End If
Now have directory information
If sTemp <> "" Then
Process queries using sGoodPath
Else
MsgBox "Directories not found!"
End If
End Sub
به نحوه استفاده از تابع DIR در این مثال توجه کنید. به طور معمول DIR نام اولین فایلی را که در دایرکتوری درخواستی پیدا می کند برمی گرداند. با این حال، اگر دایرکتوری خالی باشد، DIR یک رشته خالی را برمی گرداند - حتی اگر دایرکتوری واقعاً وجود داشته باشد. از آنجایی که تنها کاری که می خواهیم انجام دهیم این است که بفهمیم دایرکتوری وجود دارد یا نه (نه اینکه فایل هایی در آن وجود دارد)، لازم است که حروف "nul" را در انتهای مسیر دایرکتوری مورد استفاده توسط DIR اضافه کنیم. این باعث می شود که DIR یک رشته خالی را در صورتی که دایرکتوری قرار ندارد، برگرداند، یا اگر دایرکتوری وجود نداشته باشد، کاراکترهای "nul" را برمی گرداند (حتی اگر دایرکتوری خالی باشد).
در انتهای ماکرو، sTemp خالی خواهد بود اگر هیچ یک از دایرکتوری ها قرار نگیرد. اگر یکی از آنها قرار داشت، sTemp خالی نخواهد بود و sGoodPath روی نام دایرکتوری تنظیم می شود که می تواند در پردازش بیشتر استفاده شود.