【发布时间】:2018-06-26 09:41:01
【问题描述】:
我正在尝试构建一个实用函数,以通过标准 Windows 文件对话框提示用户输入任意文件。
我想将文件类型过滤器列表作为二维字符串数组传递,其中每个子数组的第一个元素是文件类型描述,第二个元素是文件类型过滤器。
下面是我的功能:
'' GetFile - Lee Mac
''
'' Prompts the user to select a file using a standard Windows file dialog
''
'' msg - [str] Dialog title
'' ini - [str] Initial filename/filepath
'' flt - [arr] Array of filetype filters
''
Function GetFile(Optional strMsg As String = "Select File", Optional strIni As String = vbNullString, Optional arrFlt) As String
Dim dia As FileDialog
Set dia = Application.FileDialog(msoFileDialogFilePicker)
With dia
.InitialFileName = strIni
.AllowMultiSelect = False
.Title = strMsg
.Filters.Clear
If IsMissing(arrFlt) Then
.Filters.Add "All Files", "*.*"
Else
Dim i As Integer
For i = 0 To UBound(arrFlt, 1)
.Filters.Add arrFlt(i, 0), arrFlt(i, 1)
Next i
End If
If .show Then
GetFile = .selecteditems.Item(1)
End If
End With
End Function
这可行,但是,当向函数提供文件类型过滤器参数时,我发现自己必须做这样的事情:
Function test()
Dim arr(1, 1) As String
arr(0, 0) = "Excel Files"
arr(0, 1) = "*.xls;*.xlsx"
arr(1, 0) = "Text Files"
arr(1, 1) = "*.txt"
GetFile , , arr
End Function
我也尝试了以下方法,但收到“下标超出范围”:
Dim arr() As Variant
arr = Array(Array("Excel Files", "*.xls;*.xlsx"), Array("Text Files", "*.txt"))
有没有更好的方法来定义我缺少的文字二维字符串数组?
非常感谢您的建议和反馈。
【问题讨论】:
-
已删除我仅适用于 Excel 的答案。道歉。
-
@SMeaden 没问题 - 感谢您的时间和贡献!