Objetos VBA e propriedades Cells e Offset

Oi Pessoal!

Dando continuidade ao ensino da programação VBA, neste post vamos falar de Objetos de das propriedades Cells e Offset.

 

Objetos são as peças fundamentais para a composição de programas em VBA. Um objeto é um tipo especial de variável que contém dados e códigos.

Uma coleção é um grupo de objetos da mesma classe. Os objetos do Excel mais usados na programação em VBA são: Workbook, Worksheet, Sheet, e Range.

– Workbooks é a coleção de todos os objetos do tipo Workbook. O objeto Workbook representa arquivo Excel.

– O objeto Worksheet representa uma planilha.

– O objeto Range representa um intervalo de células.

A figura a seguir ilustra os objetos mencionados. O Workbook (arquivo Excel) é a Pasta1.xls. A Worksheet atual é Plan1. Duas Ranges estão selecionadas: Range B2 (uma célula) e B7:B11 (um conjunto de células).

A coleção Workbooks contém todos os arquivos Excel abertos no momento. Cada Workbook contém pelo menos uma Worksheet, que pode ser representada no VBA conforme abaixo:

Worksheets(“Sheet1”) ou Worksheets(1)

O trecho acima se refere à primeira Worksheet da coleção.

Importante: note que Worksheets(1) não é necessariamente a mesma planilha que Worksheets(“Sheet1”).

Para se referir a objetos com o mesmo nome, é necessário qualificá-los. Por exemplo:

Workbooks(“Book1”).Worksheets(“Sheet1”)

Workbooks(“Book2”).Worksheets(“Sheet1”)

Não estando o objeto identificado, aquele que estiver ativo no momento (por exemplo, Workbook ou Worksheet) será usado.

Como no VBA não existe o comando “Desfazer”. Sugiro que você sempre identifique os objetos no código de suas Macros, para não correr o risco de perder dados das suas planilhas.

Objeto Range e as Propriedades Cells e Offset:

 

O objeto Range representa uma célula, uma linha, uma coluna, ou conjunto contínuo o não de células. O exemplo de código a seguir coloca o texto “AB” no Range A1:B5 da planilha Plan2.

Worksheets(“Plan2”).Range(“A1:B5”) = “AB”

O exemplo abaixo coloca “AAA” nas células A1, A3 e A5 da Plan2.

Worksheets(“Plan2”).Range(“A1, A3, A5”) = “AAA”

Uma das principais propriedades do objeto Range é a propriedade Cells. Ela recebe dois índices como parâmetros, tendo a seguinte sintaxe: Cells(row, column) onde row é o índice da linha e column o da coluna.

A seguir, visualizaremos exemplos de uso desta propriedade.

1 – Repare que as três linhas de código abaixo são equivalentes.

ActiveSheet.Range.Cells(1,1)

Range.Cells(1,1)
Cells(1,1)

2 – Na sequência, verificamos duas linhas de código que geram o mesmo resultado.

 

Range(“A1”) = 123

Cells(1,1) = 123

3 – Agora o código abaixo coloca “ABC” em Cells(1,12) (o mesmo que Range(“L1”)), assumindo que a célula A1 é a ativa.

 

Cells(12) = “ABC”

4 – O trecho a seguir coloca “XYZ” na célula C3.

 

Range(“B1:F5”).cells(12) = “XYZ”

Importante: como no Excel, programando em VBA, é possível criar um Range selecionando células não contíguas. Basta usarmos a vírgula (,) para separar os intervalos de células no lugar do ponto e vírgula (;). Como exemplo, podemos escrever: Range(“B1:B5,D2:D7”)

Para finalizar, vamos falar de outra propriedade importante do objeto Range.

A propriedade Offset, que pode ser muito útil quando precisamos efetuar uma movimentação a partir da célula ativa (usada como referência da movimentação).

Nos exemplos a seguir, vamos assumir que a E5 é a célula ativa antes do movimento efetuado pela Offset.

ActiveCell.Offset(1,0) = 1

Este comando movimenta o cursor para uma linha abaixo de E5, ou seja, para E6.

ActiveCell.Offset(0,1) = 1

Este comando movimenta o cursor para uma coluna à direita de E5, ou seja, para F5.

ActiveCell.Offset(0,-3) = 1

Este comando movimenta o cursor para três colunas à esquerda de E5, ou seja, para B5.

Abs, Dr. E

P.S. Gostaria de pedir desculpas, mas infelizmente não estou conseguindo responder todos os e-mails com dúvidas que venho recebendo. Por isso, peço que não usem o espaço de comentários do post para enviar dúvidas.

4 Respostas

  1. Como obter o endereço de uma determinada célula estando na célula ativa somente em uma determinada área da planilha?

    • Paulo,

      Sinceramente não entendi sua pergunta. Você tem alguma planilha de exemplo para me enviar? Assim, poderei tentar ajudar.

      Abs, Dr. Excel

  2. Muito boa dica, resolveu um problema em uma planilha. Salve ActiveCell.Offset.

    Seu blog ja esta adicionado aos meus favoritos.

    Rosemary Costa

  3. Boa gostei, me já vinha com um código há bastante tempo, e sua dica me ajudou deixar o código enxuto e melhor legível

    Gostei

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s