Przycisk z abolicji musi wyjść z podwodnych


Mam okno dialogowe umożliwiające wybranie nazwy folderu i wyświetlenie nazwy folderu wybranej przez użytkownika.
Jeśli użytkownik wybierze anuluj zamiast Ścieżka folderu i OK, zgłosi błąd.
Użyłem zmiennej stanu i zauważyłem, że po anulowaniu stan zmienia się na -1. Więc próbowałem zaimplementować kod, który jest w sekcji komentarzy, używając warunku if, aby wyjść z sub.
Nie działa, jeśli folder jest wybrany, gdy komentarz jest obecny w kodzie.
Bez niego działa przy wyborze folderu.
sub abc()
Set diaFolder = Application.FileDialog(msoFileDialogFolderPicker)
diaFolder.AllowMultiSelect = False
diaFolder.Title = "Select a folder then hit OK"
diaFolder.Show
'Status = diaFolder.Show
'If Status < 0 Then
'Exit Sub
'End If
a = diaFolder.SelectedItems(1) MsgBox ("Folder selected is :" & a)
ens sub

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Należy pamiętać, że vbFalse = 0 i vbTrue = -1.
Innymi słowy, kliknięcie „OK” zwróci -1, a kliknięcie „Anuluj” - 0.
Wypróbuj następujący kod:
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
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Sub abc()
Set diaFolder = Application.FileDialog(msoFileDialogFolderPicker)
diaFolder.AllowMultiSelect = False
diaFolder.Title = "Select a folder then hit OK"
Dim status As Integer
status = diaFolder.Show
If status <> -1 Then
MsgBox "Cancel Chosen"
Exit Sub
End If
a = diaFolder.SelectedItems(1)
MsgBox ("Folder selected is :" & a)
End Sub

Wiem, że to jest zamknięte, ale chciałem spróbować opublikować to za pierwszym razem. = D
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli nie ma wybranych elementów, to * SelectIMS (1) * nie istnieje, a Excel zwróci błąd. Tak się dzieje, gdy użytkownik kliknie przycisk

anulowanie

.
Rozwiązaniem tego problemu jest sprawdzenie, ile elementów zostało wybranych za pomocą poniższej struktury:
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

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się