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

带有MultiSelect := True GetOpenFilename MultiSelect := True如果对话被取消,则返回一个Variant或Boolean False的数组。 我怎样才能做一个体面的检查? 如果我检查返回值与False ,我得到一个types不匹配的错误,当文件被选中(即对话框没有取消),因为显然我不能检查一个Variant()是否为False

我现在检查“布尔”types,它的工作。 但是我写这个代码让我觉得很肮脏。 有一个体面的方式吗?

 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 

正如在评论中提到的,我喜欢使用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 

由于低代表无法评论,但想补充说,我在我写的程序中有相同的情况,并经过大量的研究后,我最终得到了与您至less为您的代码基本相同的确切代码情况看起来你是对的。

假= 0.检查文件= 0应该帮助…