es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

“Guardar como PDF y abrir en Adobe Reader como nueva pestaña”

Estoy experimentando el siguiente problema. Para guardar una hoja de Excel como PDF, estoy utilizando el siguiente código.

ActiveSheet.ExportAsFixedFormat _
    Type:=xlTypePDF, _
    Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, _
    OpenAfterPublish:=True

Esto funciona perfectamente bien la primera vez que ejecuto el comando. El archivo aparece en formato PDF y se muestra en Adobe Acrobat Reader DC. Pero cuando lo ejecuto de nuevo, sin cerrar el archivo PDF abierto, obtengo un error. Mientras siempre cierre el archivo PDF anterior, no hay ningún error. Estoy bastante seguro de que es posible abrir los siguientes archivos en nuevas pestañas dentro de Acrobat Reader sin obtener estos errores en VBA. ¿Alguien puede ayudarme aquí?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está relacionado con el intento de guardar un nuevo archivo PDF con el mismo nombre mientras el archivo anterior sigue abierto en Adobe Acrobat Reader DC. Para evitar este error, puede intentar modificar su código para incluir un nombre de archivo único cada vez que se guarda el PDF. Puede hacer esto agregando una marca de tiempo al nombre del archivo para asegurarse de que cada PDF se guarde con un nombre único. Además, puede modificar el código para verificar si el archivo PDF anterior todavía está abierto y, de ser así, solicitar al usuario que lo cierre antes de guardar el nuevo archivo. Aquí hay un ejemplo de cómo puede modificar su código:

    Dim myFile As String
    Dim currentTime As String
    
    ' Generar una marca de tiempo para incluir en el nombre del archivo
    currentTime = Format(Now(), "yyyymmdd_hhmmss")
    
    ' Especifique el nombre del archivo con la marca de tiempo actual
    myFile = "MyPDF_" & currentTime & ".pdf"
    
    ' Verifique si el archivo PDF anterior todavía está abierto
    If IsFileOpen(myFile) Then
        MsgBox "Por favor, cierre el archivo PDF anterior antes de guardar el nuevo archivo."
    Else
        ' Guarde el nuevo archivo PDF con el nombre único y ábralo en Adobe Acrobat Reader DC
        ActiveSheet.ExportAsFixedFormat _
            Type:=xlTypePDF, _
            Filename:=myFile, _
            Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, _
            IgnorePrintAreas:=False, _
            OpenAfterPublish:=True
    End If
    
    ' Use la siguiente función para verificar si un archivo está abierto
    Function IsFileOpen(fileName As String) As Boolean
        Dim ff As Long, ErrNo As Long
        On Error Resume Next
        ff = FreeFile()
        Open fileName For Binary Access Read Write Lock Read Write As #ff
        Close #ff
        ErrNo = Err
        On Error GoTo 0
        If ErrNo = 0 Then
            IsFileOpen = False
        Else
            IsFileOpen = True
        End If
    End Function
    

    Este código debería generar un nombre de archivo único cada vez que se guarda el PDF y solicitar al usuario que cierre el archivo PDF anterior antes de guardar el nuevo archivo. Esto debería evitar el error que está experimentando.

Comments are closed.