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.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      187
    • Comentarios
      97
    • Revisiones
      29

    Más información sobre "Un juego del Rabino en Excel"
    Última descarga
    Por pegones1

    2    1

  • Crear macros Excel

  • Mensajes

    • Estimados buenos días, Quisiera saber si me pueden brindar su soporte con lo siguiente. Tengo lo siguiente una data de FECHAS CON CANTIDADES y quisiera saber si hay alguna formula para poder contabilizar desde la última fecha cuando días son consecutivos, ejemplo si en una fila queda vacío porque no se repite y la fecha matriz es la ultima fecha quiere decir que no se repite y es 0.   DIAS CONSECUTIVOS.xlsx
    • Buenos días con todo, espero se encuentren bien de salud!. Favor quisiera ver si me pueden ayudar con lo siguiente. Tengo una data en excel con los siguiente criterios FECHAS DIFERENTES , CODIGO Y NOMBRE DEL PRODUCTO. Lo que quiero realizar es que si en la fecha 17-02  tienes cantidad x de códigos y si estos no se repite el día siguiente 18-02 que automáticamente se borre, esto con la finalidad de tener un control de a partir del 18 al 19  se repite 1 vez y no me considere 2 desde fecha 17-02  teniendo en cuenta que el producto en el 18-02 no aparece. Lo sombreado son los que se repiten .   TABLA ELIMINAR.xlsx
    • Vale mil gracias, en vdd se agradece todo el apoyo y comentarios
    • Hola nuevamente. Por eso la importancia de lo que mencionas tú como "ruta relativa". Tal cual comentas, y aún sin llegar a algunos detalles importantes para ayudarte, en realidad tal cual te comenté le día miércoles, pues sí podías hacer como comentabas, era cosa de obtener los Id de Windows (como tú los llamas) y la ruta de OneDrive en casa usuario y eso sí se puede obtener con VBA y luego pasarlo a PQ, pero medio que te cerraste en que "PQ no puede trabajar con rutas relativas", cosa cierta pero siempre hay formas. Si SAP puede o no guardar en OneDrive o SharePoint, pues si está mapeado en la PC ¡claro que se puede! Pero bueno, creo que si te es útil tu propia propuesta ¡avanza con eso!
    • Perdona @Abraham Valencia pero he estado liado estos días. En realidad todo el problema se reduce a estos dos problemas: Problema 1: El script que "fabrica" SAP y que luego "pego" en la macro, no es capaz de  guardar archivos en SharePoint. He estado buscando, y en realidad muchas personas tienen ese problema (no poder guardar un Excel en SAP a través de VBA). Eso muy probablemente sean problemas de permisos, que no puedo cambiar (no soy administrador de nada). Como no puedo solucionarlo así, paso al plan B, que es guardar en Excel que me genera SAP en el ordenador de cada usuario que ejecute la plantilla (y que sí está guardada en SharePoint), para después con PowerQuery llamar a ese Excel (el export). Para ello, pretendo guardar el export, en la ruta relativa "C:\..\..\..\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" donde los \..\..\..\ saltan las rutas personales de cada usuario (tipo C:\users\IDusuario\). Eso lo hace bien, y el archivo se guarda en la ruta de cada usuario que lo usa, pero surge el problema 2 Problema 2: PowerQuery no trabaja con rutas relativas del tipo  "C:\..\..\..\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" necesita que sea del tipo fija "C:\users\IDusuario\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" pero claro, IDusuario es diferente para cada usuario.   Pero escribiendo todo esto, creo que he dado con una posible solución, no grabar el export en una ruta de usuario, sino en una en la raiz de C:, que siempre será igual para todos los usuarios, del tipo C:\Sap\export.xlsx que seria igual en todos los ordenadores. Asi sí podría decirle a PowerQuery que vaya siempre a la ruta C:\Sap\ que existirá en todos los ordenadores. Mañana intentaré hacer pruebas, aunque mi solución ideal seria que se pudiera guardar en el SharePoint. Saludos.
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • 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.