GetPrinterApi returns 0. Please help.

Type DEVMODE
    dmDeviceName As String * 32
    dmSpecVersion As Integer
    dmDriverVersion As Integer
    dmSize As Integer
    dmDriverExtra As Integer
    dmFields As Long
    dmOrientation As Integer
    dmPaperSize As Integer
    dmPaperLength As Integer
    dmPaperWidth As Integer
    dmScale As Integer
    dmCopies As Integer
    dmDefaultSource As Integer
    dmPrintQuality As Integer
    dmColor As Integer
    dmDuplex As Integer
    dmYResolution As Integer
    dmTTOption As Integer
    dmCollate As Integer
    dmFormName As String * 32
    dmUnusedPadding As Integer
    dmBitsPerPixel As Integer
    dmPelsWidth As Long
    dmPelsHeight As Long
    dmDisplayFlags As Long
    dmDisplayFrequency As Long
End Type

Public Enum printer_status
    PRINTER_STATUS_READY = &H0
    PRINTER_STATUS_PAUSED = &H1
    PRINTER_STATUS_ERROR = &H2
    PRINTER_STATUS_PENDING_DELETION = &H4
    PRINTER_STATUS_PAPER_JAM = &H8
    PRINTER_STATUS_PAPER_OUT = &H10
    PRINTER_STATUS_MANUAL_FEED = &H20
    PRINTER_STATUS_PAPER_PROBLEM = &H40
    PRINTER_STATUS_OFFLINE = &H80
    PRINTER_STATUS_IO_ACTIVE = &H100
    PRINTER_STATUS_BUSY = &H200
    PRINTER_STATUS_PRINTING = &H400
    PRINTER_STATUS_OUTPUT_BIN_FULL = &H800
    PRINTER_STATUS_NOT_AVAILABLE = &H1000
    PRINTER_STATUS_WAITING = &H2000
    PRINTER_STATUS_PROCESSING = &H4000
    PRINTER_STATUS_INITIALIZING = &H8000
    PRINTER_STATUS_WARMING_UP = &H10000
    PRINTER_STATUS_TONER_LOW = &H20000
    PRINTER_STATUS_NO_TONER = &H40000
    PRINTER_STATUS_PAGE_PUNT = &H80000
    PRINTER_STATUS_USER_INTERVENTION = &H100000
    PRINTER_STATUS_OUT_OF_MEMORY = &H200000
    PRINTER_STATUS_DOOR_OPEN = &H400000
    PRINTER_STATUS_SERVER_UNKNOWN = &H800000
    PRINTER_STATUS_POWER_SAVE = &H1000000
End Enum

Private Type PRINTER_INFO_2
    pServerName As String
    pPrinterName As String
    pShareName As String
    pPortName As String
    pDriverName As String
    pComment As String
    pLocation As String
    pDevMode As Long
    pSepFile As String
    pPrintProcessor As String
    pDatatype As String
    pParameters As String
    pSecurityDescriptor As Long
    Attributes As Long
    Priority As Long
    DefaultPriority As Long
    StartTime As Long
    UntilTime As Long
    Status As Long
    JobsCount As Long
    AveragePPM As Long
End Type

Private Type PRINTER_DEFAULTS
    pDatatype As String
    pDevMode As DEVMODE
    DesiredAccess As Long
End Type

Private Declare Function GetProfileStringA Lib "kernel32" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long) As Long

Private Declare Function GetPrinterApi Lib "winspool.drv" Alias "GetPrinterA" (ByVal hPrinter As Long, ByVal level As Long, Buffer As Long, ByVal pbSize As Long, pbSizeNeeded As Long) As Long

Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, pDefault As PRINTER_DEFAULTS) As Long

Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Private Declare Function IsBadStringPtrByLong Lib "kernel32" Alias "IsBadStringPtrA" (ByVal lpsz As Long, ByVal ucchMax As Long) As Long

Public Function IsDefaultPrinterReady(Stat_type As String) As Boolean
    Dim lret As Long
    Dim pDef As PRINTER_DEFAULTS
    Dim mPRINTER_INFO_2 As PRINTER_INFO_2
    Dim mhPrinter As Long
    Dim SizeNeeded As Long
    Dim Buffer() As Long
    Dim Idx As Long

    lret = OpenPrinter(DefaultPrinterName, mhPrinter, pDef)

    ReDim Preserve Buffer(0 To 1) As Long
    lret = GetPrinterApi(mhPrinter, Idx, Buffer(0), UBound(Buffer), SizeNeeded)
    ReDim Preserve Buffer(0 To (SizeNeeded / 4) + 3) As Long
    lret = GetPrinterApi(mhPrinter, Idx, Buffer(0), UBound(Buffer) * 4, SizeNeeded)

    On Error GoTo NA
    With mPRINTER_INFO_2
        .pServerName = StringFromPointer(Buffer(0), 1024)
        .pPrinterName = StringFromPointer(Buffer(1), 1024)
        .pShareName = StringFromPointer(Buffer(2), 1024)
        .pPortName = StringFromPointer(Buffer(3), 1024)
        .pDriverName = StringFromPointer(Buffer(4), 1024)
        .pComment = StringFromPointer(Buffer(5), 1024)
        .pLocation = StringFromPointer(Buffer(6), 1024)
        .pDevMode = Buffer(7)
        .pSepFile = StringFromPointer(Buffer(8), 1024)
        .pPrintProcessor = StringFromPointer(Buffer(9), 1024)
        .pDatatype = StringFromPointer(Buffer(10), 1024)
        .pParameters = StringFromPointer(Buffer(11), 1024)
        .pSecurityDescriptor = Buffer(12)
        .Attributes = Buffer(13)
        .Priority = Buffer(14)
        .DefaultPriority = Buffer(15)
        .StartTime = Buffer(16)
        .UntilTime = Buffer(17)
        .Status = Buffer(18)
        .JobsCount = Buffer(19)
        .AveragePPM = Buffer(20)
    End With

    IsDefaultPrinterReady = (mPRINTER_INFO_2.Status = Stat_type)

    ClosePrinter (mhPrinter)
    Exit Function
