[vba] Printer bins selecteren geeft foutmeldign

Pagina: 1
Acties:

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Ik probeer via vba een printer lade te kiezen in word 97 ( volgens MS KB Q194789 ). Dit gaat bij de meeste users goed, maar 1 user heeft een printer die een lade heeft met een naam die langer dan 24 characters is. Hierbij krijg ik consequent een foutmelding van vba over een unknown function en er wordt niks geprint. De bedoeling is om in een huisstijl een standaard printer en lade per gebruiker per type brief in word te hebben ( in lade 2 ( of tray 2 ) indien engels zit altijd het logo papier ) dus probeer ik eerst alle ladenndamen te krijgen via onderstaande code, en zoek daarin of naar lade 2 of naar tray 2.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Public Function GetBinNames() As Variant
    
    'Code adapted from Microsoft KB article Q194789
    'HOWTO: Determine Available PaperBins with DeviceCapabilities API

    Dim iBins As Long
    Dim ct As Long
    Dim sNamesList As String
    Dim sNextString As String
    Dim sPort As String
    Dim sCurrentPrinter As String
    Dim vBins As Variant

    'Get the printer & port name of the current printer
    sPort = Trim$(Mid$(ActivePrinter, InStrRev(ActivePrinter, " ") + 1))
    sCurrentPrinter = Trim$(Left$(ActivePrinter, _
        InStr(ActivePrinter, " on ")))

    'Find out how many printer bins there are
    iBins = DeviceCapabilities(sCurrentPrinter, sPort, _
        DC_BINS, ByVal vbNullString, 0)

    'Set the string to the right size to hold all the bin names
    '[b]24 chars [/b]per name
    sNamesList = String(24 * iBins, 0)

    'Load the string with the bin names
    iBins = DeviceCapabilities(sCurrentPrinter, sPort, _
        DC_BINNAMES, ByVal sNamesList, 0)

    'Set the array of bin names to the right size
    ReDim vBins(0 To iBins - 1)
    For ct = 0 To iBins - 1
        'Get each bin name in turn and assign to the next item in the array
        sNextString = Mid(sNamesList, 24 * ct + 1, 24)
        vBins(ct) = Left(sNextString, InStr(1, sNextString, Chr(0)) - 1)
    Next ct

    'Return the array to the calling routine
    GetBinNames = vBins
End Function

Ik heb al geprobeerd om alle 24's te veranderen naar 50. Maar nu worden de printerladen helemaal niet goed meer herkend.

Op Google kan ik hier niets over vinden, net zomin als op MS KB
En als ik MS KB mag geloven denk ik niet dat het toegestaan is om dan 24 tekens in de naam van een printerlade te stoppen, maar het gebeurt toch...

Iemand die hier een oplossing voor weet ( behalve printerdriver veranderen, want het moet een redelijk generiek vba progje worden en ik kan niet van iedereen eisen dat ze andere printerdrivers gebruiken )
OS is trouwens win98

[ Voor 6% gewijzigd door Gomez12 op 22-07-2005 16:25 . Reden: Bold werkt niet in code vlakken :) ]