问题
I have the following question: when I use the GetFileOpenFileName
option with
Multiselect = True
it returns the results as a Array if I selected one file or more, but if I click "Cancel" it returns as a boolean vartype. What should I do to avoid the
error 13 "Incompatible Type
when someone clicks it.
Besides, I already tried to test if(vartype(filename) = vbBoolean) then
or if(filename = False) then
to exit sub, but the first one I took the same error and the second one it said that I'm not allowed to assign values to filename
if I select some file.
Here is the code.
public sub open_file()
dim i as integer
Dim filename() As Variant
filename = Application.GetOpenFilename(Title:="Arquivos em Excel", MultiSelect:=True, FileFilter:="Arquivos em Excel,*.xls*")
For i = 1 To UBound(filename)
msgbox filename(i)
next i
end sub
回答1:
As per comments from both @Brian M Stafford and @braX, your code should be amended as follows...
Public Sub open_file()
Dim i As Integer
Dim filename As Variant
filename = Application.GetOpenFilename(Title:="Arquivos em Excel", MultiSelect:=True, FileFilter:="Arquivos em Excel,*.xls*")
If Not IsArray(filename) Then
MsgBox "User cancelled!", vbExclamation 'optional
Exit Sub
End If
For i = 1 To UBound(filename)
MsgBox filename(i)
Next i
End Sub
To clarify, notice that filename
is declared as Variant
, not as an array whose elements are a Variant
data type.
As such, filename
can be assigned either an array containing the filenames when one or more files are selected, or a boolean value when the user cancels.
Also notice that we test whether filename
is an array to determine whether the user has selected one or more files. If not, it exits the sub. Otherwise, it continues.
来源:https://stackoverflow.com/questions/61448379/cancel-option-getopenfilenamemultiselect-true