Ваш код сейчас не работает, потому что CopySub
не знает, что \ где ComboBox1
. Кроме того, если пользователь нажимает X формы, чтобы закрыть ее вместо нажатия кнопки отмены, или нажимает кнопку ОК, не выбирая рабочую книгу, CopySub
продолжит работу.
Есть несколько способов получить информацию о форме. Самым простым с вашим текущим кодом является правильная ссылка на ComboBox1
и добавление простого теста.
Sub CopySub()
Dim wb As Workbook
UserForm1.Show
If UserForm1.ComboBox1.Value = "" Then
Exit Sub
End If
Set wb = Workbooks(UserForm1.ComboBox1.Value)
' rest of code goes here
End Sub
Однако нужно еще кое-что подумать о том, как ускорить и упростить работу вашего макроса. Если в вашей форме единственной вещью является Combobox для выбора рабочей книги, и пользователи будут запускать макрос с помощью сочетания клавиш или из меню, подумайте о том, чтобы макрос спросил, хотят ли они запустить макрос в активной рабочей книге. Нажав Да на вопрос намного быстрее, чем щелкнуть раскрывающийся список, выбрать рабочую книгу и нажать кнопку ОК.
Sub CopySub()
Dim wb As Workbook
If MsgBox("Do you want to run the macro on '" & ActiveWorkbook.Name & "'?", vbQuestion + vbYesNo) = vbYes Then
Set wb = ActiveWorkbook
Else
UserForm1.Show
If UserForm1.ComboBox1.Value = "" Then
Exit Sub
End If
Set wb = Workbooks(UserForm1.ComboBox1.Value)
End If
' rest of code goes here
End Sub