Технически это не совсем то, о чем вы просили, но гораздо лучше программировать, чтобы пользователи могли выбирать файлы внутри
интерфейс ОС, вместо того, чтобы позволить им печатать в именах файлов,
которая в конечном итоге достигает той же цели.
Я создал пользовательскую функцию для выбора файлов через объект FileDialog
. В качестве необязательного аргумента вы можете указать определенный тип файла в аргументе format
.
get_file([format], [fullpath])
' Returns a file name of a selected file via the .FileDialog object
' Arguments:
' [format] : Optional argument, if left empty any file format can be selected, _
otherwise enforce what [format] was put in to be selected
' [fullpath] : Optional argument, if left empty will only return FileName.xxx, _
otherwise will return full path (eg. D:\MyDir\Book.xlsx")
' Returns: A <String> with the selected filename.
Вот так выглядит функция:
Private Function get_file(Optional ByVal format As String = "nomatch", _
Optional ByVal fullpath As Boolean = False) As String
Dim fs As FileDialog: Set fs = Application.FileDialog(msoFileDialogFilePicker)
Dim goodmatch As Boolean: goodmatch = False
Do Until goodmatch = True
With fs
If .Show <> -1 Then
.Title = "Choose a Workbook to work with"
.AllowMultiSelect = False
.InitialFileName = Application.DefaultFilePath
End If
If format = "nomatch" Then
goodmatch = True
Else
format = Replace(format, ".", "")
If Mid(.SelectedItems(1), InStrRev(.SelectedItems(1), ".") + 1) <> format Then
MsgBox "Please select a " & format & " file format", vbCritical
Else
goodmatch = True
End If
End If
End With
Loop
If fullpath = True Then
get_file = fs.SelectedItems(1)
Else
get_file = Mid(fs.SelectedItems(1), InStrRev(fs.SelectedItems(1), "\") + 1)
End If
End Function
Пример пользователя функции:
Private Sub test()
Dim wb As Workbook: Set wb = Workbooks.Open(get_file(".xlsx", fullpath:= True))
' saves a workbook of only .xlsx type from what user selected into wb variable
Debug.Print wb.Name
End Sub
Открыл рабочую книгу с [fullpath]
для правильной ссылки (True
) с принудительным .xlsx
[format]
и напечатал Name
свойство Workbook
объекта, сохраненного в переменной wb
![enter image description here](https://i.stack.imgur.com/ye2ks.png)