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 -
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
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
-
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