如何检查MultiSelect的GetOpenFilename是否被取消?

时间:2016-02-09 22:04:39

标签: excel vba excel-vba

如果对话框被取消,带有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

3 个答案:

答案 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是否应该有帮助......