VBA Excel Imprimir con la impresora predeterminada

Resuelto
Mrfrize Mensajes publicados 197 Fecha de registro   Estado Miembro Última intervención   -  
Mrfrize Mensajes publicados 197 Fecha de registro   Estado Miembro Última intervención   -
Hola,

Llevo un día buscando cómo imprimir con la impresora predeterminada y no con la última seleccionada. He encontrado esto pero tengo un problema con GetProfileString, me aparece el error Compile error: Sub or Function not defined.

Si alguien tiene alguna idea de por qué no funciona o alguna otra método, estoy abierto a cualquier solución.

Gracias de antemano

Sub ImprimerSurDéfaut()

ActivePrinter = ImprimanteWindows
ActiveSheet.PrintOut

End Sub

Private Function ImprimanteWindows()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim s1 As String
Dim r As Long
Dim Buffer As String
Dim NomImpr As String
Dim Spool As String
Dim Port As String
Buffer = Space(8192)
r = GetProfileString("Windows", "Device", "", Buffer, Len(Buffer))
Debug.Print Buffer; i = InStr(Buffer, Chr(0))
If i > 0 Then
s1 = Left(Buffer, i - 1)
j = InStr(s1, ",")
k = InStr(j + 1, s1, ",")
NomImpr = Left(s1, j - 1)
If k > j Then
Spool = Mid(s1, j + 1, k - j - 1)
Port = Mid(s1, k + 1)
End If
Else

' no hay impresora predeterminada ?
NomImpr = ""
End If
ImprimanteWindows = NomImpr " on " & Port
End Function

Configuración: Windows XP / Firefox 9.0.1

1 respuesta

  1. Mrfrize Mensajes publicados 197 Fecha de registro   Estado Miembro Última intervención   6
     
    Aqui está la solución que encontré.

    Sub Macro1()

    Dim oShell As Object
    Dim sRegval, sdefault

    Set oShell = CreateObject("WScript.Shell")
    sRegval = "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device"
    sdefault = ""
    sdefault = oShell.RegRead(sRegval)
    sdefault = Left(sdefault, InStr(sdefault, ",") - 1)
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
    sdefault, Collate:=True

    End Sub
    1