Usando controles ActiveX em planilhas

Esse tópico cobre informações específicas sobre como usar controles ActiveX em planilhas e folhas de gráfico. Para obter informações gerais sobre como adicionar e trabalhar com controles, consulte Usar controles ActiveX em um documento e Criar uma caixa de diálogo personalizada.

Tenha o seguinte em mente ao trabalhar com controles em planilhas.

  • Além das propriedades padrão disponíveis para os controles ActiveX, as seguintes propriedades podem ser usadas com controles ActiveX no Microsoft Excel: BottomRightCell, LinkedCell, ListFillRange, Placement, PrintObject, TopLeftCell e ZOrder.

    Essas propriedades podem ser definidas e retornadas usando o nome do controle ActiveX. O exemplo seguinte rola a janela da pasta de trabalho de forma que CommandButton1 fique no canto superior esquerdo.

    Set t = Sheet1.CommandButton1.TopLeftCell
    With ActiveWindow
    .ScrollRow = t.Row
    .ScrollColumn = t.Column
    End With

  • Alguns métodos e propriedades do Microsoft Excel Visual Basic são desativados quando um controle ActiveX é ativado. Por exemplo, o método Sort não pode ser usado quando um controle está ativo, assim o código seguinte falha em um procedimento de evento de clique de botão (porque o controle ainda está ativo depois que o usuário o clica).
    Private Sub CommandButton1.Click
    Range("a1:a10").Sort Key1:=Range("a1")
    End Sub

Você pode contornar esse problema ativando algum outro elemento na planilha antes de usar a propriedade ou método que falhou. Por exemplo, o código seguinte organiza o intervalo:

Private Sub CommandButton1.Click
Range("a1").Activate
Range("a1:a10").Sort Key1:=Range("a1")
CommandButton1.Activate
End Sub

  • Os controles em uma pasta de trabalho do Microsoft Excel incorporada em um documento em outro aplicativo não funcionarão se o usuário clicar duas vezes na pasta de trabalho para editá-la. Os controles funcionarão se o usuário clicar com o botão direito na pasta de trabalho e selecionar o comando Abrir no menu de atalho.
  • Quando uma pasta de trabalho do Microsoft Excel é salva no formato de arquivo de planilha do Microsoft Excel 5.0/95, as informações do controle ActiveX são perdidas.
  • A palavra-chave Me em um procedimento de evento para um controle ActiveX em uma planilha se refere à planilha, não ao controle.

Adicionar controles com o Visual Basic

No Microsoft Excel, os controles ActiveX são representados por objetos OLEObject na coleção OLEObjects (todos os objetos OLEObject também estão a coleção Shapes). Para adicionar por programação um controle ActiveX a uma planilha, use o método Add da coleção OLEObjects. O exemplo seguinte adiciona um botão de comando à planilha um.

Worksheets(1).OLEObjects.Add "Forms.CommandButton.1", _
Left:=10, Top:=10, Height:=20, Width:=100

Usar as propriedades do controle com o Visual Basic

Na maioria dos casos, o código do Visual Basic fará referência aos controles ActiveX por nome. O exemplo seguinte altera a legenda do controle chamado "CommandButton1".

Sheet1.CommandButton1.Caption = "Run"

Observe que quando você usa um nome de controle fora do módulo da classe para a planilha que contém o controle, é preciso qualificar o nome do controle com o nome da planilha.

Para alterar o nome do controle que você usa em código do Visual Basic, selecione o código e defina a propriedade (Name) na janela Propriedades.

Como os controles ActiveX também são representados por objetos OLEObject na coleção OLEObjects, você pode definir as propriedades do controle usando os objetos na coleção. O exemplo seguinte define a posição esquerda do controle chamada "CommandButton1".

Worksheets(1).OLEObjects("CommandButton1").Left = 10

As propriedades do controle que não são exibidas como propriedades do objeto OLEObject podem ser definidas retornando o objeto de controle real usando a propriedade Object. O exemplo seguinte define a legenda de CommandButton1.

Worksheets(1).OLEObjects("CommandButton1"). _
Object.Caption = "run me"

Como todos os objetos OLE também são membros da coleção Shapes, você pode usar a coleção para definir as propriedades para vários controles. O exemplo seguinte alinha a extremidade esquerda de todos os controles na planilha um.

For Each s In Worksheets(1).Shapes
If s.Type = msoOLEControlObject Then s.Left = 10
Next

Usar os nomes de controle com as formas e coleções OLEObjects

Um controle ActiveX em uma planilha possui dois nomes: o nome da forma que contém o controle, que pode ser visto na caixa Nome quando visualiza a planilha e o nome de código do controle, que pode ser visto na célula à direita de (Name) na janela Propriedades. Ao adicionar primeiro um controle em uma planilha, o nome da forma e o nome do código coincidem. Entretanto, se você alterar o nome da forma ou o nome do código, o outro não é automaticamente alterado para coincidir.

Você usa o nome do código de um controle nos nomes de seus procedimentos de evento. Entretanto, ao retornar um controle da coleção Shapes ou OLEObjects para uma planilha, você precisa usar o nome da forma, não o nome do código, para se referir ao controle por nome. Por exemplo, assuma que você adicione uma caixa de seleção a uma planilha e que ambos os nomes da forma e o nome de código padrão são CheckBox1. Se você alterar o nome do código do controle digitando chkFinished próximo a (Name) na janela Propriedades, você deve usar chkFinished nos nomes de procedimentos de evento, mas ainda tem que usar CheckBox1 para retornar o controle da coleção Shapes ou OLEObject, como mostrado no exemplo seguinte.

Private Sub chkFinished_Click()
ActiveSheet.OLEObjects("CheckBox1").Object.Value = 1
End Sub