همانطور که میدانید آدرس و مسیرِ دسکتاپ در رایانههای مختلف با هم متفاوت است و منحصر به فرد میباشد. برای مثال نمونه های زیر میتوانند آدرسِ مسیرِ دسکتاپ در رایانههای مختلفی باشند:
C:\Users\Mohammad\Desktop
C:\Users\Lenovo\Desktop
C:\Users\RayanSystem\Desktop
و...
باید متوجه منظورمان از “منحصر به فرد بودنِ مسیر دسکتاپ در هر کامپیوتر” شده باشید.
گاهی اوقات در ماکرونویسیِ VBA اکسل نیاز داریم که فرآیندی روی یک فایل که در دسکتاپ است انجام دهیم. در این صورت وارد کردنِ مسیرِ دسکتاپ به صورتِ دستی باعث میشود کدی که مینویسیم فقط روی کامپیوتر خودمان کار کند و در کامپیوترهای دیگر خطا دهد (چون مسیر دسکتاپ در رایانههای مختلف با هم متفاوت است). در نتیجه به یک کدِ VBA نیاز داریم که بتواند آدرسِ مسیرِ دسکتاپِ ویندوز را به صورت اتوماتیک به دست آورد تا فایلِ xlsmمان روی سایر کامپیوترها نیز به درستی کار کند.
در ادامه یک کد VBA معرفی میکنیم که میتواند آدرسِ مسیرِ دسکتاپِ هر رایانهای را به دست آورد.
کد مسیر دسکتاپ در VBA
کدِ زیر یک تابع به نامِ DesktopPath میسازد که خروجیِ آن مسیر و آدرس دسکتاپِ کامپیوتر است:
Function DesktopPath() As String
Dim exceller As Object
Set exceller = CreateObject("WScript.Shell")
DesktopPath = exceller.SpecialFolders("Desktop")
Set exceller = Nothing
End Function
ناگفته پیداست برای فراخوانی این تابع باید از کلمهی DesktopPath استفاده کرد: بدین صورت که هنگامی که به مسیرِ دسکتاپ کامپیوتر نیازمندیم، کلمهی مذکور را تایپ کنیم.
در تصویر زیر با ذکر یک مثال این مهم را توضیح دادهایم:
در تصویر بالا تابعِ DesktopPath با همان کدی که قبلاً ذکر شد ساخته شده است، حال اگر سابروتینِ TEST را اجرا کنیم نتیجه به صورتِ زیر خواهد بود:
در این مثال تابعی که ساختیم (یعنی DesktopPath) را درون یک دستور msgBox وارد کردیم و خروجی به صورت تصویر بالا در آمد. حال اگر فایلی که حاوی کدهای VBA بالاست را در کامپیوتری دیگر باز کنیم و ماکرو TEST را اجرا کنیم آدرسِ منحصر به فردِ دسکتاپِ آن رایانه به عنوان خروجی در msgBox نمایش داده خواهد شد.
این تابع میتواند در فرمولهای مهمتری نظیر فرمولهای FSO و… به کار رفته و باعث شود فایل اکسلِ برنامهنویسی شدهی شما به صورتِ پویا در تمامِ کامپیوترها به درستی عمل کند.
در صورتی که سوال بیشتری در این مورد دارید از قسمت کامنتها با ما مطرح کنید 🙂