VBA: seleccionar o intervalo por variáveis

quero seleccionar o intervalo formatado de uma folha do Excel. Para definir a última e a primeira linha, Uso as seguintes funções:

lastColumn = ActiveSheet.UsedRange.Column - 1 + ActiveSheet.UsedRange.Columns.Count
lastRow = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row

no próximo passo quero seleccionar esta área: A fórmula deve ser assim:

Range(cells(1, 1), cells(lastRow, lastColumn).Select
No entanto, isto não está a resultar. Talvez alguém tenha uma ideia do que há de errado com ele. Muito obrigado!

Author: Doug Glancy, 2012-08-30

6 answers

Gravei uma macro com 'referências relativas' e foi isto que consegui :

Range("F10").Select
ActiveCell.Offset(0, 3).Range("A1:D11").Select

Hera o que eu pensei : se a selecção do intervalo está entre aspas, o VBA realmente quer uma STRING e interpreta as células para fora dela, por isso tentou o seguinte:

Dim MyRange as String
MyRange = "A1:D11"
Range(MyRange).Select

E funcionou:) ie.. basta criar uma string usando as suas variáveis, certifique-se de dimensioná-la como uma string variáveis e o Excel irá ler imediatamente;)

Após o ensaio e o trabalho encontrado:

Sub Macro04()

Dim Copyrange As String

Startrow = 1
Lastrow = 11
Let Copyrange = "A" & Startrow & ":" & "D" & Lastrow
Range(Copyrange).Select
End Sub
 25
Author: Nikesh Rastogi, 2015-07-28 18:33:33
Encontrei algo semelhante, queria criar um intervalo baseado em algumas variáveis. Utilizar a folha de trabalho.As células não funcionaram diretamente desde que eu penso que os valores da célula foram passados para o intervalo. Mas isto funcionou.
Range(Cells(1, 1).Address(), Cells(lastRow, lastColumn).Address()).Select

Que teve o cuidado de converter a localização numérica da célula para o que o intervalo espera, que é o formato A1.

 8
Author: Daver, 2015-03-25 19:29:08

Se apenas quiser seleccionar o intervalo usado, use

ActiveSheet.UsedRange.Select

Se quiser Seleccionar de A1 até ao fim do intervalo usado, pode usar o método SpecialCells como este

With ActiveSheet
    .Range(.Cells(1, 1), .Cells.SpecialCells(xlCellTypeLastCell)).Select
End With
Às vezes, o Excel confunde-se com a última célula. Nunca é um intervalo menor do que o atual, mas pode ser maior se algumas células foram apagadas. Para evitar isso, você pode usar o Find e o asterisco wildcard para encontrar a última célula real.
Dim rLastCell As Range

With Sheet1
    Set rLastCell = .Cells.Find("*", .Cells(1, 1), xlValues, xlPart, , xlPrevious)

    .Range(.Cells(1, 1), rLastCell).Select
End With
Finalmente, certifica-te de que só estás a seleccionar se realmente for necessário. A maioria do que você precisa fazer no Excel VBA você pode fazer diretamente para o intervalo em vez de selecioná-lo primeiro. Em vez de
.Range(.Cells(1, 1), rLastCell).Select
Selection.Font.Bold = True

Podes

.Range(.Cells(1,1), rLastCells).Font.Bold = True
 6
Author: Dick Kusleika, 2012-08-30 14:58:56
Falta-te um parêntesis, ou seja, não estás a fechar. Tenta isto.Range(cells(1, 1), cells(lastRow, lastColumn)).Select Mas devias mesmo olhar para a outra resposta do Dick Kusleika para possíveis alternativas que te possam servir melhor. Especificamente, ActiveSheet.UsedRange.Select que tem o mesmo resultado final que o seu código.
 4
Author: Daniel, 2012-08-30 15:29:56

Está a transformá-los num endereço, mas as células(#,#) usam entradas inteiras e não entradas de endereços, por isso basta usar lastRow = ActiveSheet.UsedRange.Rows.count e lastColumn = ActiveSheet.UsedRange.Columns.Count

 1
Author: 273K Kool, 2013-06-28 11:31:18

Tentei usar:

Range(cells(1, 1), cells(lastRow, lastColumn)).Select 

Onde lastRow e lastColumn são inteiros, mas receberam um erro de tempo de execução 1004. Estou usando um VB mais velho (6.5).

O que funcionou foi usar o seguinte:

Range(Chr(64 + firstColumn) & firstRow & ":" & Chr(64 + lastColumn) & firstColumn).Select.  
 1
Author: Chris Bates, 2014-09-23 20:08:31