Отменить параметр GetOpenFilename (Multiselect: = True) - PullRequest
0 голосов
/ 27 апреля 2020

У меня следующий вопрос: когда я использую параметр GetFileOpenFileName с Multiselect = True, он возвращает результаты в виде массива, если я выбрал один или несколько файлов, но если я нажимаю «Отмена», он возвращается как логический тип. Что нужно сделать, чтобы избежать ошибки

13 "Несовместимый тип

, когда кто-то щелкает по нему.

Кроме того, я уже пытался проверить if(vartype(filename) = vbBoolean) then или if(filename = False) then для выхода из подпрограммы, но первый я принял ту же ошибку, а второй сказал, что мне не разрешено присваивать значения 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

1 Ответ

0 голосов
/ 27 апреля 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...