Archivado de hoja de Excel.

kknd04 -  
Cemoibob Mensajes publicados 1 Estado Miembro -
Hola,

Estoy buscando archivar una hoja en mi libro de Excel.

Para que entiendas, aquí está el contexto:

Tengo un libro para gestionar mi empresa, en este libro hay muchas hojas diversas, entre ellas una de Facturación.
Esta última me permite editar facturas.

Pero me gustaría que cuando haga clic en un botón, se copie en otro libro de Excel (no abierto) llamado: Facturación.xlsx.

Debe copiarse en una nueva hoja con el nombre de la celda "J4".

Ambos libros están en la misma carpeta, me gustaría evitar direcciones demasiado precisas y que la macro busque únicamente en la carpeta del libro a copiar.

Entonces, el camino esperado es:

Clic en el botón Archivar => copia de la hoja => búsqueda del libro Facturación en la misma carpeta => apertura (si es necesario) del libro Facturación => creación de una hoja => nombramiento de esta hoja con el nombre de la celda "J4" => pegado de la hoja copiada.

No estoy seguro de que esta sea la mejor solución, tal vez tengas algo mejor que proponerme.

Gracias de antemano por tu ayuda.

Configuración: Windows / Chrome 76.0.3809.100

5 respuestas

  1. ThauTheme Mensajes publicados 1564 Estado Miembro 160
     
    Hola Kknd, hola foro,

    Intenta así:
    Sub Macro1() Dim CS As Workbook 'declara la variable CS (Libro Fuente) Dim CA As String 'declara la variable CA (Ruta de Acceso) Dim OS As Worksheet 'declara la variable OS (Hoja Fuente) Dim CD As Workbook 'declara la variable CD (Libro Destino) Set CS = ThisWorkbook 'define el libro fuente CS CA = CS.Path & "/" 'define la ruta de acceso CA Set OS = CS.Worksheets("Facturación") 'define la hoja fuente OS On Error Resume Next 'gestión de errores (en caso de error pasa a la siguiente línea) Set CD = Workbooks("Facturación.xlsx") 'define el libro destino CD (genera un error si no está abierto) If Err <> 0 Then 'condición: si se ha generado un error Err.Clear 'elimina el error Set CD = Application.Workbooks.Open(CA & "Facturación.xlsx") 'define el libro destino CD (abriéndolo) End If 'fin de la condición On Error GoTo 0 'anula la gestión de errores OS.Copy after:=CD.Sheets(CD.Sheets.Count) 'copiamos la hoja fuente OS en la última posición del libro destino CD ActiveSheet.Name = ActiveSheet.Range("J4") 'renombra la hoja copiada End Sub 


    --
    Hasta luego,
    ThauTheme
    0
  2. kknd04
     
    Hola,

    Gracias por tu respuesta.

    Tengo un error, la penúltima línea según el depurador.

    El mensaje es:

    Error de ejecución '91'
    Variable objeto o variable de bloque With no definida

    No sé a qué se refiere.
    0
    1. ThauTheme Mensajes publicados 1564 Estado Miembro 160
       
      I tested quickly before sending you and I didn't have any error...
      If it’s line 18, maybe by replacing it with:
      Activesheet.Name = Range("J4")

      By the way, this kind of code is without safeguards. If J4 is empty or contains forbidden characters in the name of a tab, you will crash...

      The ideal if you want to conclude this project is to provide the file via a file hosting service like for example: https://www.cjoint.com/
      0
  3. kknd04
     
    El cambio no cambia nada.

    Pero creo que es la línea 17 y no 18 la que me muestra el depurador.
    De hecho, no conté la línea End Sub.

    Entonces, la línea es la siguiente:

    OS.Copy after:=CD.Sheets(CD.Sheets.Count) 'copia la hoja fuente OS en última posición del libro de destino CD

    Voy a ver si puedo enviar la carpeta como archivo adjunto

    Si tienes una idea mientras tanto...

    Gracias de antemano
    0
  4. kknd04
     
    Hola,

    Acabo de entender el problema, era muy simple, la extensión de la carpeta de facturación no era xlsx, sino xslm.

    Muchas gracias por tu ayuda.
    0
  5. Cemoibob Mensajes publicados 1 Estado Miembro
     
    Bonjour a tous
    Estoy buscando un código por favor para guardar a través de un botón en una hoja1 en formato pdf y con el nombre de una celda de otra hoja2 del mismo libro
    Gracias por su ayuda
    0