Podríamos decir que existen dos formas de imprimir un "UserForm" de VBA:
1- Usar el método "PrintForm". La desventaja, para algunos, de dicho método es de que actúa sobre la impresora predeterminada del sistema operativo y por tanto o tendrías que tener una que "imprima" en PDF o cambiar, de ser otra, la predeterminada (ojo, no la impresora a usar sino la predeterminada) a una de PDF y quizá volver a colocar la predeterminada que tenías. Ah todo eso tiene que ser a través de algún evento de algún objeto del "UserForm":
Private Sub CommandButton3_Click()
Dim WshNetwork As Object
Dim ImpresoraActiva As String
Set WshNetwork = CreateObject("WScript.Network")
Let ImpresoraActiva = Left(ActivePrinter, Len(ActivePrinter) - 9)
WshNetwork.SetDefaultPrinter "Adobe PDF"
Me.PrintForm
WshNetwork.SetDefaultPrinter ImpresoraActiva
End Sub
2- La segunda forma sería recurrir a las funciones de la API de Windows, realizamos una captura de pantalla del "UserForm", la pegamos en una hoja de Excel y, con el método de exportar PDF del Excel, convertimos dicha imagen en PDF. Ah, también tiene que ser en un evento de algún objeto del "USerForm":
#If VBA7 And Win64 Then
Private Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
#Else
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
#End If
Const KEYEVENTF_EXTENDEDKEY = &H1
Const KEYEVENTF_KEYUP = &H2
Const VK_SNAPSHOT = &H2C
Const VK_MENU = &H12
Private Sub CommandButton2_Click()
Dim Ruta As String
keybd_event VK_MENU, 0, KEYEVENTF_EXTENDEDKEY, 0
keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY, 0
keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY + KEYEVENTF_KEYUP, 0
keybd_event VK_MENU, 0, KEYEVENTF_EXTENDEDKEY + KEYEVENTF_KEYUP, 0
DoEvents
ThisWorkbook.Worksheets.Add After:=Worksheets(Worksheets.Count)
Range("A1").Select
ActiveSheet.Paste
Let Ruta = ActiveWorkbook.Path & "\" & "UserForm.pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Ruta, _
Quality:=xlQualityStandard, IncludeDocProperties:=False, _
IgnorePrintAreas:=False, OpenAfterPublish:=False
Application.DisplayAlerts = False
Worksheets(Worksheets.Count).Delete
Application.DisplayAlerts = True
End Sub
Espero se entienda
Salu2
Abraham Valencia