GetOpenFilename
的 MultiSelect := True
将返回Variant或Boolean False
数组。我怎样才能做出体面的检查?
如果我针对False
检查返回值,则在选择文件时会出现类型不匹配错误(即对话框未取消),因为显然我无法检查Variant()
是否为False
。
我现在检查“布尔”类型,它有效。但是编写这段代码我觉得很脏。有不错的方式吗?
Dim files As Variant
files = Application.GetOpenFilename("Alle-Dateien (*.*),*.*,", , "please choose files", "open", MultiSelect:=True)
If TypeName(files) = "Boolean" Then
MsgBox "Nothing selected"
Exit Sub
End If
答案 0 :(得分:1)
正如评论中所提到的,我喜欢使用FileDialog(msoFileDialogOpen)
(及其文件夹对应物,msoFileDialogFolderPicker)。它的行为比您使用GetOpenFileName时所表现的更干净。我有时想知道为什么两个对话都存在:
Private Sub PickSomeFiles()
Dim fdFileDialog As FileDialog
Dim SelectedItemsCount As Long
Dim i As Long
Set fdFileDialog = Application.FileDialog(msoFileDialogOpen)
With fdFileDialog
.Filters.Clear
.Filters.Add "Alle-Dateien (*.*),*.*", "*.*"
.FilterIndex = 1
.InitialView = msoFileDialogViewDetails
.Title = "please choose files"
.ButtonName = "open"
.AllowMultiSelect = True
.Show
If .SelectedItems.Count = 0 Then
MsgBox "No files selected"
Exit Sub
End If
SelectedItemsCount = .SelectedItems.Count
For i = 1 To SelectedItemsCount
MsgBox "You selected: " & .SelectedItems(i)
Next i
End With
End Sub
答案 1 :(得分:0)
由于低代表无法发表评论但是想补充说我在我编写的程序中遇到了相同的情况,并且经过大量的研究后我得到的结果基本上与你在至少在你的情况下看起来你没事。
答案 2 :(得分:0)
False = 0.检查files = 0是否应该有帮助......