Как я могу передать / сохранить переменную (sFolder) из CommandButton1_Click в Commandbutton2_Click? - PullRequest
0 голосов
/ 10 января 2019

Переменная "sFolder" не отображается на CommandButton2_Click() после ее установки с помощью CommanButton1_Click().

Я пытался вызывать разные подпрограммы и передавать переменные, но не могу получить правильную комбинацию.

Public Sub CommandButton1_Click()
Dim sFolder As Variant
If sFolder = "" Then
With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "Select a Folder"
    If .Show = -1 Then
        sFolder = .SelectedItems(1)
    End If
End With
End Sub

Sub CommandButton2_Click()
Debug.Print sFolder
End Sub

Я хочу, чтобы вторая кнопка печатала выбранное мной имя файла, но оно пустое без ошибок.

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Сделать переменную доступной для любой подпроцедуры в кодовой таблице этого листа.

Option Explicit

Private sFolder As Variant

Public Sub CommandButton1_Click()

    If sFolder = "" Then
        With Application.FileDialog(msoFileDialogFolderPicker)
            .Title = "Select a Folder"
            If .Show = -1 Then
                sFolder = .SelectedItems(1)
            End If
        End With
    End If

End Sub

Sub CommandButton2_Click()
    Debug.Print sFolder
End Sub
0 голосов
/ 11 января 2019

Это не пусто , это Variant/Empty, это вариант подтипа, который вы получаете для любой неинициализированной / необъявленной локальной переменной - что-то, что Option Explicit помешает, заставив вас объявить переменные, которые вы Используешь.

sFolder существует только в области действия процедуры CommandButton1_Click: она не определена в области действия CommandButton2_Click (или где-либо еще).

Укажите Option Explicit в верхней части модуля и добавьте эту переменную sFolder из локальной переменной в переменную модуля (удалите объявление Dim sFolder As Variant из обработчика нажатия button1), так что теперь его можно использовать в каждой процедуре этого модуля:

Option Explicit
Private sFolder As Variant

Теперь, если вы сначала нажмете кнопку2, вы по-прежнему получите пустую строку (для строкового представления Variant/Empty - пустая строка), но вы увидите значение в непосредственной панели, если щелкнуть кнопку2 после нажатия button1.

...