Идентифицировать кнопку «Отмена» и «Красный крест» в FileDialog (подборщик папок) VBA [дубликат]

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

0
задан user2075017 22 November 2014 в 13:54
поделиться

2 ответа

Имейте в виду, что vbFalse = 0 и vbTrue = -1. Другими словами, нажатие «OK» вернет -1 и нажатие «Отмена» вернет 0.

Попробуйте использовать следующий код:

Sub abc()
    With Application.FileDialog(msoFileDialogFolderPicker)
        .AllowMultiSelect = False
        .Title = "Select a folder then hit OK"
        If .Show = -1 Then
            MsgBox ("Folder selected is :" & .SelectedItems(1))
        Else
            Exit Sub
        End If
    End With
End Sub
5
ответ дан Dustin 19 August 2018 в 06:33
поделиться

Если элементов не выбрано, * SelectedItems (1) * не существует, и Excel вернет ошибку. Это то, что происходит, когда пользователь нажимает кнопку Cancel .

Решение для этого - проверить, сколько элементов выбрано с использованием структуры ниже:

With Application.FileDialog(msoFileDialogFilePicker)
    .AllowMultiSelect = False
    'Optional: limits the user to choosing a single option. Necessary if you want to avoid an error because the user selected multiple files.
    .Title = "Dialog Title" 'Changing the title is also Optional
    .Show
    If .SelectedItems.Count = 0 Then
        MsgBox "Canceled by user" 'or just do nothing!
    Else
        MyVar = .SelectedItems(1)
    End If
    'Alternatively, "if .selecteditems.count = 1 then myvar = .selecteditems(1)" can be used
End With
0
ответ дан FCastro 19 August 2018 в 06:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: