Visão geral das diferenças entre controles de formulários e controles ActiveX no Excel

Por que existem 2 tipos de controlos disponíveis no Excel? (2 botões, 2 combinações, 2 opções, etc...)

Qual é a diferença entre Os controlos dos formulários e Os controlos ActiveX? Qual devo usar?

Algumas amostras de código que encontro online funcionam com os meus controlos, mas outras não. Porquê?

Como é que eu trabalho com cada tipo, e como é que sei a diferença?

Author: ashleedawg, 2018-05-03

1 answers

Há uma confusão [eterna] em torno dos dois tipos de controlos disponíveis ao Excel - agravada pela terminologia contrastante utilizada por diferentes fontes online.

Esta é apenas uma visão geral das diferenças entre os controlos da forma

e controlos ActiveX (baseado nas minhas notas antigas que me ajudaram a descobrir as diferenças!) Visite os links incluídos para informações mais detalhadas sobre cada controle incluindo projectos de código e de amostragem. ☺

(adaptado do meu post original toma. - agora fechado)


Resumo:

  • Existem dois tipos de controlos: controlos de formulários e controlos ActiveX:

    • Ambos os tipos de controlos podem ser usados nas folhas de cálculo, mas apenas os controlos ActiveX podem ser usados em formulários de Utilização .

    • Farmacêutica os controlos fazem parte da colecção (tal como os objectos de desenho), sendo assim referidos como: *<code>worksheet</code>* **<code>.</code> <code>Shapes("</code>** *<code>controlname</code>* **<code>")</code>**

    • Os controlos ActiveX fazem basicamente parte do documento de trabalho, pelo que são referidos como:
      *<code>worksheet</code>* **<code>.</code>** *<code>controlname</code>*

    • Ambos os tipos de controles podem ser criados, modificados e excluídos da planilha, ou programaticamente com VBA, no entanto, os 2 tipos de controles têm uma sintaxe ligeiramente variável ao usar VBA para se referir a o.

  • Alguns sites discutem também um formulário de Dados . Este é nada mais do que uma userform feita especificamente para a entrada/manipulação de dados, por isso teria feito mais sentido chamá-los (o som mais familiar) "Userform de introdução de Dados".

  • A documentação do serviço refere-se também ocasionalmente a uma folha de trabalho como um formulário. Embora isto seja tecnicamente correcto, não deixes que isto aconteça. confundir-te. Pense na palavra "forma" como sendo usada no sentido geral.:

    dictionary image: form


Dois tipos de controlos

  1. Controlos Dos Formulários

  2. Controlos ActiveX

Os dois olham, comportam-se e são controlados da mesma forma, mas não da mesma forma. (Lista aqui.)

Por exemplo, vamos comparar os dois tipos de caixas . Em alguma programação as línguas, os controlos comparáveis são referidos como um "menu" ou "lista". No Excel, temos "lista de controlo do formulário", e um "lista de controlo ActiveX":

compare control types (Clique na imagem para ampliar.)

"o nome Por omissão" aplica-se aos controlos criados manualmente. Controles criados programaticamente não têm (ou exigem) um nome padrão e, portanto, deve ter um atribuído imediatamente após a criação.


differences between controls

(fonte:)


Disponibilidade De Controlo

Esta imagem abaixo mostra quais os controlos comuns que estão geralmente disponíveis para utilização nas folhas de cálculo e nos formulários de utilizador.

chart of controls

Outros factores podem afectar a disponibilidade de controlo.


Acerca dos controlos ActiveX e preocupações relacionadas com a segurança

um controle ActiveX é uma extensão para a caixa de ferramentas VBA. Você usa controles ActiveX tal como qualquer um dos padrões controles incorporados, como o Controle Da Caixa De Controle. Quando você adiciona um controle ActiveX a uma aplicação, ela se torna parte do ambiente de desenvolvimento e execução em tempo de execução e fornece uma nova funcionalidade para a sua aplicação.

  • um controle ActiveX é implementado como um servidor em processo (tipicamente um pequeno objeto) que pode ser usado em qualquer recipiente OLE. Note-se que a funcionalidade completa de um controlo ActiveX só está disponível quando utilizado num contentor OLE concebido para: esteja ciente dos controles ActiveX.

  • Este tipo de contêiner, chamado recipiente de controle ou objeto de controle, pode operar um controle ActiveX usando o controle de propriedades e métodos, e recebe notificações do controle ActiveX na forma de eventos. A figura seguinte demonstra esta interacção:

    example
    (Origem: este e isto)

