/ / Excel VBA: Resultado inesperado com Range and Cells - excel-vba, intervalo, células, vba, excel

Excel VBA: Resultado inesperado com intervalo e células - excel-vba, intervalo, células, vba, excel

Eu estou usando o Excel 2013. No meu código eu me refiro eu tenho que manipular dados típicos em uma planilha do Excel. Por exemplo:

    **Names**
Ann
Jim
Tom
Liz

Eu não quero incluir um +1 no meu código ao se referir a células específicas dentro do meu conjunto de dados.

Ou seja, para obter "Ann" eu prefiro usar

Cells(1,1)

do que

Cells (1+1,1)

Então eu defino um intervalo excluindo os cabeçalhos:

Set R = Range(Cells(2,1),Cells(5,1)

E agora esta afirmação se refere a "Ann"

R.Cells(1,1)

Em seguida, quero me referir a um "subrange" dentro do meu alcance R:

    R.Range(R.Cells(2,1), R.Cells(3,1))

Mas, surpreendentemente, agora, em vez do esperado "Jim" e "Tom" (segunda a terceira células da minha gama R), Recebo "Ann" e "Jim" (segundo a terceiro no Folha de Excel).

Alguém pode fornecer algumas dicas sobre o que estou perdendo aqui?

obrigado

Respostas:

1 para resposta № 1

Este é um caso clássico de não passar o parentesco herdado. o Cells dentro R.Range(Cells(2,1), Cells(3,1)) não tenho idéia de que eles pertencem a R então eles padrão para o Propriedade do ActiveSheet que pode ou não ser a planilha que R está ligado (mais problemas com um Subscrito fora do intervalo erro).

with R
debug.print .Range(.Cells(2,1), .Cells(3,1)).address
end with

o Com ... End With statement é a maneira mais fácil de passar o parentesco herdado. Observe que .Cells e não Cells é usado para passar a referência. Também poderia ser escrito como,

    debug.print R.Range(R.Cells(2,1), R.Cells(3,1)).address

Sub amostra:

Sub Unexpected_result_with_Range_and_Cells()
Dim R As Range

Set R = Range(Cells(2, 1), Cells(5, 1))
Debug.Print R.Address
Debug.Print R.Cells(1, 1).Value

With R
Debug.Print .Range(.Cells(2, 1), .Cells(3, 1)).Address
Debug.Print .Cells(2, 1).Value
Debug.Print .Cells(3, 1).Value
End With

End Sub

Resultados da janela Imediata do VBE:

$A$2:$A$5
Ann
$A$4:$A$5
Jim
Tom