Ако вашата VBA процедура трябва да поиска от потребителя име на файл, можете да използвате функцията InputBox и да оставите потребителя на Excel да напише малко. Поле за въвеждане обаче обикновено не е най-добрият инструмент за тази работа, тъй като повечето потребители намират за трудно да запомнят пътища, обратна наклонена черта, имена на файлове и разширения на файлове. С други думи, твърде лесно е да се прецака, когато пишете име на файл.
За по-добро решение на този проблем използвайте метода GetOpenFilename на обекта Application, който гарантира, че вашият код ще получи валидно име на файл, включително неговия пълен път. Методът GetOpenFilename показва познатия диалогов прозорец Отвори (заглушен сигнал за диалоговия прозорец Excel се показва, когато изберете Файл → Отвори → Преглед).
Методът GetOpenFilename всъщност не отваря посочения файл. Този метод просто връща избраното от потребителя име на файл като низ. След това можете да напишете код, за да правите каквото искате с името на файла.
Синтаксисът за метода GetOpenFilename
Официалният синтаксис на метода GetOpenFilename е както следва:
object.GetOpenFilename ([fileFilter], [filterIndex],
[заглавие],[buttonText], [multiSelect])
Методът GetOpenFilename приема незадължителните аргументи по-долу.
Аргумент |
Какво прави |
FileFilter |
Определя типовете файлове, които се появяват в диалоговия прозорец
(например *.TXT). Можете да посочите няколко филтъра, от които потребителят
да избира. |
FilterIndex |
Определя кой от файловите филтри се показва в диалоговия прозорец по
подразбиране. |
Заглавие |
Указва надписа за заглавната
лента на диалоговия прозорец . |
ButtonText |
Игнорирано (използва се само за Macintosh версията на Excel). |
MultiSelect |
Ако е вярно, потребителят може да избере няколко файла. |
Пример за GetOpenFilename
Аргументът fileFilter определя какво се появява в падащия списък Files of Type на диалоговия прозорец. Този аргумент се състои от двойки низове за филтриране на файлове, последвани от спецификацията на файловия филтър със заместващи символи, със запетаи, разделящи всяка част и двойка. Ако е пропуснат, този аргумент по подразбиране е следният:
Всички файлове (*.*), *.*
Обърнете внимание, че този низ се състои от две части, разделени със запетая:
Всички файлове (*.*)
и
*.*
Първата част от този низ е текстът, показан в падащия списък Files of Type. Втората част определя кои файлове се показват в диалоговия прозорец. Например *.* означава всички файлове.
Кодът в следващия пример отваря диалогов прозорец, който пита потребителя за име на файл. Процедурата дефинира пет файлови филтъра. Забележете, че VBA последователността за продължаване на реда се използва за настройка на променливата Filter; това помага да се опрости този доста сложен аргумент.
Под GetImportFileName ()
Dim Finfo като низ
Dim FilterIndex As Long
Затъмнено заглавие като низ
Dim FileName като вариант
' Настройте списък с филтри за файлове
FInfo = „Текстови файлове (*.txt),*.txt“ & _
„Lotus Files (*.prn),*.prn“, & _
„Файлове, разделени със запетая (*.csv),*.csv,“ & _
„ASCII файлове (*.asc),*.asc,“ & _
"Всички файлове (*.*),*.*"
' По подразбиране се показва *.*
Индекс на филтъра = 5
' Задайте надпис на диалоговия прозорец
Заглавие = „Изберете файл за импортиране“
' Вземете името на файла
FileName = Application.GetOpenFilename (FInfo, _
FilterIndex, Title)
' Обработвайте информация за връщане от диалогов прозорец
Ако FileName = False Тогава
MsgBox „Не е избран файл.“
иначе
MsgBox „Избрахте“ и име на файл
Край, ако
Край под
Ето диалоговия прозорец, който Excel показва, когато изпълните тази процедура. Външният вид може да варира в зависимост от версията на Windows, която използвате, и опциите на дисплея, които сте задали.
Методът GetOpen Filename показва диалогов прозорец с възможност за персонализиране и връща пътя и името на избрания файл. Не отваря файла.
В реално приложение бихте направили нещо по-смислено с името на файла. Например, може да искате да го отворите, като използвате изявление като това:
Работни книги. Отворете FileName
Забележете, че променливата FileName е декларирана като тип данни Variant. Ако потребителят щракне върху Отказ, тази променлива съдържа булева стойност (False). В противен случай FileName е низ. Следователно, използването на тип данни Variant обработва и двете възможности.