2012-08-30 24 views
8

Desidero selezionare l'intervallo formattato di un foglio Excel. per definire gli ultimi e prima fila io uso le seguenti funzioni:VBA: selezione intervallo per variabili

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

Nella fase successiva che voglio per selezionare questo settore: formula dovrebbe essere simile a questo:

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

Tuttavia, questo è non funziona. Forse qualcuno ha un'idea di cosa c'è che non va. Molte grazie!

+0

Che cosa esattamente non funziona? Ho provato a riempire l'intervallo da B2 a D4 con dati casuali e il tuo codice selezionato da A1 a D4. Non è quello che ti aspetteresti? – ssarabando

risposta

6

Se si desidera solo per selezionare l'intervallo utilizzato, utilizzare

ActiveSheet.UsedRange.Select 

Se si desidera selezionare dalla A1 alla fine del campo utilizzato, è possibile utilizzare il metodo SpecialCells come questo

With ActiveSheet 
    .Range(.Cells(1, 1), .Cells.SpecialCells(xlCellTypeLastCell)).Select 
End With 

A volte Excel viene confuso su quale è l'ultima cella. Non è mai un intervallo inferiore all'intervallo effettivo utilizzato, ma può essere maggiore se alcune celle sono state eliminate. Per evitare ciò, è possibile utilizzare Trova e il carattere jolly asterisco per trovare l'ultima cella reale.

Dim rLastCell As Range 

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

    .Range(.Cells(1, 1), rLastCell).Select 
End With 

Infine, assicurati di selezionare solo se è davvero necessario. La maggior parte di ciò che devi fare in Excel VBA puoi fare direttamente sull'intervallo piuttosto che selezionarlo per primo. Invece di

.Range(.Cells(1, 1), rLastCell).Select 
Selection.Font.Bold = True 

È possibile

.Range(.Cells(1,1), rLastCells).Font.Bold = True 
3

Stai manca una parentesi chiusa, vale a dire non stai chiudendo Range().

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

ma si dovrebbe davvero guardare l'altra risposta da Dick Kusleika per eventuali alternative che possono servire meglio. In particolare, ActiveSheet.UsedRange.Select che ha lo stesso risultato finale del codice.

22

ho registrato una macro con 'riferimenti relativi' e questo è quello che ho ottenuto:

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

Heres quello che ho pensato: Se la selezione range è tra virgolette, VBA vuole davvero una stringa e interpreta le cellule fuori di esso così ha provato il seguente:

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

E ha funzionato :) vale a dire ..basta creare una stringa utilizzando le variabili, assicurarsi di dimensionare come variabili STRING ed Excel leggerà destra fuori di esso;)

Following testato ed è risultato di lavoro:

Sub Macro04() 

Dim Copyrange As String 

Startrow = 1 
Lastrow = 11 
Let Copyrange = "A" & Startrow & ":" & "D" & Lastrow 
Range(Copyrange).Select 
End Sub 
1

li stanno trasformando in un indirizzo ma Cells (#, #) utilizza ingressi interi non affrontano ingressi in modo sufficiente utilizzare lastRow = ActiveSheet.UsedRange.Rows.count e lastColumn = ActiveSheet.UsedRange.Columns.Count

1

ho provato utilizzando:

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

dove lastRow e lastColumn sono numeri interi, ma ha ricevuto l'errore di runtime 1004. Sto utilizzando un VB precedente (6.5).

Cosa ha fatto il lavoro è stato quello di utilizzare il seguente:

Range(Chr(64 + firstColumn) & firstRow & ":" & Chr(64 + lastColumn) & firstColumn).Select. 
+1

In realtà firstColumn dovrebbe leggere lastRow ==> Range (Chr (64 + firstColumn) & firstRow & ":" & Chr (64 + lastColumn) e lastRow) .Selec –

7

mi sono imbattuto in qualcosa di simile - Ho voluto creare una serie basata su alcune variabili. L'utilizzo di Worksheet.Cells non ha funzionato direttamente poiché penso che i valori della cella siano stati passati a Range.

Questo ha funzionato però:

Range(Cells(1, 1).Address(), Cells(lastRow, lastColumn).Address()).Select 

che ha avuto cura di convertire posizione numero del suo cellulare a quello che si aspetta Range, che è il formato A1.

+0

Grazie, ho passato tutta la mattinata a cercare di capire come risolvere un problema di sintassi a causa di questo. :) – Michelle

+0

Grazie hai salvato la mia giornata! –

Problemi correlati