Согласно комментариям от @Brian M Stafford и @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
массивом, чтобы определить, выбрал ли пользователь один или несколько файлов. Если нет, то выходит из саба. В противном случае это продолжается.