NA:
    IsDefaultPrinterReady = False

End Function

Private Function StringFromPointer(lpString As Long, lMaxLength As Long) As String

    Dim sRet As String
    Dim lret As Long

    If lpString = 0 Then
        StringFromPointer = ""
        Exit Function
    End If

    If IsBadStringPtrByLong(lpString, lMaxLength) Then
        '\\ An error has occured - do not attempt to use this pointer
        StringFromPointer = ""
        Exit Function
    End If

    '\\ Pre-initialise the return string...
    sRet = Space$(lMaxLength)
    CopyMemory ByVal sRet, ByVal lpString, ByVal Len(sRet)
    If Err.LastDllError = 0 Then
        If InStr(sRet, Chr$(0)) > 0 Then
            sRet = Left$(sRet, InStr(sRet, Chr$(0)) - 1)
        End If
    End If

    StringFromPointer = sRet

End Function

Private Function DefaultPrinterName() As String
    Dim strLPT As String * 255
    Dim tStr As String
    Call GetProfileStringA("Windows", "Device", "", strLPT, 254)
    tStr = Trim(strLPT)
    DefaultPrinterName = Left$(tStr, InStr(1, tStr, ",", vbTextCompare) - 1)
End Function

Public Sub print_ME()
'On Error GoTo err_me
    With Application
        If .EnableEvents Then .EnableEvents = False
        If .ScreenUpdating Then .ScreenUpdating = False
        If .Calculation <> xlCalculationManual Then .Calculation = xlCalculationManual
    End With

    Dim mrgn As Double
    Dim mesg As String
    Dim printer_name As String
    Dim strLPT As String * 255
    Dim tStr As String
    Dim shtDSH As Worksheet

    If IsDefaultPrinterReady(PRINTER_STATUS_READY) Then
        Set shtDSH = ThisWorkbook.Sheets("Dashboard")
        With shtDSH
            With .PageSetup
                mrgn = Application.InchesToPoints(0.25)
                .LeftMargin = mrgn
                .RightMargin = mrgn
                .TopMargin = mrgn
                .BottomMargin = mrgn
                .HeaderMargin = mrgn
                .FooterMargin = mrgn
                .PrintHeadings = False
                .PrintGridlines = False
                .PrintComments = xlPrintNoComments
                .PrintQuality = 600
                .Orientation = xlLandscape
                .Draft = False
                .PaperSize = xlPaperLegal
                .FirstPageNumber = xlAutomatic
                .Order = xlDownThenOver
                .BlackAndWhite = False
                .Zoom = False
                .FitToPagesWide = 1
                .FitToPagesTall = 1
                .PrintArea = "$B$2:$AM$57" 'shtDSH.Range("B2:AM57").address
            End With
        End With

        shtDSH.PrintOut Copies:=1

    Else
        Call GetProfileStringA("Windows", "Device", "", strLPT, 254)
        tStr = Trim(strLPT)
        printer_name = Left(tStr, InStr(1, tStr, ",", vbTextCompare) - 1)

        mesg = "Please, verify the connection to your default printer [" & printer_name & "]." & vbLf & vbLf & "Thank you."
        If IsDefaultPrinterReady(PRINTER_STATUS_PAPER_JAM) Then mesg = mesg & vbLf & vbTab & "•  Paper Jam"
        If IsDefaultPrinterReady(PRINTER_STATUS_ERROR) Then mesg = mesg & vbLf & vbTab & "•  Printer Error Status"
        If IsDefaultPrinterReady(PRINTER_STATUS_NOT_AVAILABLE) Then mesg = mesg & vbLf & vbTab & "•  Printer Status Not Available"
        If IsDefaultPrinterReady(PRINTER_STATUS_PAPER_PROBLEM) Then mesg = mesg & vbLf & vbTab & "•  Printer Paper Issue"
        If IsDefaultPrinterReady(PRINTER_STATUS_DOOR_OPEN) Then mesg = mesg & vbLf & vbTab & "•  Printer Door Open"
        If IsDefaultPrinterReady(PRINTER_STATUS_OFFLINE) Then mesg = mesg & vbLf & vbTab & "•  Printer Offline"

        MsgBox mesg, vbInformation, "Printer Error : : " & printer_name
    End If
exit_me:
    On Error Resume Next
    With Application
        If Not .EnableEvents Then .EnableEvents = True
        If Not .ScreenUpdating Then .ScreenUpdating = True
    End With
    Exit Sub
err_me:
    'logThis causedError:="Tools Worksheet_Activate Function Error: " & Err.Number & vbLf & Err.Description
    Err.clear
    GoTo exit_me
End Sub