همه چیز در مورد FileDialog در VBA
بسم الله الرحمن الرحیم
سلام
در تاریخ 1401/08/09 بازبینی شد
احتمال میدهم این آموزش یکی از آموزشهای کامل و مفصل در مورد تابع FileDialog باشد. چون خودم به نوعی نیاز به این تابع داشتم و در منابع فارسی چیز زیادی در موردش پیدا نکردم، این آموزش را منتشر میکنم تا نیاز دوستان را مرتفع کند.
VBA FileDialog - باز کردن، انتخاب و ذخیره فایلها و پوشهها
#1 تابع Application.FileDialog
قبل از هر چیزی بیایید در مورد Application.FileDialog بیشتر بدانیم!
#1.1 Syntax یا نحوه نگارش
نحوه نگارش و قرارگیری کلمات و عبارات به صورت درست در تابع Application.FileDialog به صورت زیر است:
Application.FileDialog( fileDialogType as MsoFileDialogType )
#1.2 Parameter یا پارامتر
MsoFileDialogType
شما در این بخش مشخص میکنید که دیالوگ باکس یا کادر محاورهای به چه منظور باز شود:
مقدار | توضیحات |
---|---|
msoFileDialogOpen | کادر محاورهای برای باز کردن |
msoFileDialogSaveAs | کادر محاورهای برای ذخیره با عنوان |
msoFileDialogFilePicker | کادر محاورهای انتخاب پرونده |
msoFileDialogFolderPicker | کادر محاورهای انتخاب پوشه |
#2 خواص و توابع موجود در Application.FileDialog
#2.1 خصوصیتهای موجود در FileDialog
در جدول زیر خصوصیتهای موجود در تابع FileDialog به صورت کامل موجود است که میتوانید علاوه بر آشنایی با آنها، در موارد مناسب نیز به کارگیری شود.
خصوصیت | توضیحات | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
AllowMultiSelect | اجازه دهید بیش از یک فایل یا پوشه را انتخاب کنید. |
||||||||||||||||||
ButtonName | متن دکمه انتخاب یا دکمه عمل کننده در کادر محاورهای را مشخص میکند. |
||||||||||||||||||
DialogType | تغییر عملکرد MsoFileDialogType (جدول شماره یک) |
||||||||||||||||||
Filter |
یک فیلتر خاص برای نمایش و نوع فایلهای مورد نظر ایجاد میکند. مثلا زمانی که نیاز است در کادر محاورهای فقط تصاویر با فرمتهای PNG، JPG و یا JPEG نمایش داده شود. |
||||||||||||||||||
InitialFileName | مسیر اولیهای که کادر محاورهای به صورت پیشفرض آدرس آن مسیر را نمایش میدهد. مثلا درایور C |
||||||||||||||||||
InitialView |
نمایش پرونده اولیه میتواند بصورت یکی از حالات زیر باشد:
|
||||||||||||||||||
SelectedItems | مجموعهای از نوع FileDialogSelectedItems و با تمامی موارد انتخاب شده. | ||||||||||||||||||
Title | عنوان پنجره کادر محاورهای باز شده. |
#2.2 FileDialog Show
Application.FileDialog دارای دو functions عملکرد Show و Execute است. در عمل شما فقط به تابع Show نیاز دارید. اما عملکرد تابع Show چیست؟
تابع Show در واقع مشخص میکند که در کادر محاورهای پرونده یا پوشهای انتخاب شده است یا خیر.
در واقع تابع Show در صورت تایید یا انصراف دو مقدار زیر را بر میگرداند:
- (-1) کاربر دکمه انتخاب یا OK را فشار داده
- (0) کاربر دکمه انصراف، Cancel و یا هر چیز دیگری را فشرده است.
#3 انتخاب فایل در msoFileDialogFilePicker
نوع کادر محاورهای msoFileDialogFilePicker اجازه میدهد تا یک یا چند پرونده را انتخاب کنید.
#3.1 انتخاب یک پرونده در VBA
رایجترین روند انتخاب یک پرونده که از کاربر میخواهد فقط یک پرونده را انتخاب کند، در قطعه کد زیر موجود است:
Dim fDialog As FileDialog, result As Integer Set fDialog = Application.FileDialog(msoFileDialogFilePicker) 'اختیاری: ویژگیهای کادر محاورهای fDialog.AllowMultiSelect = False fDialog.title = "Select a file" fDialog.InitialFileName = "C:\" 'اختیاری: افزودن فیلترهای مختلف 'خط زیر تمامی فیلترهای احتمالی را حذف میکند و دو خط بعد آن فیلتر مورد نظر را اعمال میکند fDialog.Filters.Clear fDialog.Filters.Add "Excel files", "*.xlsx" fDialog.Filters.Add "All files", "*.*" 'وضعیت انتخاب پرونده را مشخص میکند که -1 به معنای موفقیت آمیز بودن است If fDialog.Show = -1 Then Debug.Print fDialog.SelectedItems(1) End If
که نتیجه کد بالا میتواند چیزی شبیه زیر باشد:
C:\New Folder\Stu List.xlsx
#3.2 انتخاب چند فایل در VBA
روند انتخاب یک پرونده که از کاربر میخواهد یک یا چند پرونده را انتخاب کند، در قطعه کد زیر موجود است. فقط در نظر داشته باشید خصوصیت AllowMultiSelect برابر با True باشد.
Dim fDialog As FileDialog, result As Integer Set fDialog = Application.FileDialog(msoFileDialogFilePicker) 'دقت کنید! fDialog.AllowMultiSelect = True 'اختیاری: ویژگیهای کادر محاورهای fDialog.title = "Select a file" fDialog.InitialFileName = "C:\" 'اختیاری: افزودن فیلترهای مختلف 'خط زیر تمامی فیلترهای احتمالی را حذف میکند و دو خط بعد آن فیلتر مورد نظر را اعمال میکند fDialog.Filters.Clear fDialog.Filters.Add "Excel files", "*.xlsx" fDialog.Filters.Add "All files", "*.*" 'وضعیت انتخاب پرونده را مشخص میکند که -1 به معنای موفقیت آمیز بودن است If fDialog.Show = -1 Then For Each it In fDialog.SelectedItems Debug.Print it Next it End If
که نتیجه کد بالا میتواند چیزی شبیه زیر باشد:
C:\New Folder\Stu List Class1.xlsx C:\New Folder\Stu List Class2.xlsx C:\New Folder\Stu List Class3.xlsx
#4 انتخاب پوشه در msoFileDialogFilePicker
انتخاب پوشه از انتخاب پرونده راحتتر است. لذا شما فقط مجاز به انتخاب یک پوشه در کار محاورهای میباشید.
#4.1 انتخاب یک پوشه در VBA
کادر محاورهای زیر از کاربر درخواست انتخاب یک پوشه را میکند:
Set fDialog = Application.FileDialog (msoFileDialogFolderPicker) 'انتخابی: ویژگی کادر محاورهای fDialog.title = "Select a folder" fDialog.InitialFileName = "C:\" If fDialog.Show = -1 Then Debug.Print fDialog.SelectedItems(1) End If
#5 بازکردن پرونده در msoFileDialogOpen
بازکردن پرونده بسیار ساده است چراکه معمولا شامل یک پرونده میشود. تنها تفاوت آن، تعیین برچسب و متن دکمه است که در حالت انتخاب پرونده و بازکردن پرونده متفاوت است.
کادر محاورهای بازکردن پرونده در واقع هیچ پروندهای را باز نمیکند! بلکه فقط به کاربر اجازه میدهد تا پروندههایی را برای بازکردن انتخاب کند. در این صورت شما باید پروندههایی را برای خواندن یا نوشتن باز کنید.
نگاهی به دو مورد زیر بیاندازید:
#5.1 بازکردن پرونده در VBA
کادر محاورهای زیر از کاربر میخواهد تا یک فایل را برای بازکردن انتخاب کند:
Dim fDialog As FileDialog, result As Integer, it As Variant Set fDialog = Application.FileDialog (msoFileDialogOpen) 'انتخابی: ویژگی کادر محاورهای fDialog.title = "Select a file" fDialog.InitialFileName = "C:\" 'اختیاری: افزودن فیلترهای مختلف 'خط زیر تمامی فیلترهای احتمالی را حذف میکند و دو خط بعد آن فیلتر مورد نظر را اعمال میکند fDialog.Filters.Clear fDialog.Filters.Add "All files", "*.*" fDialog.Filters.Add "Excel files", "*.xlsx" If fDialog.Show = -1 Then Debug.Print fDialog.SelectedItems(1) End If
#6 ذخیره پرونده در msoFileDialogSaveAs
ذخیره سازی یک پرونده هم به همین سادگیست، و تنها همان برچسب و متن دکمهها هست که متفاوت میباشند.
کادر محاورهای با عنوان ذخیره پرونده، مانند مورد قبلی در واقع هیچ پروندهای را ذخیره نمیکند، بلکه به کاربر فقط اجازه میدهد تا یک نام را برای پرونده مشخص کند. لذا شما باید پروندهها را برای خواندن یا نوشتن باز کنید. (در مورد نوشتن پرونده در VBA بیشتر بدانید)
#6.1 ذخیره سازی پرونده در VBA
کادر محاورهای زیر از کاربر یک مسیر را برای ذخیره سازی پروندهها انتخاب کند:
Dim fDialog As FileDialog, result As Integer, it As Variant Set fDialog = Application.FileDialog(msoFileDialogSaveAs) 'انتخابی: ویژگی کادر محاورهای fDialog.title = "Save a file" fDialog.InitialFileName = "C:\" If fDialog.Show = -1 Then Debug.Print fDialog.SelectedItems(1) End If
#7 فیلترهای FileDialog
شاید یکی از مشکلات کار با Application.FileDialog، اعمال فیلترهای مختلف بر روی کادر محاورهای باشد. در زیر برخی از نمونههای معمول جهت فیلترهای چندگانه پرونده که به درستی اعمال شدهاند موجود است.
دقت کنید برای استفاده از چند فیلتر پرونده لازم است از Semicolor یا (;) استفاده کنید.
Dim fDialog As FileDialog Set fDialog = Application.FileDialog(msoFileDialogOpen) '... 'انتخابی: ویژگی کادر محاورهای fDialog.Filters.Clear fDialog.Filters.Add "All files", "*.*" fDialog.Filters.Add "Excel files", "*.xlsx;*.xls;*.xlsm" fDialog.Filters.Add "Text/CSV files", "*.txt;*.csv" '...
نکتهای که در مورد فیلترهای FileDialog باید مورد توجه قرار بگیرد این است که: همانطور که در توضیحات کدهای قبلی ذکر شد، حتما قبل از اعمال فیلتر در کادر محاورهای FileDialog از دستور Clear جهت حذف فیلترهای سابق استفاده کنید. FileDialog با تمام خصوصیتهایی که دارد، ممکن است تا در برخی از موارد فیلترهای سابق را همچنان بر روی کادر محاورهای خود اعمال کند، لذا استفاده از این دستور را فراموش نکنید!.
این مقاله با ویرایشهای بسیاری از سایت analystcave.com منتشر شده است.
لذا در صورت استفاده از متن این مقاله حتما آدرس این صفحه را به عنوان منبع ذکر کنید.
مشکل یکماهه منو حل کردی دمت گرم