Tuesday, January 10, 2006

Get the name of the default printer using VBA

Here is one way
Public Declare Function GetProfileString Lib "kernel32" _
        Alias "GetProfileStringA" _
        (ByVal lpAppName As String, _
         ByVal lpKeyName As String, _
         ByVal lpDefault As String, _
         ByVal lpReturnedString As String, _
         ByVal nSize As Long) As Long

Public Function DefaultPrinter() As String
  Dim strReturn As String
  Dim intReturn As Integer
  strReturn = Space(255)
  intReturn = GetProfileString("Windows", ByVal "device", "", _
  strReturn, Len(strReturn))
  If intReturn Then
    strReturn = UCase(Left(strReturn, InStr(strReturn, ",") - 1))
  End If
  DefaultPrinter = strReturn
End Function

3 comments:

  1. Restored comment
    by Anonymous
    Works like a charm! Thanks!

    ReplyDelete
  2. Works with no problems.

    Do you have code for setting default printer using VBA

    ReplyDelete
  3. In for example Excel VBA you can use Application.ActivePrinter
    You can also use WScript object in VBA like this:
    Dim objPrinter
    Set objPrinter = CreateObject("WScript.Network")
    objPrinter.SetDefaultPrinter "\\ServerName\PrinterName"

    ReplyDelete