Access VBA Verweise

ascariel

Cadet 2nd Year
Registriert
März 2005
Beiträge
20
Hallo,

kann mir einer von euch sagen, welchen Verweis ich in VBA markieren muss, damit er
Printers als Benutzerdefinierten Typ erkennt?

Ich versuche seit Tagen per Script den Standartdrucker zu setzen, um entweder ein PDF zu genieren oder direkt auszudrucken.

Alle im Internet verfügbaren Tips beziehen haben den Code: Dim Drucker As Printers und
VBA erkennt bei mir den Typ nicht. Ich habe Access 2002 unter WinXp.

Danke im Vorraus für eure Hilfe
 
So wird das auch nichts ... schau Dir mal folgender Thread an, er sollte dein Problem sicherlich lösen ... ansonsten wäre es hilfreich wenn Du ein "bissl" mehr von Deinem Code posten könntest damit man nachvollziehen kann wie Du vorgehst ...

P.S. das Beispiel bezieht sich zwar auf Word der VBA Code sollte das aber unter Access genau so handeln

Hier nochmal ein leicht angepasstes Beispiel zur Anschauung (getest unter Access 2010) in einer Form eine Combobox und eine Schaltfläche anlegen und folgenden Code beim OnClick ereigniss auslösen.

Code:
Private Sub Befehl0_Click()
  Dim Prn As Printer
  Dim msgboxstring As String

'Falls Combo1.Text = "" wurde kein Drucker ausgewählt...
If Me.Combo1.Value = "" Then
MsgBox "Sie haben keinen Drucker ausgewählt!", _
vbInformation, "Error"
Else
'für jeden Drucker ...
For Each Prn In Printers
'Falls der vorhandene Drucker mit dem in der Combobox
'augewählten übereinstimmt, wird dieser als "Printer"
'festgelegt (Set Printer = Prn ).
If Prn.DeviceName = Me.Combo1.Value Then
Set Printer = Prn
Exit For
End If
Next

'Drucken ...

msgboxstring = "Hallo " & Prn.DeviceName

MsgBox msgboxstring

DoCmd.PrintOut

End If
End Sub

Folgenden Code einfach hinzufügen, dieser "füllt" die Combobox mit den vorhandenen Druckern ...

Code:
Private Sub Form_Load()
Dim X As Integer
Dim Y As Integer
Dim Printername As String

Me.Combo1.RowSource = ValueList

Y = -1
'Die Combobox mit vorhandenen Druckern füllen
For X = 0 To Printers.Count - 1
Printername = Printers(X).DeviceName
Me.Combo1.AddItem Printername

'Mit dem derzeit eingestellten vergleichen
If Printername = Printer.DeviceName Then Y = X

Next X

Me.Combo1.SetFocus
Me.Combo1.ListIndex = Y

End Sub

Der Code stammt ursprünglich von hier, habe ihn leider etwas anpassen und ergänzen müssen ...
 
Zuletzt bearbeitet: (Ergänzung eingefügt)
Danke für deine rasche Antwort, aber das ist es ja gerade, egal welche Lösung aus dem Web ich versuche, ales scheitert daran, dass mein VBA den Typ Printer nicht kennt.

Also z.B. String, Byte, Integer,... geht, aber Printer nicht. Ich hab mir sogar eine Beispieldatenbank runtergeladen (siehe Attatchment, aber die scheitert in der Zeile wo die Variable Prn (bei dir z.B.) als Printer definiert wird. ( Dim Prn As Printer )

Somit bin ich nach langem googlen und Threads lesen der Meinung, dass irgendein Verweis in VBA Menü unter Extras fehlt, oder vielleicht ein Update von Microsoft, da das leider ein Firmen PC ist und ich keine Rechte habe, weil der Chef sehr paranoid ist.

Ich bin ratlos
 

Anhänge

Zuletzt bearbeitet:
Dann sollten wir mal in der VBA-IDE die Verweise auf die Bibliotheken überprüfen ... zu finden unter Extras/Verweise

P.S. wenn ich dem Artikel in der MSDN folgen kann, sollte die Funktionalität mit Access XP (2002) einzug gehalten haben ... also an einem Update sollte das erstmal nicht liegen ....

Prüfe mal ob ein Verweis auf die DAO 3.6 aktiv ist ...

P.S.S. Dein Beispiel funktioniert sogar unter Access 2010 ;-)
 
Zuletzt bearbeitet:
Hmm, hab DAO 3.6 aktiviert, leider ändert das nichts an dem Problem, dass er den Typ Printers nicht kennt. Bei mir hängt er sich in der Druckerauswahl Datenbank jedesmal in der Zeile Dim Prn As Printers auf. Bei mir sind jetzt folgende Verweise aktiv:

