vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

In diesem Forum haben Sie die Möglichkeit Kommentare, Fragen und Verbesserungsvorschläge zu den im vb@rchiv gelisteten Tipps und Workshops zu posten.

Hinweis:
Ein neues Thema kann immer nur über die jeweilige Tipps & Tricks bzw. Workshop Seite eröffnet werden!

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fragen zu Tipps & Tricks und Workshops im vb@rchiv
Tipp 782: VB-Printer-Objekt in VBA benutzen 
Autor: lpeter1632
 Tipp anzeigenDatum: 27.08.08 06:21

Hallo Forumsmitglieder,

ich bin auf diesen Tipp gestossen http://www.vbarchiv.net/archiv/tipp_782.html.

Wo bekommt man noch die vbPrinter.zip?.
Der Link funktioniert leider nicht mehr.

MfG Lutz.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB-Printer-Objekt in VBA benutzen 
Autor: ModeratorDieter (Moderator)
Datum: 27.08.08 08:58

Auf unserer vb@rchiv CD Vol.5 ist diese Datei enthalten.

_________________________
Professionelle Entwicklerkomponenten
www.tools4vb.de

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB-Printer-Objekt in VBA benutzen 
Autor: conny01
Datum: 24.11.08 15:44

Hallo Forumsmitglieder,

nach langer Suche bin ich auf diesen Tipp ( VB-Printer.Objekt) gestossen und hoffe, dass mir diese Funktion auch bei der Fachauswahl mittels Word helfen kann. Ich möchte gern je nach Dokument ein anderen Drucker und ein spezielles Fach per Makro ansteuern. Hierfür würde ich gern folgenden Code für die Ermittlung der Fächer verwenden:
' Prototypisierung der API-Funktion DeviceCapabilities
Private Declare Function DeviceCapabilities _
  Lib "winspool.drv" Alias "DeviceCapabilitiesA" ( _
  ByVal lpDeviceName As String, _
  ByVal lpPort As String, _
  ByVal iIndex As Long, _
  ByRef lpOutput As Any, _
  ByVal dev As Long _
  ) As Long
' Konstante für den Parameter iIndex
Private Const DC_BINS As Long = 6&
Private Const DC_BINNAMES As Long = 12&
 
Private Sub ListPaperBins()
Dim PaperBins() As String
Dim lBinCount As Long
Dim lBinNumbers() As Integer
Dim sBinNames As String
Dim lNullPos As Long
Dim i As Long
  With Printer
    ' Anzahl unterstützter Papierschächte ermitteln:
    lBinCount = DeviceCapabilities(.devicename, .port, _
                DC_BINS, ByVal vbNullString, 0)
    ' Speicherplatz für die Rückgaben reservieren
    ReDim lBinNumbers(1 To lBinCount)
    sBinNames = Space$(24 * lBinCount)
    ' Nummern vorhandener Papierschächte abholen:
    DeviceCapabilities .devicename, .port, DC_BINS, lBinNumbers(1), 0
    ' Namen der vorhandenen Papierschächte abholen:
    DeviceCapabilities .devicename, .port, DC_BINNAMES, ByVal sBinNames, 0
  End With
  ' Schachtnummern und -namen extrahieren
  ' und im zweidimensionalen Array PaperBins ablegen:
  ReDim PaperBins(0 To lBinCount - 1, 0 To 1)
  For i = 1 To lBinCount
    ' Schachtnummer:
    PaperBins(i - 1, 0) = lBinNumbers(i)
    ' Schachtname:
    PaperBins(i - 1, 1) = Mid$(sBinNames, 24 * (i - 1) + 1, 24)
    ' Im Bedarfsfall das Stringende kürzen:
    lNullPos = InStr(PaperBins(i - 1, 1), vbNullChar)
    If lNullPos > 0 Then
      PaperBins(i - 1, 1) = Left$(PaperBins(i - 1, 1), lNullPos - 1)
    End If
  Next i
  ' Die gefundenen Daten in das Direktfenster ausgeben:
  Debug.Print "Vorhandene Papierschächte des Druckers " _
              & Printer.devicename & " am Anschluss " _
              & Printer.port & " :"
  For i = LBound(PaperBins) To UBound(PaperBins)
    Debug.Print PaperBins(i, 0) & ": " & PaperBins(i, 1)
  Next i
