我有以下问题:当我在GetFileOpenFileName选项中使用Multiselect = True时,如果我选择了一个或多个文件,它会将结果作为一个数组返回,但是如果我单击"Cancel“,它返回为一个布尔变量类型。我该怎么做才能避免
错误13“不兼容类型
当有人点击的时候。
此外,我已经尝试过测试if(vartype(filename) = vbBoolean) then或if(filename = False) then来退出sub,但是第一个错误和第二个错误一样,它说如果我选择某个文件,就不允许给filename赋值。
这是密码。
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发布于 2020-04-27 00:17:57
根据来自@Brian斯塔福德和@braX的评论,您的代码应该修改如下.
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为了澄清,请注意,filename被声明为Variant,而不是作为一个数组,其元素是Variant数据类型。
因此,当选择一个或多个文件时,可以为filename分配一个包含文件名的数组,或者在用户取消时分配一个布尔值。
还要注意,我们测试filename是否是一个数组,以确定用户是否选择了一个或多个文件。如果没有,它就离开潜艇。否则,它将继续下去。
https://stackoverflow.com/questions/61448379
复制相似问题