Обнаружение события нажатия кнопки в многостраничной форме листа Excel (НЕ многостраничный VBA) - PullRequest
0 голосов
/ 05 мая 2018

Я изо всех сил пытаюсь выяснить, как обнаружить событие нажатия кнопки в многостраничной форме, которая находится непосредственно на листе Excel. Другими словами, форма не создается с использованием VBA, она создается непосредственно на листе.

Я ожидаю, что синтаксис будет примерно таким:

Private Sub MultiPage1_Frame1_CommandButton1_Click()
    Do Stuff
End Sub

Однако это не работает, потому что я думаю, что мне также нужно указать страницу в MultiPage. Например, к текстовому полю той же формы можно получить доступ через:

MultiPage1.Pages(0).Frame1.TextBox1.Text = "Some Text"

К сожалению,

Private Sub MultiPage1_Pages(0)_Frame1_CommandButton1_Click()

выдает ошибку компиляции: ожидается: идентификатор с выбранным нулем внутри (0).

Итак, как мне конвертировать

MultiPage1.Pages(0).Frame1.CommandButton1 

для дополнительного имени, которое будет определять событие нажатия кнопки?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Микериксон и Джафар Трибак на MrExcel.com выяснили:

https://www.mrexcel.com/forum/excel-questions/1054446-detect-button-press-event-excel-sheet-multipage-form-not-vba-userform-multipage-2.html

Большое спасибо им обоим!

0 голосов
/ 05 мая 2018

Я не уверен, но думаю, что вы, возможно, наткнулись на ошибку.

Существует элемент управления Microsoft Forms 2.0 под Больше элементов управления , но я уверен, что он предназначен только для использования на пользовательских формах.

Я попытался добавить его на лист и получил ошибку. Однако, как только я добавил один в UserForm и вернулся к рабочему листу, я смог добавить его ... но на мгновение все стало "глючно", и когда я открыл диалоговое окно Properties для тела, шрифт был плохо отрисован ,

Вся документация, на которую я смотрел (например, , , , и , ), содержит только примеры его использования в пользовательской форме или в Outlook. ,

Существует много типов элементов управления ActiveX, и не все из них можно использовать где-либо. Как правило, в Excel лучше придерживаться встроенных элементов управления.

Также с другого форума:

Q : Кажется, я не смог найти и добавить многостраничный элемент управления в лист. Как добавить многостраничный элемент управления на лист Excel?

A : Если вы сначала не поместите его в пользовательскую форму, вы не сможете отобразить его на рабочем листе. UserForm предоставляет пользовательский интерфейс для VBA. MultiPagecontrol предназначен для работы с этим пользовательским интерфейсом, а не с таблицей Excel. Есть ли проблема с использованием пользовательской формы для отображения элемента управления MutliPage? Источник: Лейт Росс

img

Это объединенное свидетельство говорит мне, , даже если вы можете заставить его работать, вы не должны . Там нет предсказания, как он будет себя вести.


Если вы решите использовать MultiPage для пользовательской формы, обратите внимание, что в приведенном выше примере MultiPage1 - это имя элемента управления ; это не относится к "странице 1". Элемент управления в целом имеет событие Click, которое не относится к конкретной странице:

Private Sub MultiPage1_Click(ByVal Index As Long)

Ради полноты я вставлю полный пример кода, но еще раз: это не рекомендуется для элемента управления на основе листа.

Как: получить доступ к странице в многостраничном элементе управления

В следующем примере доступ к отдельной странице MultiPage осуществляется несколькими способами:

  • Использование коллекции страниц с числовым индексом.

  • Использование имени отдельной страницы в MultiPage.

  • Использование свойства SelectedItem.

Чтобы использовать этот пример, скопируйте этот пример кода в Редактор сценариев формы . Убедитесь, что форма содержит MultiPage с именем MultiPage1 и CommandButton с именем CommandButton1.

Sub CommandButton1_Click()
    Dim PageName
    Set MultiPage1 = Item.GetInspector.ModifiedFormPages("P.2").MultiPage1

    For i = 0 To MultiPage1.Count - 1
        'Use index (numeric or string)
        MsgBox "MultiPage1.Pages(i).Caption = " & MultiPage1.Pages(i).Caption
        MsgBox "MultiPage1.Pages.Item(i).Caption = " & _
            MultiPage1.Pages.Item(i).Caption

        'Use Page object without referring to Pages collection
        If i = 0 Then
            MsgBox "MultiPage1.Page1.Caption = " & MultiPage1.Page1.Caption
        ElseIf i = 1 Then
            MsgBox "MultiPage1.Page2.Caption = " & MultiPage1.Page2.Caption
        End If

        'Use SelectedItem Property
        MultiPage1.Value = i
        MsgBox "MultiPage1.SelectedItem.Caption = " & _
            MultiPage1.SelectedItem.Caption
    Next
End Sub

( Источник )


Теперь я собираюсь удалить этот лист с ошибками и перезагрузить ; Я бы посоветовал вам сделать то же самое!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...