Toon posts:

[Access/VBA] Default printer in printers collectie

Pagina: 1
Acties:
  • 280 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik gebruik de volgende code:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Private Sub Report_Open(Cancel As Integer)
FindPrinter = False
Set Database = CurrentDb
    SQL = "SELECT * FROM SERVER_STAM_998_Layouts WHERE Layout_ID=" & Report.OpenArgs
Set RstReport = Database.openrecordset(SQL, , DbForwardOnly)

Me.CHILD_001_Rpt_Header.Visible = RstReport("Layout_Koptekst")
Me.CHILD_002_rpt_footer.Visible = RstReport("Layout_Voettekst")

Afdr_AantalEx = RstReport("Layout_AantalExemplaren")

X = 0
For Each Prnt In Application.Printers
If Prnt.DeviceName = RstReport("Layout_Printer") Then Set Afdr_Printer = Application.Printers(X): FindPrinter = True
X = X + 1
Next

If FindPrinter = False Then Set Afdr_Printer = Applications.Printers(0)

RstReport.Close

Me.Application.Printer = Afdr_Printer
Me.Report.Printer.Copies = Afdr_AantalEx
End Sub


Het probleem zit hem in:

Visual Basic:
1
If FindPrinter = False Then Set Afdr_Printer = Applications.Printers(0)


Deze code zet keurig de printer met indexgetal 0 als active printer, maar ik wil de windows defaultprinter als active printer. De enige functie die in de buurt kom is .UseDefaultPrinter, maar dit is een form of report property en wordt op de een of andere manier overruled door de applications.printers(0).

Iemand een idee wat ik fout doe?

Alvast bedankt

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 19-08 12:58

NMe

Quia Ego Sic Dico.

VBA- en Access-vragen mogen tegenwoordig in Officesuites en -software behandeld worden. :)

PW>>OFF

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Ow sorry, dat wist ik nog niet. Zal er op letten!!!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB/AI

Front verplichte underscores

Ik heb al tijden niets meer gedaan met scripts in Access (niet sinds Access95 :+ ) maar kijk even naar Application.ActivePrinter


Edit: niet dus, inderdaad geldt dat niet onder Access. Sorry :)

[ Voor 25% gewijzigd door F_J_K op 04-10-2005 15:17 . Reden: x c ]

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Verwijderd

Topicstarter
F_J_K schreef op dinsdag 04 oktober 2005 @ 12:53:
Ik heb al tijden niets meer gedaan met scripts in Access (niet sinds Access95 :+ ) maar kijk even naar Application.ActivePrinter
ActivePrinter is (volgens Access) geen geldige parameter van application, daarnaast verwacht ik dat ActivePrinter de actieve printer aangeeft, het gene wat ik moet weten is welk indexnummer de windows standaardprinter heeft, of hoe ik daarachter kom.

Verwijderd

printer object & methods/properties zijn gewijzigd vanaf access2000. ik stel voor dat je een leeg rapport of form aanmaakt, enkel met de bedoeling de actieve printer te bepalen:
Visual Basic:
1
2
3
4
5
Dim GetDefaultPrinter As Form
  Set GetDefaultPrinter = New Form_Formulier1
  GetDefaultPrinter.Visible = False
  MsgBox GetDefaultPrinter.Printer.DeviceName
  Set GetDefaultPrinter = Nothing
daarna loop je de printerscollectie af tot je een match hebt, of je stelt rechtstreeks de printer in.

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Ik heb even nagekeken hoe ik zoiets oploste in access2000. Uiteindelijk bleek toen de default windowsprinter uit te lezen uit de win.ini file met de GetProfileString() Api. Eerlijk gezegd ben ik er nog niet aan toegekomen om na te gaan of Access2003 er een betere ondersteuning voor heeft.
In grote lijnen gaat dat zo:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private 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 GetPrinter() As String
    Dim sApp As String
    Dim sKey As String
    Dim sBuf As String
    dim r as long
    
    sBuf = String(1024, " ")
    sApp = "Windows"
    sKey = "device"
    GetProfileString sApp, sKey, "", sBuf, Len(sBuf)
    
     r = InStr(sBuf, ",")
    If r <> 0 Then
        Getprinter = Left(sBuf, r - 1)
    Else
        Getprinter = sBuf
    End If
End Function

momentje, er is vanaf 2000 ev een GetDefaultprinter() :)

W2000 ev:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Declare Function GetDefaultPrinter Lib "winspool.drv" Alias _
"GetDefaultPrinterA" (ByVal pszBuffer As String, pcchBuffer As Long) As Long

Sub GetPrinterName() as String
    Dim snamebuff As String
    Dim lLen As Long
    
    lLen = 1024
    buf = Space$(1024)
 
    snamebuff = Space$(lLen)
    GetDefaultPrinter snamebuff, lLen

    Getprintername= Left$(snamebuff, InStr(snamebuff, vbNullChar) - 1)
    
End Sub

[ Voor 29% gewijzigd door Lustucru op 04-10-2005 21:28 . Reden: geeft niks hoor :+ ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Verwijderd

Topicstarter
Niesje schreef op dinsdag 04 oktober 2005 @ 13:50:
F_J_K haalt een beetje Access95 en Word95 door elkaar ;)

Anyway, ik heb even nagekeken hoe ik zoiets oploste in access2000. Uiteindelijk bleek toen de default windowsprinter uit te lezen uit de win.ini file met de GetProfileString() Api. Eerlijk gezegd ben ik er nog niet aan toegekomen om na te gaan of Access2003 er een betere ondersteuning voor heeft.
In grote lijnen gaat dat zo:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private 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 GetPrinter() As String
    Dim sApp As String
    Dim sKey As String
    Dim sBuf As String
    dim r as long
    
    sBuf = String(1024, " ")
    sApp = "Windows"
    sKey = "device"
    GetProfileString sApp, sKey, "", sBuf, Len(sBuf)
    
     r = InStr(sBuf, ",")
    If r <> 0 Then
        Getprinter = Left(sBuf, r - 1)
    Else
        Getprinter = sBuf
    End If
End Function

momentje, er is vanaf 2000 ev een GetDefaultprinter() :)

W2000 ev:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Declare Function GetDefaultPrinter Lib "winspool.drv" Alias _
"GetDefaultPrinterA" (ByVal pszBuffer As String, pcchBuffer As Long) As Long

Sub GetPrinterName() as String
    Dim snamebuff As String
    Dim lLen As Long
    
    lLen = 1024
    buf = Space$(1024)
 
    snamebuff = Space$(lLen)
    GetDefaultPrinter snamebuff, lLen

    Getprintername= Left$(snamebuff, InStr(snamebuff, vbNullChar) - 1)
    
End Sub
Dank u, de onderste code werkte als een speer. :)
Pagina: 1