【发布时间】:2020-07-06 01:11:18
【问题描述】:
我想选择多个文件(如图);例如。 “数据源质量”、“数据源安全”、“数据源运输”、“数据源仓库”。
补充一点,如果选择的文件名是“DataSource Quality 2020”等,它应该仍然是一个有效的选择。意思是说,只要文件名包含上面截图中显示的名称,它仍然应该被认为是正确的。
但是,如果选择的任何文件有误(部分文件名错误),则应该有一个消息框显示“No/Wrong file selected”。
Dim hasRun As Boolean
Sub RunOnlyOnce()
Application.DisplayAlerts = True
If hasRun = False Then
Dim fNameAndPath As Variant
fNameAndPath = Application.GetOpenFilename(FileFilter:="All Files (*.*), *.*", Title:="Select Files To Be Opened", MultiSelect:=True)
Debug.Print fNameAndPath
Debug.Print Dir(fNameAndPath)
If Dir(fNameAndPath) = "DataSource.xlsx" Then
Workbooks.Open Filename:=fNameAndPath
hasRun = True
Exit Sub
Else
MsgBox "No/Wrong file selected. ", vbExclamation, "Oops!"
ThisWorkbook.Saved = False
Application.Quit
End If
End If
End Sub
【问题讨论】:
-
试试
If Dir(fNameAndPath) Like "DataSource*" Then -
嗨彼得,我在这行代码中遇到了一些问题:
Debug.Print fNameAndPath。这行代码过去只适用于单个文件,我认为它不再适用于单个文件;有没有办法解决这个问题? -
查看this answer 了解如何循环浏览目录中的文件。
-
您好彼得,感谢您的链接!从线程来看,文件似乎存储在某个文件夹中......在我的情况下,我希望代码仅根据所选文件验证文件名;不依赖于文件夹路径。希望这有助于澄清我之前是否不清楚。再次感谢您! (ps,这里还是VBA新手,如果我听起来很愚蠢,请原谅我)
-
嗨@JoshNg,我认为你的问题是由于
MultiSelect:=True参数。根据 GetOpenFilename 方法上的MS documentation,如果多选参数设置为 true,则结果将是“所选文件名的数组”。所以你需要循环进入你的文件名数组来显示所有文件名(即使你只选择了一个)。