2012-08-30 80 views
8

Quiero seleccionar el rango formateado de una hoja de Excel. Para definir la última y la primera fila utilizo las siguientes funciones:VBA: Selección del rango por variables

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

En el siguiente paso quiero seleccionar esta área: Fórmula debería tener este aspecto:

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

Sin embargo, esto es no funciona. Tal vez alguien tenga una idea de lo que está mal con eso. ¡Muchas gracias!

+0

¿Qué es exactamente lo que no funciona? Intenté llenar el rango de B2 a D4 con datos aleatorios y tu código seleccionó de A1 a D4. ¿No es eso lo que esperarías? – ssarabando

Respuesta

6

Si lo que desea es seleccionar el rango utilizado, utilice

ActiveSheet.UsedRange.Select 

Si desea seleccionar desde A1 hasta el final del rango utilizado, puede utilizar el método SpecialCells como esto

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

A veces Excel se confunde sobre cuál es la última celda. Nunca es un rango menor que el rango real utilizado, pero puede ser mayor si se eliminaron algunas celdas. Para evitar eso, puede usar Buscar y el comodín de asterisco para encontrar la última celda 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 

Por último, asegúrese de seleccionar solo si realmente lo necesita. La mayor parte de lo que necesita hacer en Excel VBA lo puede hacer directamente en el Rango en lugar de seleccionarlo primero. En lugar de

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

Puede

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

Te falta un paréntesis de cierre, es decir, no está cerrando Range().

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

Pero lo que realmente debería mirar a la otra respuesta de Dick Kusleika de las posibles alternativas que pueden servir mejor. Específicamente, ActiveSheet.UsedRange.Select que tiene el mismo resultado final que su código.

22

que registró una macro con 'referencias relativas' y esto es lo que tengo:

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

Esto es lo que pensé: Si la selección del rango está entre comillas, VBA realmente quiere una cadena y la interpreta las células a cabo de esto lo intenté lo siguiente:

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

Y funcionó :) es decir ..acaba de crear una cadena usando las variables, asegúrese de acótelo como las variables STRING y Excel leerá justo al lado de ella;)

Siguiendo a prueba y se encontró de trabajo:

Sub Macro04() 

Dim Copyrange As String 

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

que los está convirtiendo en una dirección pero las células (#, #) utiliza entradas de enteros no abordan entradas tan sólo tiene que utilizar lastRow = ActiveSheet.UsedRange.Rows.count y lastColumn = ActiveSheet.UsedRange.Columns.Count

1

he intentado usando:

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

donde lastRow y lastColumn son enteros, pero recibieron el error de tiempo de ejecución 1004. Estoy usando un VB anterior (6.5).

Lo que hizo el trabajo era utilizar el siguiente:

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

En realidad firstColumn debería leer lastRow ==> Range (Chr (64 + firstColumn) & firstRow & ":" & Chr (64 + lastColumn) & lastRow) .Selec –

7

me encontré con algo similar - que quería crear una serie sobre la base de algunas variables. Uso de la Hoja de trabajo. Las celdas no funcionaron directamente porque creo que los valores de la celda se pasaron a Rango.

Este trabajo, sin embargo lo hicieron:

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

que se encargó de convertir ubicación numérica de la célula para qué rango de espera, que es el formato A1.

+0

Gracias, he pasado toda la mañana tratando de encontrar la manera de solucionarlo un problema de sintaxis debido a esto. :) – Michelle

+0

¡Gracias, me salvaste el día! –

Cuestiones relacionadas