Simplificar una macro en excel usando variables

Tengo una macro muy rudimentaria que me gustaría simplificar usando variables .

La macro la desarrollo en un fichero externo llamado Proceso y los pasos son los siguientes :

- Abre el fichero Base donde tengo un formato concreto

- abre el fichero Master donde tengo una relación de notas de entrega (tab ALL) y un resumen con unos datos (tab summary)

- usa linea a linea la info en la tab summary para copiar el rango que se especifica en la columna F en el fichero Base como valor , después salva el resultado de la copia en Base como PDF dando como nombre el dato en la columna E tab summary del file master

un ejemplo de la secuencia:

-copiaría rango A1:E25 tab ALL fichero Master en el fichero Base como valor empezando en A1

-Salvaría ese dato ahora en fichero Base como 1.pdf

-Borraría solo el contenido del A1:E25 del fichero base manteniendo los formatos (importante mantener la imagen)

-copiaría rango A26:E50 tab ALL fichero Master en el fichero Base como valor empezando de nuevo en A1
-Salvaría ese dato ahora en fichero Base como 2.pdf
-Borraría solo el contenido del A1:E25 del fichero base manteniendo los formatos y asi sucesivamente

Todo eso que yo tengo hecho de una manera rupestre , se puede hacer creando una macro con variables de tal forma que la macro cree todos los ficheros pdf para aquellas notas que tengan importe y pare cuando el importe (columna C fichero Master tab summary) sea 0 pelotero???? Si es asi... Me podéis ayudar?????

En este link tenéis un ejemplo de los ficheros base y Master. Muchas gracias por vuestra ayuda

<a>https://www.dropbox.com/sh/eibmf3ta89a1a1f/Vv93rctPfy?n=46680940</a>

1 Respuesta

Respuesta
1

Con gusto te ayudo, dime la macro tiene que leer la hoja "Summary" o puede ser que lea directamente la hoja "ALL" y de ahí genere los PDF

Todas las notas están en la hoja "ALL"

no tengo ningún problema en que lea de la hoja 'ALL' .Solo hay que tener en cuenta que la longitud de los datos en la hoja 'ALL' puede ser variable. En el ejemplo que te envíe creo que hay 5 notas de entrega con datos y una sexta sin datos pero en otras ocasiones puede haber 15 con datos. La hoja 'Summary' me dice de una forma rápida cuantas tengo pero para la macro puedes usar la que quieras. El rango es siempre el mismo , 25 lineas por nota de entrega y 5 columnas

Millones de gracias !!!!

Puedes probar la siguiente macro.

Sigue las Instrucciones para un botón y ejecutar la macro
1. Abre tu libro de Excel y en tu hoja "ALL"
2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
3. En el menú elige Insertar / Módulo
4. En el panel del lado derecho copia la macro
5. Ahora para crear un botón, puedes hacer lo siguiente:
6. Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
7. Elige una imagen y con el Mouse, dentro de tu hoja, presiona click y arrastra el Mouse para hacer grande la imagen.
8. Una vez que insertaste la imagen en tu hoja, dale click derecho dentro de la imagen y selecciona Asignar macro / Selecciona: guardarpdf
9. Aceptar.
10. Para ejecutarla dale click a la imagen.

Sub guardarpdf()
'por.dam
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set h1 = Workbooks(ThisWorkbook.Name).Sheets("ALL")
ruta = ThisWorkbook.Path & "\"
h1.Activate
For i = 4 To Range("D" & Rows.Count).End(xlUp).Row
    Workbooks.Open Filename:=ruta & "base.xlsx"
    Set h2 = Workbooks(ActiveWorkbook.Name).Sheets("hoja1")
    h1.Activate
    Range("A" & i & ":D" & i + 20).Select
    Selection.Copy
    h2.Activate
    h2.Range("A4").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Nuevonombre = ruta & Range("D10")
    'ActiveWorkbook.SaveAs Filename:=ruta & Range("D10") & ".xlsx", _
        FileFormat:=51, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Nuevonombre, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=True
    ActiveWorkbook.Close
    i = i + 24
Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
MsgBox "Proceso de copiado de notas Terminado", vbInformation, "NOTAS"
End Sub

Yo no tengo la librería para guardar archivos en pdf, prueba cómo te resulta con la macro , si tienes problemas me avisas y realizo los ajustes.

Saludos. Dam
Si es lo que necesitas.

Genial !!!!

he hecho algunos ajustes a la hoja base y he cambiado la macro. Funciona genial .

Por cierto, he cambiado la sentencia de PDF a OpenAfterPublish:=False para que no abra tras la publicación.

Muchísimas gracias de nuevo. Eres genail !!!!!!!!!!!!!!!!!!!!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas