Как вы управляете кнопкой внутри многостраничной в Excel VBA
У меня есть несколько страниц, я успешно смог скопировать элементы первой страницы, которая является моей справочной страницей, на новые страницы, которые создаются динамически.
У меня вопрос, как мне установить действия командной кнопки на странице в многостраничном элементе управления? Моя цель - нажать кнопку на любой странице, а затем открыть другую форму.
Как мне это сделать? Это довольно сложно настроить с Android на VB. Я очень ценю любую помощь от вас, ребята.
Это мой код на страницах клонирования.
i = 0
MultiPage1.Pages.Add
MultiPage1.Pages(i).Controls.Copy
i = i + 1
MultiPage1.Pages(i).Paste
For Each ctl In Me.MultiPage1.Pages(i).Controls
If TypeOf ctl Is MSForms.Label Then
'~~~ code omitted
Select Case ctl.Tag
Case "startTime"
ctl.Caption = "4:00pm"
End Select
End If
Next
Вот как это будет выглядеть.
кнопка объединит все строки внутри страницы. объединенная строка будет показана в другой пользовательской форме.
2 ответа
Возможно, вам лучше создать кнопку на ленте, чтобы она была доступна на всех страницах:
http://chandoo.org/wp/2012/02/27/how-to-add-your-own-macros-to-excel-ribbon/
РЕДАКТИРОВАТЬ:
Плохо, я думал, что вы имели в виду форму листа вместо VBA MultiPage в пользовательской форме.
Проверь это. Я смог сделать эту работу для меня:
Назначить код для кнопки, созданной динамически
Class1:
Option Explicit
Public WithEvents CmdEvents As MSForms.CommandButton
Private Sub CmdEvents_Click()
MsgBox "yo"
End Sub
Пользовательская форма с объектом MultiPage:
Option Explicit
Dim cmdArray() As New Class1
Private Sub CommandButton1_Click()
Dim newControl As Control
Set newControl = Me.MultiPage1.Pages(0).Controls.Add("Forms.CommandButton.1", "NewCommand", True)
newControl.Object.Caption = "hello"
newControl.Left = 50
newControl.Top = 50
ReDim Preserve cmdArray(1 To 1)
Set cmdArray(1).CmdEvents = newControl
Set newControl = Nothing
End Sub
Вы можете сделать это с помощью пользовательского класса. Класс в основном имеет одного члена Public WithEvents b as CommandButton
,
Трюк это WithEvents
ключевое слово. Теперь вы можете вставить некоторый код для общей обработки нажатия кнопки, назначенной этому классу:
Private Sub b_Click()
MsgBox "You clicked " & b.Name 'Modify this event so that different code is executed base on the page/name/etc.
End Sub
Чтобы сделать это, вам нужно присвоить кнопку, которую вы создаете в своем коде, объекту этого нового класса:
Private objButtonHandler as New MyClass 'this should be scope a UserForm wide
Sub YourSub
Dim objYourButton as CommandButton
Set objYourButton = ... `your code here
Set objButtonHandler.b = objYourButton
End Sub