Cancel Option GetOpenFilename(Multiselect:= True)

為{幸葍}努か 提交于 2021-02-11 17:21:59

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!