Как можно связать событие с кнопкой в макросе Excel?

Здравствуйте! <br/> Я начал изучать макросы для работы и столкнулся с первой задачей для практики. <br/> Как мне соединить кнопку с функцией выбора папки? <br/> У меня есть следующая функция для выбора папки: <br/> <pre><code class="vbscript">Function GetFolderPath(Optional ByVal Title As String = "Выберите папку", _
                       Optional ByVal InitialPath As String = "c:\") As String
    ' функция выводит диалоговое окно выбора папки с заголовком Title,
    ' начиная обзор диска с папки InitialPath
    ' возвращает полный путь к выбранной папке, или пустую строку в случае отказа от выбора
    Dim PS As String: PS = Application.PathSeparator
    With Application.FileDialog(msoFileDialogFolderPicker)
        If Not Right$(InitialPath, 1) = PS Then InitialPath = InitialPath &amp; PS
        .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath
        If .Show &lt;&gt; -1 Then Exit Function
        GetFolderPath = .SelectedItems(1)
        If Not Right$(GetFolderPath, 1) = PS Then GetFolderPath = GetFolderPath &amp; PS
    End With
End Function
 
Sub ПримерИспользования_GetFolderPath()
    ПутьКПапке = GetFolderPath("Заголовок окна", ThisWorkbook.Path)   ' запрашиваем имя папки
    If ПутьКПапке = "" Then Exit Sub    ' выход, если пользователь отказался от выбора папки
    MsgBox "Выбрана папка: " &amp; ПутьКПапке, vbInformation
End Sub</code></pre> <br/> И вот код самой кнопки в Excel: <br/> <pre><code class="vbscript">Private Sub CommandButton1_Click()

End Sub</code></pre> <br/> Как мне объединить эти два элемента так, чтобы при нажатии на кнопку "выбрать папку" активировалась указанная функция? Я не могу найти хорошую документацию с примерами в Google.
  • 7 октября 2024 г. 3:55
Ответы на вопрос 2
Чтобы связать кнопку с вашей функцией выбора папки в Excel, вам нужно вызвать вашу функцию из обработчика события нажатия на кнопку `CommandButton1_Click`. Ваша функция `GetFolderPath` предназначена для выбора папки, а процедура `ПримерИспользования_GetFolderPath` демонстрирует, как ее использовать. Вам нужно объединить эти два элемента в обработчик событий.

Вот как вы можете сделать это:

1. Откройте редактор VBA (нажмите `ALT + F11` в Excel).
2. Найдите свой объект "UserForm", где находится ваша кнопка, и дважды щелкните по кнопке (например, `CommandButton1`). Это откроет код для вашей кнопки.
3. Внутри обработчика `CommandButton1_Click` вы можете вызывать вашу функцию для выбора папки. Вот пример, как это сделать:

```vba
Private Sub CommandButton1_Click()
    Dim ПутьКПапке As String
    ПутьКПапке = GetFolderPath("Выберите папку", ThisWorkbook.Path) ' вызов функции выбора папки
    
    If ПутьКПапке = "" Then
        MsgBox "Выбор отменен.", vbExclamation
    Else
        MsgBox "Выбрана папка: " & ПутьКПапке, vbInformation
    End If
End Sub
```

Полный код должен выглядеть так:

```vba
Function GetFolderPath(Optional ByVal Title As String = "Выберите папку", _
                       Optional ByVal InitialPath As String = "c:\") As String
    Dim PS As String: PS = Application.PathSeparator
    With Application.FileDialog(msoFileDialogFolderPicker)
        If Not Right$(InitialPath, 1) = PS Then InitialPath = InitialPath & PS
        .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath
        If .Show <> -1 Then Exit Function
        GetFolderPath = .SelectedItems(1)
        If Not Right$(GetFolderPath, 1) = PS Then GetFolderPath = GetFolderPath & PS
    End With
End Function

Private Sub CommandButton1_Click()
    Dim ПутьКПапке As String
    ПутьКПапке = GetFolderPath("Выберите папку", ThisWorkbook.Path) ' вызов функции выбора папки
    
    If ПутьКПапке = "" Then
        MsgBox "Выбор отменен.", vbExclamation
    Else
        MsgBox "Выбрана папка: " & ПутьКПапке, vbInformation
    End If
End Sub
```

Теперь при нажатии на `CommandButton1` будет открываться диалог выбора папки, и сообщение будет выводиться в зависимости от того, была ли выбрана папка или действие отменено.
Нужно на листе файла xlms создать кнопку с любым названием Разработчик -> Вставить -> Кнопка 
Правой кнопкой мыши на вставленной кнопке назначить ей макрос ПримерИспользования_GetFolderPath
После этого можно запускать макрос кнопкой.
Похожие вопросы