End Sub
Allerdings bekomme ich beim Ausführen des Codes immer die Fehlermeldung "Objekt erforderlich".
Könnt ihr mir sagen, ob ich hierfür das VB-Printer-Objekt erstellen mus und wo die DLL gespeichert werden soll und wie diese in den obrigen Code einzubinden ist? Leider bin ich absoluter Neuling auf diesem Gebiet, aber ich würde dieses Thema so gern in den Griff bekommen.

Danke!!!
Conny
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB-Printer-Objekt in VBA benutzen 
Autor: wb-soft
Datum: 25.11.08 09:43

Hi!

Am besten kopierst du die DLL nach ...\system32.
Die DLL muß mit regserv32 registriert werden. Anschließend über Projekt/Verweise einbinden.


mfg

WB
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB-Printer-Objekt in VBA benutzen 
Autor: conny01
Datum: 25.11.08 20:46

Hi,

vielen Dank für die Antwort. Das scheint ja nicht so schwierig zu sein... Ich werde es allerdings erst in den nächsten Tagen ausprobieren können.

Viele Grüße,
Conny
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB-Printer-Objekt in VBA benutzen 
Autor: conny01
Datum: 03.12.08 12:38

Hi,

habe jetzt eine Möglichkeit gefunden die Kostanten für den Drucker auszulesen. Die DLL habe ich auch Registriert und einen Verweis erzeugt. Könnt ihr mir sagen, wie ich das VB-Printer-Objekt nun für den Audruck nutzen kann oder liege ich da völlig falsch? Folgendes Makro funktioniert leider nicht. Es wird immer das gleiche Fach genommen:

Sub DruckerauswahlAM()
'
' Druckerauswahl Makro
'
Dim strDrucker As String
 
 
Rem ####################### Zuweisen der Variablen den Druckerinternen Fach-Ids _
  #########
Fach2 = 3
Fach3 = 2
 
Application.ActivePrinter = "\\einServer\einDrucker"
Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _
        wdPrintDocumentContent, Copies:=1, Pages:="", _
        PageType:=wdPrintAllPages, _
        ManualDuplexPrint:=False, Collate:=True, Background:=True, _
        PrintToFile:= _
        False, PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _
        PrintZoomPaperHeight:=0
ActiveDocument.PageSetup.FirstPageTray = Fach2
ActiveDocument.PageSetup.OtherPagesTray = Fach2
       stellt die Einstellungen des Druckers zurück
        ActivePrinter = strDrucker
        With ActiveDocument.PageSetup
           .FirstPageTray = wdPrinterAutomaticSheetFeed
          .OtherPagesTray = wdPrinterAutomaticSheetFeed
        End With
ActiveDocument.PrintOut
 
End Sub
Danke, Conny
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB-Printer-Objekt in VBA benutzen 
Autor: conny01
Datum: 03.12.08 14:05

Hallo,

ich habe das Makro umgestellt und nun wird das entsprechende Fach angesprochen. Allerdings ist mein Code nicht korrekt. Muss ich die vbPrinter-Klasse noch einbinden oder fehlt der Verweis auf eine Variable.

Sub DruckerauswahlAM()
'
 
Application.ActivePrinter = "\\einServer\einDrucker"
Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _
        wdPrintDocumentContent, Copies:=1, Pages:="", _
        PageType:=wdPrintAllPages, _
        ManualDuplexPrint:=False, Collate:=True, Background:=True, _
        PrintToFile:= _
        False, PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _
        PrintZoomPaperHeight:=0
        Printer.PaperBin = wdPRBNMiddle
ActiveDocument.PrintOut
 
End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB-Printer-Objekt in VBA benutzen, PaperSize ReadOnly 
Autor: AlfredENeumann
Datum: 05.01.09 11:10

Hallo,

der Tip ist (eigentlich) Gold wert, allerdings hab ich ein Problem:

In Access2000 versuche ich, mit pclass.vbPrinter.PaperSize=40 die Papierlänge auf Endlospapier 8.5x12" einzurichten (weil ich mit den Voreinstelungen meiner Datenbank damit auf verschiedenen Rechnern immer Probleme habe).

