Обзор различий между элементами управления формы и элементами управления ActiveX в Excel - PullRequest
0 голосов
/ 03 мая 2018

Почему в Excel доступны 2 типа элементов управления ? (2 кнопки, 2 поля со списком, 2 флажка и т. Д.)

В чем разница между элементами управления и элементами управления ActiveX ? Какой из них я должен использовать?

image

Некоторые примеры кода, которые я нахожу в Интернете, работают с моими элементами управления, а другие - нет. Как так?

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

1 Ответ

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

Существует [вечная] путаница, связанная с двумя типами элементов управления, доступными в Excel - усугубляется контрастной терминологией , используемой различными онлайн-источниками.

Это всего лишь общий обзор различий между элементами управления формой и элементами управления ActiveX (на основе моих старых заметок, которые помогли мне окончательно выяснить различия !) Посетите включенные ссылки для получения более подробной информации о каждом элементе управления, включая код и примеры проектов. ☺

(Адаптировано из моего исходного поста здесь - теперь закрыто)


Обзор:

  • Существует два типа элементов управления: Элементы управления формой и Элементы управления ActiveX :

    • Оба типа элементов управления могут использоваться на рабочих листах, но только элементы управления ActiveX могут использоваться на пользовательских формах .

    • Элементы управления формой являются частью Shapes collection (точно так же, как рисованные объекты) и, таким образом, называются: imageworksheet* **. Shapes("** *controlname* **")**">

    • Элементы управления ActiveX в основном являются частью рабочего листа и поэтому называются:
      imageworksheet* **.** *controlname*">

    • Оба типа элементов управления могут создаваться, изменяться и удаляться либо с рабочего листа, либо программно с помощью VBA, однако два типа элементов управления имеют слегка различающийся синтаксис при использовании VBA для ссылки на их.

  • На некоторых сайтах обсуждается также Форма данных . Это не что иное, как пользовательская форма , созданная специально для ввода / манипулирования данными, поэтому было бы более разумно называть их (более знакомое звучание) "Форма ввода данных пользователем «.

  • В офисной документации также иногда упоминается лист как форма. Хотя это технически правильно, не позволяйте этому сбить вас с толку. Думайте о слове «форма» как используемом в общем смысле :

    dictionary image: form


Два типа элементов управления

  1. Элементы управления формой

  2. Элементы управления ActiveX

Оба выглядят, ведут себя и управляются одинаково, но не одинаково. (Список здесь .)

Например, давайте сравним два типа поля со списком . В некоторых языках программирования сопоставимые элементы управления называются «раскрывающимся меню» или «раскрывающимся списком» . В Excel у нас есть " поле со списком управления формой " и " поле со списком управления ActiveX " :

compare control types (Нажмите на изображение, чтобы увеличить.)

«Имя по умолчанию» применяется к элементам управления, созданным вручную . Элементы управления, созданные программно, не имеют (или не требуют) имени по умолчанию и, следовательно, должны назначаться сразу после создания.


differences between controls

(Источник: мой ответ )


Контроль доступности

На этом изображении ниже показано, какие общие элементы управления обычно доступны для использования в рабочих листах и ​​пользовательских формах.

chart of controls

Другие факторы могут влиять на доступность контроля.


Об элементах управления ActiveX и связанных с этим проблемах безопасности

Элемент управления ActiveX является расширением для VBA Toolbox. Элементы управления ActiveX используются так же, как и любые стандартные встроенные элементы управления, например элемент управления CheckBox. Когда вы добавляете элемент управления ActiveX в приложение, оно становится частью среды разработки и среды выполнения и предоставляет новые функции для вашего приложения.

  • Элемент управления ActiveX реализован как внутрипроцессный сервер (как правило, небольшой объект), который можно использовать в любом контейнере OLE. Обратите внимание, что полная функциональность элемента управления ActiveX доступна только при использовании в контейнере OLE, предназначенном для понимания элементов управления ActiveX.

  • Этот тип контейнера, называемый контейнером управления или объектом управления , может управлять элементом управления ActiveX, используя свойства элемента управления и методы и получает уведомления от элемента управления ActiveX в виде событий. Следующий рисунок демонстрирует это взаимодействие:

    example
    ( Источник : это и это )

Смотри также:


Дополнительные кнопки (радио-кнопки)

В Excel два типа переключателей фактически называются Дополнительные кнопки . Чтобы еще больше запутать вопросы:

  • имя по умолчанию для элемента управления формы - OptionButton1.

  • имя по умолчанию для элемента управления ActiveX: Option Button 1.

Хороший способ их различить - открыть список свойств элемента управления (на ленте на вкладке «Разработка», щелкнуть правой кнопкой мыши элемент управления и выбрать Properties или нажать F4 ), поскольку элемент управления ActiveX имеет гораздо больше опций, чем простой элемент управления формы.

Кнопки и флажки параметров можно связать вместе (поэтому из группы можно выбрать только один параметр за раз), поместив их в общий Групповой блок .

Выберите элемент управления группового блока и затем удерживайте Ctrl , выбирая каждый из других элементов управления, которые вы хотите сгруппировать. Щелкните правой кнопкой мыши элемент управления групповым блоком и выберите GroupingGroup.

Первые две ссылки ниже представляют собой отдельные наборы инструкций для работы с каждым типом кнопки выбора.


СОБЫТИЯ УПРАВЛЕНИЯ ОБРАЩЕНИЕМ:

События управления формой (Click только событие)

События управления формой могут отвечать только на одно событие: событие Click . (Подробнее здесь .) Обратите внимание, что этот раздел не относится к пользовательским формам , поскольку они используют только элементы управления ActiveX.

Чтобы добавить процедуру для события Click:

  • Щелкните правой кнопкой мыши элемент управления и выберите Assign Macro...

  • В диалоге «Назначить макрос»:

    • Выберите существующую процедуру и нажмите OK , или,

    • Создайте новую процедуру в VBE, нажав Новый ... , или,

    • Запишите новый макрос, нажав Запись ... , или

    • Удалить назначенное событие, удалить его имя из поля Macro Name и нажать OK .

    assign events (Щелкните изображение, чтобы увеличить.)

Чтобы переименовать, отредактировать или удалить существующие макросы, нажмите Alt + F8 , чтобы открыть интерфейс Macro:

Macros dialog


события управления ActiveX

Элементы управления ActiveX имеют более обширный список событий, на которые они могут быть настроены для ответа.

Чтобы назначить события элементам управления ActiveX, щелкните правой кнопкой мыши элемент управления и выберите View Code. В VBE вы можете вставить код или выбрать определенные события из раскрывающегося списка в правом верхнем углу окна VBE.

activeX events (Щелкните изображение, чтобы увеличить.)

Управление обработкой событий в пользовательской форме:

События также могут использоваться в элементах управления для пользовательских форм. Поскольку только пользовательские элементы управления ActiveX могут быть размещены в форме пользователя, вы получите компромисс «больше кодирования + больше функциональности».

Элементы управления ActiveX добавляются в пользовательские формы так же, как они добавляются на лист. Помните, что любые события, назначенные самой пользовательской форме (т. Е. Фон), будут «заблокированы» в любых областях, охватываемых элементом управления, поэтому вам может потребоваться назначить те же события элементам управления, что и а также пользовательская форма.

Например, , чтобы пользовательская форма отвечала на MouseMove в любом месте формы , тот же код события был применен к пользовательская форма, текстовые поля, кнопки выбора и рамка :

A userform with controls responding to events


Примеры VBA

Добавить / Изменить / Удалить кнопку опции управления формой с помощью VBA:

Sub formControl_add()
    'create form control
    Dim ws As Worksheet: Set ws = ActiveSheet
    With ws.Shapes.AddFormControl(xlOptionButton, 25, 25, 100, 100)
        .Name = "cOptionButton1"  'name control immediately (so we can find it later)
    End With
End Sub

Sub formControl_modify()
    'modify form control's properties
    Dim ws As Worksheet: Set ws = ActiveSheet
    ws.Shapes("cOptionButton1").Select
    With Selection 'shapes must be Selected before changing
        .Characters.Text = "wxyzabcd"
   End With
End Sub

Sub formControl_delete()
    'delete form control
    Dim ws As Worksheet: Set ws = ActiveSheet
    ws.Shapes("cOptionButton1").Delete
End Sub

Добавить / Изменить / Удалить командную кнопку ActiveX с помощью VBA:

Sub activexControl_add()
    'create ActiveX control
    Dim ws As Worksheet: Set ws = ActiveSheet
    With ws.OLEObjects.Add("Forms.CommandButton.1")
        .Left = 25
        .Top = 25
        .Width = 75
        .Height = 75
        .Name = "xCommandButton1" 'name control immediately (so we can find it later)
    End With
End Sub

Sub activexControl_modify()
    ' modify activeX control's properties
    Dim ws As Worksheet: Set ws = ActiveSheet
    With ws.OLEObjects("xCommandButton1").Object
        .Caption = "abcxyz"
        .BackColor = vbGreen
    End With
End Sub

Sub activexControl_delete()
    ' delete activeX control
    Dim ws As Worksheet: Set ws = ActiveSheet
    ws.OLEObjects("xCommandButton1").Delete
End Sub

Добавление / удаление элементов из поля со списком элементов управления:

Sub ComboBox_addRemoveItems_FormControl()

    Dim ws As Worksheet: Set ws = ActiveSheet

    'add item to form control combo box
    ActiveWorkbook.Sheets("Sheet1").Shapes("Drop Down 1").ControlFormat.AddItem "abcd"

    'remove all items from from form control combo bo
    ActiveWorkbook.Sheets("Sheet1").Shapes("Drop Down 1").ControlFormat.RemoveAllItems

End Sub  

Добавить / удалить элементы из поля со списком ActiveX:

Sub ComboBox_addRemoveItems_ActiveXControl()

    Dim ws As Worksheet: Set ws = ActiveSheet

    'add items to ActiveX combo box
    ActiveWorkbook.Sheets("Sheet1").ComboBox1.AddItem "abcd"

    'remove all items from ActiveX combo box
    ActiveWorkbook.Sheets("Sheet1").ComboBox1.Clear

End Sub  

Дополнительная информация:

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