Veja Também:


Botões De Opção (Botões De Rádio)

No Excel, os dois tipos de botões de rádio são de facto chamados botões de opção . Para confundir ainda mais as coisas:
  • O nome por omissão para o controlo do formulário é OptionButton1.

  • O nome por omissão para o controlo ActiveX é Option Button 1.

Uma boa maneira de os distinguir é abrindo a lista de Propriedades do controlo (na fita sob a página de desenvolvimento, ou clicando com o botão direito no controlo e escolhendo Properties, ou batendo F4 ), porque o controlo ActiveX tem muito mais opções que o controle de forma mais simples.

Os botões das opções e as opções podem ser ligados entre si (por isso só uma opção de cada vez pode ser seleccionada a partir do grupo), colocando-os numa caixa de grupo partilhada.

Seleccione o controlo da caixa de grupo e mantenha Ctrl enquanto selecciona cada um dos outros controlos que deseja agrupar. Carregue com o botão direito no controlo da caixa de grupo e escolha GroupingGroup.

As duas primeiras ligações abaixo são: conjuntos separados de instruções para o manuseamento de cada tipo de botão de opção.

MANIPULAÇÃO DE EVENTOS DE CONTROLO:

Formem eventos de controlo (Click Apenas eventos)

Os Eventos de controlo da forma só são capazes de responder a um evento: O Click Evento. (Mais informações aqui.) Note que esta secção não se aplica às formas de Utilização uma vez que usam apenas os controlos ActiveX.

Para adicionar um procedimento para o Click Evento:

  • Clique com o botão direito no controle e escolha Assign Macro...

  • Na janela 'Atribuir Macro':

    • Selecione um procedimento existente, e clique em OK, ou,

    • Crie um novo procedimento no VBE, carregando em novo..., ou,

    • Grava uma nova macro, carregando em gravar..., ou,

    • Para remover o evento atribuído, remove o seu nome do campo Macro Name e carregue em OK .

    assign events (Clique na imagem para ampliar.)

Para mudar o nome, editar ou apagar as macros existentes, carregue em Alt+F8 para abrir a interface Macro:

Macros dialog


ActiveX control events

Os controlos ActiveX têm uma lista mais extensade eventos aos quais podem ser configurados para responder.

Para atribuir eventos para os controlos ActiveX, carregue com o botão direito no controlo e escolha View Code. No VBE, você pode colar em código, ou escolher eventos específicos da lista no canto superior direito da janela do VBE.

activeX events (Clique na imagem para ampliar.)

Controlar o tratamento de eventos num formulário de utilizador:

Os Eventos também podem ser utilizados nos controlos das formas de Utilização. Uma vez que apenas os controles ActiveX podem ser colocados um userform, você terá o " mais codificação + mais funcionalidade " trade-off.

Os controlos ActiveX são adicionados às formas de Utilização da mesma forma que são adicionados a uma folha de trabalho. Tenha em mente que quaisquer eventos atribuídos à userform em si (ou seja., fundo) será "bloqueado" em qualquer área coberta por um controle, então você pode precisar atribuir os mesmos eventos para os controles, bem como o userform.

Por exemplo, a fim de fazer com que este formulário de utilizador responda a MouseMove em qualquer lugar do formulário, o o mesmo código de evento foi aplicado a o formato do utilizador, as caixas de texto, os botões de opção e a moldura:

A userform with controls responding to events


EXEMPLOS DE VBA

Adicionar/modificar / apagar uma opção de controlo do formulário com o botão 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

Adicionar/modificar / apagar um Botão de comando ActiveX usando 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

Adicionar / Remover itens de uma lista de controlo de formulários:

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  

Adicionar / Remover itens de uma lista 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  

Mais Informações:

 10
Author: ashleedawg, 2018-05-02 21:47:04