Dieses Property wird mir aber als "ReadOnly" angezeigt (Laufzeitfehler 383: PaperSize-Eigenschaft ist schreibgeschützt).

Mache ich was falsch?

Grüsse

Alfred
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB-Printer-Objekt in VBA benutzen, PaperSize ReadOnly 
Autor: ModeratorDieter (Moderator)
Datum: 05.01.09 11:15

Du machst hier gar nicht falsch. Diese Eigenschaft ist ReadOnly - da kann man nichts ändern.

_________________________
Professionelle Entwicklerkomponenten
www.tools4vb.de

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB-Printer-Objekt in VBA benutzen, PaperSize ReadOnly 
Autor: AlfredENeumann
Datum: 05.01.09 14:52

Hi,

danke für die schnelle Antwort. Schade eigentlich; das war fast das wichtigste, und ich hatte gehofft, die gleichen Funktionen wie im Printer-Objekt bei Access2007 zu bekommen. Dort ist die Einstellung Papersize nicht ReadOnly - zumindest soweit ich weiss.

Hast du sonst noch einen Tip, wie ich die Papiergrösse per Code einstellen kann - ausser im Entwurfsmodus, das geht nicht, weil die Datenbank eine MDE ist und auch bleiben soll.

Nochmal danke und Grüsse

Alfred
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB-Printer-Objekt in VBA benutzen 
Autor: MultiStorm
Datum: 20.01.09 09:19

Hallo Alle zusammen ...
Ich habe Folgendes Problem mit der vbprinter.dll
unter winXp Funktioniert alles Fehlerfrei ..
sobald ich es auf Vista test will bekomme ich Laufzeitfehler 429
Objektdarstellung durch aktiveX Komponente Fehlgeschlagen ..

habe versucht die DLL über Regsvr32 zu regstrieren ..
Bekomme jedoch da den Fehler:

Das Module "C:\Windows\system32\vbPrinter.dll wurde geladen, der aufruf an DllRegisterServer ist jedoch mit dem Fehlercode 0x80004005 Fehlgeschalgen

hmm...
ich bin Domänen Admin im Netzwerk und konnte bisher auf dem System alles installieren was ich wollte ..
hat jemand eine idee was ich tun kann ?

=================================
[ZITAT]
Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher. - Albert Einstein

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB-Printer-Objekt in VBA benutzen 
Autor: MultiStorm
Datum: 30.01.09 14:23

Hallo alle zusammen ...
die vbPrinter.dll Funktioniert sehr gut unter Access2k7
allerdings bekomme ich es nicht hin den Drucker per code auszuwählen ..

mein ansatz war relative simple
Public vbPrinter As Printer
Public vbPrinters As New Collection
 
Private pClass As New vbPrinter.Class1
'===========================================
Private sub Drucken
Dim PrinterName as String
 
PrinterName = "HP LaserJet 5400"
 
Debug.Print "START================="
    For i = 0 To pClass.vbPrinters.Count - 1
        Debug.Print pClass.vbPrinters(i + 1).DeviceName
        If pClass.vbPrinters(i + 1).DeviceName = PrinterName Then
            Set Printer = vbPrinter
            Debug.Print "Gefunden: " & pClass.vbPrinters(i + 1).DeviceName
            Exit For
        End If
    Next i
Debug.Print "ENDE=================="
end sub
Der Code läuft Fehlerfrei durch ...
Allerdings Druckt er Trotzdem auf dem St. Drucker

Auch diesen Ansatz habe ich versucht
For Each vbPrinter In Printers
    Falls der vorhandene Drucker mit dem PrinterName
    übereinstimmt, wird dieser als "Printer"
    festgelegt (Set Printer = vbPrinter ).
        Debug.Print vbPrinter.DeviceName
        If vbPrinter.DeviceName = PrinterName Then
            Set Printer = vbPrinter
            Debug.Print "Drucker ausgewählt: " & vbPrinter.DeviceName
            Exit For
        End If
Next vbPrinter
diese Code Funktioniert unter VB6 Fehlerfrei ....

Kann mir Jemand Helfen ?

=================================
[ZITAT]
Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher. - Albert Einstein

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um einen neuen Beitrag schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel