varios usando una seleccionar según segun registros otra listas listado lista hoja filas extraer extrae desplegables datos cumplen cumple criterio copiar condición condiciones condicion como celda buscav bdextraer excel vba excel-vba

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