Saltar al contenido

Consultar última fila con datos de otro libro sin seleccionarlo


Recommended Posts

publicado

Hola que tal, un saludo a todos.

Mi consulta creo que es muy sencilla (cuando se sabe claro), y es que tengo una hoja donde importo datos de otro libro pero que no conozco el nombre, ya que es un reporte del banco y cada vez me lo da de distinta forma.

La cuestión es que necesito saber cual es la última fila de ese libro con datos para poder copiarlas todas y pegarlas en el libro de destino, que es el que tiene la macro. Por razones de "afinamiento" del código no quiero seleccionarlo, sinó que, quiero consultar simplemente, porque me he dado cuenta que aunque se tenga el "Application.ScreenUpdating = False" da un pequeño pantallazo. La línea que he puesto me da error, en cambio, para cargar la variable con el nombre del libro no me da error.

Pongo parte  del código aquí. No subo ejemplo porque lo único que necesito es que alguien me corrija la línea esta.

Workbooks(OtroLibro).Activate ' <<<----Esta línea es la que quiero evitar.
           OtraHoja = ActiveSheet.Name
           UltimaFila = Workbooks(OtroLibro).Sheets(OtraHoja).Range("A" & Cells.Rows.Count).End(xlUp).Row '<<<---Esta es la que me da error si no está activo.
           Range("A5:A" & UltimaFila).Copy

 

Insisto que es parte del código que mas arriba entro sin problemas para llenar la variable "OtroLibro"

Muchas gracias por vuestra atención y saludos.

 

publicado

A priori yo cambiaría

UltimaFila = Workbooks(OtroLibro).Sheets(OtraHoja).Range("A" & Cells.Rows.Count).End(xlUp).Row 

por esta otra

UltimaFila = Workbooks(OtroLibro).Sheets(OtraHoja).Range("A1048576").End(xlUp).Row 

Aunque coincido con Macro Antonio que sin todo el contexto es difícil deducir que puede ser...

Saludos

publicado

Gracias por la rapidez en la respuesta.

Quizás mi error ha sido de cálculo en lo de solo publicar el trocito de código.

Sub ImportING()
Dim PrimeraFila As Integer, UltimaFila As Integer, FilaOtroLibro As Integer
Dim NumCuentaOrigen As String, NumCuentaDestino As String, OtraHoja As String, Entidad As String
Dim OtroLibro As String

Application.ScreenUpdating = False

'Verificamos si el libro es correcto
    OtroLibro = Workbooks(2).Name
    NumCuentaDestino = Sheets("Parámetros").Range("C2").Value
    NumCuentaOrigen = Workbooks(OtroLibro).Sheets(1).Cells(1, 2).Value '<<<--Aquí entra sin problemas

    If NumCuentaDestino <> NumCuentaOrigen Then
        MsgBox "EL LIBRO ABIERTO NO ES DE ING", vbExclamation, "IMPORTACIÓN DATOS"
    Else

'Verifica última fila con datos de esta hoja
    UltimaFila = 1 + Range("A" & Rows.Count).End(xlUp).Row
          
       'Copia y pega fechas
           Workbooks(OtroLibro).Activate ' <<<----Esta línea es la que quiero evitar.
           OtraHoja = ActiveSheet.Name
           FilaOtroLibro = Workbooks(OtroLibro).Sheets(OtraHoja).Range("A" & Cells.Rows.Count).End(xlUp).Row '<<<---Esta es la que me da error si no está activo.
           Range("A5:A" & FilaOtroLibro).Copy
           ThisWorkbook.Activate
           Range("A" & UltimaFila).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
               :=False, Transpose:=False
              
       'Copia y pega Descripción
           Workbooks(OtroLibro).Worksheets(OtraHoja).Range("D5:D" & FilaOtroLibro).Copy
           Range("C" & UltimaFila).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
               :=False, Transpose:=False
              
       'Copia y pega Importe
           Workbooks(OtroLibro).Worksheets(OtraHoja).Range("I5:I" & FilaOtroLibro).Copy
           Range("D" & UltimaFila).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
               :=False, Transpose:=False
              
       'Añade Entidad en columna E
            PrimeraFila = UltimaFila
            UltimaFila = Range("A" & Rows.Count).End(xlUp).Row
            Entidad = Sheets("Parámetros").Range("B2").Value
              
            For x = PrimeraFila To UltimaFila
                Cells(x, 5) = Entidad
            Next x
           
       'Autoajuste filas
           Range(Cells(PrimeraFila, 3), Cells(UltimaFila, 3)).Select
          
           With Selection
               .WrapText = True
           End With
          
        'Importes a positivos
           Cells(3, 4).Select
           Call NegativoPositivo
    End If
 

