usando - Excel VBA, obteniendo rango de una hoja inactiva
extraer datos segun criterio excel (3)
Esto servirá, no me gusta usar (xlDown) en caso de que una celda esté vacía.
Dim lRow As Long
lRow = Sheets("Temp").Cells(Cells.Rows.Count, "A").End(xlUp).Row
With Sheets("Temp")
.Range("A1:A" & lRow).Copy Sheets("Overview").Range("C40")
End With
O si solo quieres usar Columnas ...
Sheets("Temp").Columns(1).SpecialCells(xlCellTypeConstants).Copy Destination:=Sheets("Overview").Range("C40")
Este script funciona bien cuando estoy viendo la hoja "Temp". Pero cuando estoy en otra hoja, el comando de copia falla. Da un "error definido por la aplicación o definido por el objeto"
Sheets("Temp").Range(Cells(1), Cells(1).End(xlDown)).Copy
Sheets("Overview").Range("C40").PasteSpecial
Puedo usar este script en su lugar, pero luego tengo problemas para pegarlo
Sheets("Temp").Columns(1).Copy
Sheets("Overview").Range("C40").PasteSpecial
- No quiero activar la hoja "Temp" para obtener esto
Que más puedo hacer
Me encontré con un problema como este: estaba intentando buscar en una hoja de trabajo separada para ver si el color de una celda coincidía con el color de una celda en una lista y devolver un valor de cadena: si está utilizando .Cells (fila, columna ), solo necesita esto: Hojas ("nombre de hoja"). Celdas (fila, columna) para hacer referencia a ese rango de celdas.
Estaba recorriendo un bloque de 500 celdas y funciona sorprendentemente rápido para mí.
No he intentado esto con .Copia, pero supongo que funcionaría de la misma manera.
Su problema es que debido a que las referencias de Cell
dentro del Range
no están calificadas, se refieren al ActiveSheet
predeterminado. Entonces tu código realmente está diciendo
Sheets("Temp").Range(ActiveSheet.Cells(1), ActiveSheet.Cells(1).End(xlDown)).Copy
Sheets("Overview").Range("C40").PasteSpecial
Aquí hay una versión mejor formada
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = ActiveWorkbook.Sheets("Temp")
Set sh2 = ActiveWorkbook.Sheets("Overview")
With sh1
.Range(.Cells(1,1), .Cells(1,1).End(xlDown)).Copy
End With
sh2.Range("C40").PasteSpecial