Macros excel. Como poner una ruta que funcione en diferentes PC

Me gustaría que alguien me pudiera ayudar en las siguientes dudas:
Estoy creando un excel que posteriormente será remitido a otras personas para que le den uso en diferentes PCs. Este excel consta de 4 hojas, de las cuales 2 no son visibles para el usuario final y en las que se encuentran todas las fórmulas que generan un informe final.
En la hoja 1 que es visible para el usuario final se encuentran una serie de casillas para rellenar por el usuario y 4 botones desde los que se ejecutan las diferentes macros. Estas son: GRABAR INFORME (actualiza las tablas dinámicas de forma oculta sin que estas sean visibles para el usuario), VISTA PREVIA DEL INFORME ( salta directamente a la hoja donde esta el informe), GENERAR INFORME (convierte en PDF el informe y lo guarda) y ENVIAR INFORME POR MAIL (hace un attachment del pdf a un correo de outlook, con el cuerpo del mensaje personalizado y a una dirección de correo que toma de la celda B8 de la hoja 1).
En mi PC me funciona todo correctamente, pero cuando he mandado una primera prueba al usuario final no le genera el informe ni se lo manda por mail.
Mi dudas son:
1 - Como tengo que hacer la macro del botón GENERAR INFORME para que la ruta en la que crea y guarda el PDF funcione en cualquier equipo (se usara en diferentes equipos) o en su defecto permita elegir donde guardar el PDF y le de el nombre Informe seguido del nombre y apellidos de las casillas B4 y B5 de la hoja1 (nombre y apellidos)
2- Como tengo que hacer la macro del botón ENVIAR INFORME POR MAIL para que localice ese archivo y lo adjunte a un correo (no quiero que lo envíe, ¿solo qué genere el correo electrónico y sea el usuario el que de a enviar)?
Creo que el error esta en las rutas que tengo puestas y que solo funcionan en mi pc, además cuando doy a cancelar la ejecución de la macro la hace igualmente (genera el archivo y lo prepara para mandar por correo). Esto es lo que tengo puesto ahora mismo:
Para generar el Informe:
Sub GenerarInforme()
'
' GenerarInforme Macro
' Generar Pdf de la hoja Informe
'
'
Sheets("INFORME").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Users\hp8000\desktop\informe" & Trim(InputBox("informe")) & ".pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
True
End Sub
Para que lo mande por correo:
Sheets("hoja1").Select
Dim NombreArchivo As String
NombreArchivo = Range("B4").Value
Sheets("INFORME").Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
ruta & "\informe" & Trim(InputBox("informe")) & ".pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
strReportName = ruta & "\informe.xlsm"
Dim objOutlook As Object
'Dim objMail As Object
Dim objOutlookAttach As Object
Set objOutlook = CreateObject("Outlook.Application")
Set objMail = objOutlook.CreateItem(olMailItem)
Set objOutlookAttach = objOutlook.CreateItem(olAttachMents)
With objMail
Sheets("hoja1").Select
.To = Hoja1.Range("B8").Value
.Subject = "Informe"
.Body = "Estimado Antonio, adjunto te mando…"
.Attachments.Add ruta & "\informe.pdf"
.display
End With
Set objMail = Nothing
Set objOutlook = Nothing
End Sub

1 respuesta

Respuesta
3

H o l a:

Te anexo las 2 macros actualizadas, para que formen el nombre con lo que tienes en las celdas B4 y B5 de la hoja1.

Sub GenerarInforme() 'Generar Pdf de la hoja Informe
'Act.Por.Dante Amor
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("INFORME")
    ruta = ThisWorkbook.Path & "\"
    nombre = "informe " & h1.[B4] & " " & h1.[B5] & ".pdf"
    h2.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=ruta & nombre, _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=False
End Sub

La ruta siempre será la carpeta en donde tienen guardado el archivo, así que no importa en donde guarden el archivo, la macro siempre tomará esa ruta.

Sub EnviarInforme()
'Act.Por.Dante Amor
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("INFORME")
    ruta = ThisWorkbook.Path & "\"
    nombre = "informe " & h1.[B4] & " " & h1.[B5] & ".pdf"
    h2.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=ruta & nombre, _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=False
    '
    Dim objMail As Object
    Set objMail = CreateObject("Outlook.Application").CreateItem(olMailItem)
    With objMail
        .To = h1.Range("B8").Value
        .Subject = "Informe"
        .Body = "Estimado Antonio, adjunto te mando…"
        .Attachments.Add ruta & nombre
        .Display
    End With
    Set objMail = Nothing
End Sub

La macro de EnviarInforme, siempre deberá generar el archivo, de esa forma cuando se envíe la macro sabe en dónde y cómo se llama el archivo.

Ambas macros utilizan lo mismo para generar el archivo. La ruta y el nombre serán datos fijos que el usuario no captura.


Si quieres elegir la carpeta y escribir el nombre del archivo:

Sub GenerarInforme2() 'Generar Pdf de la hoja Informe
'Act.Por.Dante Amor
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("INFORME")
    ruta = ThisWorkbook.Path & "\"
    nombre = "informe " & h1.[B4] & " " & h1.[B5] & ".pdf"
    '
    With Application.FileDialog(msoFileDialogSaveAs)
        .Title = "Guardar archivo como"
        .AllowMultiSelect = False
        .InitialFileName = ruta & nombre
        .FilterIndex = 25
        If .Show Then
            march = .SelectedItems(1)
            h2.ExportAsFixedFormat Type:=xlTypePDF, _
                Filename:=march, _
                Quality:=xlQualityStandard, IncludeDocProperties:=True, _
                IgnorePrintAreas:=False, OpenAfterPublish:=False
        End If
    End With
End Sub

Sub EnviarInforme2()
'Act.Por.Dante Amor
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("INFORME")
    ruta = ThisWorkbook.Path & "\"
    nombre = "informe " & h1.[B4] & " " & h1.[B5] & ".pdf"
    '
    With Application.FileDialog(msoFileDialogSaveAs)
        .Title = "Guardar archivo como"
        .AllowMultiSelect = False
        .InitialFileName = ruta & nombre
        .FilterIndex = 25
        If .Show Then
            march = .SelectedItems(1)
            h2.ExportAsFixedFormat Type:=xlTypePDF, _
                Filename:=march, _
                Quality:=xlQualityStandard, IncludeDocProperties:=True, _
                IgnorePrintAreas:=False, OpenAfterPublish:=False
            '
            Dim objMail As Object
            Set objMail = CreateObject("Outlook.Application").CreateItem(olMailItem)
            With objMail
                .To = h1.Range("B8").Value
                .Subject = "Informe"
                .Body = "Estimado Antonio, adjunto te mando…"
                .Attachments.Add march
                .Display
            End With
            Set objMail = Nothing
        End If
    End With
End Sub
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas