Как вы управляете кнопкой внутри многостраничной в 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
Другие вопросы по тегам