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.