Application.ScreenUpdating = True
Application.CutCopyMode = False
Cells(4, 1).Select
End Sub

 

He de aclarar que tal cual está funciona pero me gustaría darle un "toque" más profesional.

Gracias

publicado

Prueba a ver si es esto.

Fíjate que no es necesario activar ni libros, ni hojas, ni rangos para copiar y pegar.

 

Sub ImportING()
   Dim PrimeraFila As Integer, UltimaFila As Integer, FilaOtroLibro As Integer
   Dim NumCuentaOrigen As String, NumCuentaDestino As String, Entidad As String
   Dim HojaOrigen As Worksheet
   Dim Parámetros As Worksheet
   Dim HojaDestino As Worksheet
   
   'Asignamos valores a las variables
   Set HojaDestino = Workbooks(1).ActiveSheet
   Set Parámetros = Workbooks(1).Sheets("Parámetros")
   Set HojaOrigen = Workbooks(2).ActiveSheet

   'Verificamos si el libro es correcto
   Application.ScreenUpdating = False
   NumCuentaDestino = Parámetros.Range("C2").Value
   NumCuentaOrigen = HojaOrigen.Range("B1").Value '<<<--Aquí entra sin problemas
   
   If NumCuentaDestino <> NumCuentaOrigen Then
       MsgBox "EL LIBRO ABIERTO NO ES DE ING", vbExclamation, "IMPORTACIÓN DATOS"
   Else

   'Verifica última fila con datos de esta hoja
   UltimaFila = 1 + HojaDestino.Range("A" & Rows.Count).End(xlUp).Row
      
   'Copia y pega fechas
       FilaOtroLibro = HojaOrigen.Range("A" & Cells.Rows.Count).End(xlUp).Row
       HojaOrigen.Range("A5:A" & FilaOtroLibro).Copy
       HojaDestino.Range("A" & UltimaFila).PasteSpecial xlPasteValues
          
   'Copia y pega Descripción
       HojaOrigen.Range("D5:D" & FilaOtroLibro).Copy
       HojaDestino.Range("C" & UltimaFila).PasteSpecial xlPasteValues
          
   'Copia y pega Importe
       HojaOrigen.Range("I5:I" & FilaOtroLibro).Copy
       HojaDestino.Range("D" & UltimaFila).PasteSpecial xlPasteValues
          
   'Añade Entidad en columna E
        PrimeraFila = UltimaFila
        UltimaFila = HojaDestino.Range("A" & Rows.Count).End(xlUp).Row
        Entidad = Parámetros.Range("B2").Value
        For x = PrimeraFila To UltimaFila
            HojaDestino.Cells(x, 5) = Entidad
        Next x
       
   'Autoajuste filas
       HojaDestino.Range(Cells(PrimeraFila, 3), Cells(UltimaFila, 3)).WrapText = True
      
    'Importes a positivos
       HojaDestino.Cells(3, 4).Select
       Call NegativoPositivo
   End If

   Application.ScreenUpdating = True
   Application.CutCopyMode = False
   HojaDestino.Cells(4, 1).Select
End Sub


 

publicado

Gracias Macro Antonio, precisamente esa es la idea, el no activar nadq y así evitar esos pequeños pantallazos que salen cuqndo se cambia de hoja.

Ahora estoy en el móvil, cuqndo llegue a casa le hecho un vistazo, pero tiene buena pinta, veo que le has puesto a las variables el Set que no lo había usado nunca.

Comento luego

publicado

Hola que tal. Ya lo he probado, me sigue dando error en la misma línea. Si no está la hoja activa del libro origen da error.

Subo ejemplo, que el tema veo que no es tan sencillo como yo creí en un primer momento.

Gracias.

Ejemplo.rar

publicado

No he podido probar porqué el archivo origen me da error de lectura, ya que no puede abrir archivos .xls 64 bits.

Si no se soluciona con lo siguiente, vuélvelo a subir como xlsx.

De todas formas creo que los tiros van por aquí:

Sustituye:

FilaOtroLibro = HojaOrigen.Range("A" & Cells.Rows.Count).End(xlUp).Row '<<<<<-------AQUI EL ERROR <<<<<<<<<<<<<<

 

Por:

FilaOtroLibro = HojaOrigen.Range("A" & Rows.Count).End(xlUp).Row 

 

publicado

Hola. Macro Antonio, era eso que tú comentabas, la extensión del archivo. Es un archivo que te genera una entidad bancaria y tal cual me daba error, si le cambio a .xlsx ya no ha dado error.

La línea que me has mandado funciona en ambos casos, no me ha hecho falta cambiarla.

Como siempre, mil gracias.

TEMA SOLUCIONADO

  • Silvia bloqueó este tema

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.