-Visual Basic for Applications
-Microsoft Access 9.0 Object Library
-OLE Automation
-Microsoft DAO 3.6 Object Library
-Microsoft ActiveX Data Object 2.1 Library
-Microsoft VBScript Regular Expressions 5.5
-Microsoft Visual Basic for Applications Extensibility 5.3
-Microsoft WMI Scripting V1.2 Library


Soll ich vielleicht .NET Framework 4.0 installieren, kann das daran liegen?
 
Zuletzt bearbeitet:
Als Access XP (2002) erschien war an an das .NET Framwork 4.0 noch nicht zu denken ... VBA ist auch davon unabhängig. Ich prüfe mal schnell meine Verweise und ergänze diesen Eintrag.

Die Einträge sehen erstmal ganz ordentlich aus ... unter Umständen ist bei der Registrierung der Bibliotheken in Windows etwas durcheinander gekommen ... schau mal unter folgender Seite und prüfe mit dem dortigen Code ob die Verweise intakt sind.
 
Zuletzt bearbeitet:
Hmm, habe den Code gleich kopiert und auf einen Button gelegt. Ich bekomme diese Fehlermeldung, welche wieder mein Problem zeigt, dass mein Access 2002 viele Befehle nicht zu kennen scheint:
 

Anhänge

  • Capture.JPG
    Capture.JPG
    191,2 KB · Aufrufe: 320
Deaktiviere mal testweise unter den Verweisen die Microsoft ActiveX Data Object 2.1 Library, wir wollen mal hoffen das diese nicht wirklich innerhalb der DB verwendung findet, und teste bitte nochmal ... vorher mal ein Backup der DB machen ...
 
Nein, das bringt auch nichts, ich habe sogar eine komplett neue, leere DB gemacht, mit nur dem Code. Computer neu gestartet, alles mit dem selben Ergebnis. Ich versuche einmal Access komplett neu zu installieren. Wenn das auch nicht hilft stehe ich in der Zeitung!
 
Das wollen wir dann doch nicht hoffen ;-) Viel Erfolg erstmal weiterhin ...
 
Ich habs aufgegeben, sollen die Leute den Drucker eben selbstständig in der Vorschau auswählen. Unelegant aber nervensparend.

Dafür hab ich ein weiteres Problem mit folgendem Code, vielleicht lässt sich hier der Fehler finden: (Damit soll ein Termin in Outlook eingetragen werden, zum Testen hab ich das heutige Datum als ZahlungsZiel) Nachdem ich unter Verweise Outlook 11 angehakt habe kannte er alle Variablen, nur bekomme ich bei
---> Set myApptItem = myOlApp.CreateItem(olAppointmentItem)
den Laufzeitfehler 13 : Typen unverträglich

Private Sub Befehl102_Click()
Dim myOlApp As Outlook.Application
Dim myApptItem As Outlook.AppointmentItem
Dim myRecipient As Outlook.Recipient
Dim AnfangDatum, EndDatum As String
Dim ZahlungZiel As Date

'ZahlungZiel = Me.Zahlungsfrist + 30
ZahlungZiel = "29.07.2010"

AnfangDatum = Left(ZahlungZiel, 10) & " 8:00:00 AM"
EndDatum = Left(ZahlungZiel, 10) & " 8:30:00 AM"
Set myOlApp = New Outlook.Application
Set myApptItem = myOlApp.CreateItem(olAppointmentItem)
myApptItem.Start = AnfangDatum
myApptItem.End = EndDatum
myApptItem.Subject = "Zahlungsziel " & Me.RechnungsNr
myApptItem.BusyStatus = olFree
myApptItem.Save

End Sub

Irgendwelche Ideen?
 
Mal mit einem Breakpoint nachgesehen was dort bis dahin im Code passiert ist ? Ohne genaueren Einblick in deine DB wird es dann auch langsam schwierig ... der Code läuft (jedenfalls bei mir ohne Probleme, habe nur den & Me.RechnungsNr mal auskommentiert da bei mir nicht vorhanden - logisch), verwunderlich ist auch das Du einen Verweis auf Outlook 11 hast, der müsste bei Office XP eigentlich auf 10 lauten, es sei denn die Versionen sind gemischt installiert ... der Fehler lässt allerdings darauf schließen das da irgendwas "vermischt" wurde und erst bei der Übergabe "knallt" (du benutzt da etwas wie Dim AnfangDatum, EndDatum As String und Dim ZahlungZiel As Date und baust das dann zusammen) u. U. sind da die aktuelleren Versionen von Access genügsamer ?!?
 
Zurück
Oben