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