gelöst Virtual Basic - Drucker, 3 Seiten aus 3 Fächern drucken

Joined
Jun 16, 2011
Messages
8,651
Points
225
Hi,
Mein Ziel ist, ein Dokument aus einem Drucker 3mal aus zu drucken.
Aber die erste Kopie soll aus dem Bypass und die anderen beiden aus Fach "1".
Habe jetzt mal das Script erstellt, aber da druckt er einfach 3 Seiten aus Fach 1..


Code:
Private Sub BLa_Click()

    Dim Drucker$, DDrucker$

    
    'Druckeranschluss ermitteln
     On Error Resume Next
        Drucker = Application.ActivePrinter
        For d = 0 To 20
                Err = 0
                Application.ActivePrinter = "\\xxx\xx auf Ne" & Format(d, "00") & ":"
                
                If Err = 0 Then
                        DDrucker = "\\xxx\xx auf Ne" & Format(d, "00") & ":"
                        Exit For
                End If
      
        Next
        ActiveDocument.PageSetup.FirstPageTray = 3
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:=DDrucker
        ActiveDocument.PageSetup.FirstPageTray = 1
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:=DDrucker
       
        
        
    On Error GoTo 0

  


End Sub

Seht ihr da n Fehler :?
Bzw mache ich grundsätzlich was falsch ?

MFG
 
Kannste mir die Überschrift mal eindeutschen? :? Also hat das wieder irgendwas mit programmieren zu tun da würd ich die Überschrift entsprechend anpassen ^^
 
VBA = Visual Basic

Ja hat was mit programmieren zutun. Sozusagen programmieren für Anfänger.
 
Ahhh jetzt ja. Kann ich selbst leider ned helfen aber hab den Titel mal aussagekräftiger gestaltet :)
 
Verwende nicht 1 oder 3, sondern die Konstanten wdPrinterLowerBin und Freunde. Leider können diese Werte druckerabhängig sein, und ich kann dir nicht sagen, welche für deinen Drucker die richtigen sind. Du kannst dies versuchen herauszufinden, indem du ein Makro aufzeichnest, in dem du in den Druckereinstellungen das Druckerfach auswählst. Anschließend kannst du im Makro sehen, welche Werte verwendet werden.

Zudem, wenn die Dokumente mehrere Seiten haben: "OtherPagesTray =" auch auf diesen wert setzen.
 
Ohne zu wissen, was die Druckerbefehle bewirken/verursachen, hier mal den Inhalt der Schleife (For/Next) betrachtet:

Die Variable "Err" wird auf Null gesetzt.

Dann wird die Variable "Err" wieder abgefragt, ob sie Null ist > muss sie ja sein, ist ja gerade gesetzt

Die Variable "DDrucker" wird belegt und die For/Next-Schleife wird verlassen (Exit For).

D.h., der Schleifenzähler "d" (benötigt in: Format(d, "00") kommt nie über Null hinaus.

Also wird die Variable DDrucker immer

\xxx\xx auf Ne00:

lauten. Ist das so gewollt ?

An dieser Stelle ist ein bestimmt Überdenken des Makos notwendig.

Gruß aus Berlin
 
Err ist keine Variable im herkömmlichen Sinne, sondern das Error-Objekt von VB.
Üblicherweise setzt man es nicht auf 0, sondern verwendet Err.Clear(). Wenn ActivePrinter nicht auf den neuen Wert gesetzt werden kann (etwa weil der Drucker nicht existiert), dann wird das Err-Objekt verändert. Die Überprüfung sollte eigentlich auch eher "If Err.Number = 0" sein, aber funktionieren sollte es trotzdem, da VB das Objekt besonders behandelt.
 
Hallo, also erstmal Großes Danke.
Das mit dem Drucker ansteuern Klappt so in der Art wie ich mir es vorgestellt habe.
Aber egal, habe n neuen Plan.
Code:
Private Sub CommandButton1_Click()
'
' Dublizieren Makro
'
  Application.ActiveDocument.SaveAs ("C:\Test\NewDocument.docx")

    Dim Drucker$
        Drucker = Application.ActivePrinter

        Application.ActivePrinter = "\\xxx\xxx auf Ne"
    
            For Zahl = 1 To 2
                Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=5
                Selection.Bookmarks("\Page").Range.Copy
            
                Selection.EndKey Unit:=wdStory
                Selection.InsertBreak (wdPageBreak)
                Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=Pages + 5
                Selection.PasteAndFormat (wdFormatOriginalFormatting)
        
            Next Zahl
        Application.ActiveDocument.PrintOut Copies:=1, ActivePrinter:=Drucker
End Sub

Ziel ist, dass das fertige Dokument gesichert wird, dann verdreifacht und 3 mal ausgedruckt wird.
Speicher und verdreifachen klappt nicht. Beim "Drucken" befehl kommt dann diese Meldung und "ActivePrinter" wird makiert :?
Die Fachsteuerung kann ich ja im Dokument auch so hinterlegen.
Dann hätte ich noch gerne dass der Name des Dokuments automatisch aus meheren Textfeldern generiert wird.

Viele Fragen, hoffe ihr könnt mir helfen.

Mfg :)
 

Attachments

  • VB Fehler.PNG
    VB Fehler.PNG
    50.7 KB · Views: 15
Erstmal zum Fehler auf dem Screenshot. ActivePrinter:=Drucker funktioniert so nicht, denn mit Name:=Wert werden die Parameter, die die Funktion erwartet in beliebiger Reihenfolge übergeben, ActivePrinter ist aber kein Parameter. Ich sehe auch keinen, der diese Funktion erfüllt, also musst du hier ActivePrinter wie zuvor separat zuweisen. Aber was willst du erreichen? Drucker$ setzt du doch auf den Drucker, der sowieso der gerade ausgewählte ist.

Eine Frage zum Kopieren und Einfügen: Warum nicht einfach Copies:=3?
 
Erstmal zum Fehler auf dem Screenshot. ActivePrinter:=Drucker funktioniert so nicht, denn mit Name:=Wert werden die Parameter, die die Funktion erwartet in beliebiger Reihenfolge übergeben, ActivePrinter ist aber kein Parameter. Ich sehe auch keinen, der diese Funktion erfüllt, also musst du hier ActivePrinter wie zuvor separat zuweisen. Aber was willst du erreichen? Drucker$ setzt du doch auf den Drucker, der sowieso der gerade ausgewählte ist.

Eine Frage zum Kopieren und Einfügen: Warum nicht einfach Copies:=3?
Sprich ich könnte den Druckbefehl so stehen lassen :? o_O
Oder wie meinst du das ?

Das mit den Copies:=3 geht nicht, weil ich dann nicht deklarieren kann, dass die erste Seit ausm Bypass soll und der Rest aus Fach 1.
Da würde er 3mal das Dokument drucken. Sprich 3mal die erste Seite, was ich ja nicht will...
 
Ist das jetzt Word oder Excel? Oben steht was von SelectedSheets (Excel), unten ist es Word (".docx").

Du machst mit dem Drucker dies:
Code:
Drucker = ActivePrinter
ActivePrinter = "xxx";
...
ActivePrinter = Drucker
Der aktive Drucker ist am Schluss der, der am Anfang eh schon der aktive war - deswegen die Frage.

Damit die Fehlermeldung nicht mehr auftritt, muss ActivePrinter:=Drucker bei PrintOut entfernt werden. Es ist ein ungültiger Parameter.

Nur noch mal zum Verständnis: Du willst ein Dokument mit X Seiten dreimal ausdrucken. Seite 1 von Kopie 1 kommt in Fach A und alle anderen Seiten sowie die Kopien 2 und 3 sollen in Fach B?
Code:
ActivePrinter = "[I]Dein Lieblingsdrucker hier![/I]"
ActiveDocument.PageSetup.FirstPageTray = [I]FachAKonstante[/I]
ActiveDocument.PageSetup.OtherPagesTray = [I]FachBKonstante[/I]
Application.ActiveDocument.PrintOut Copies:=1
ActiveDocument.PageSetup.FirstPageTray = [I]FachBKonstante[/I]
Application.ActiveDocument.PrintOut Copies:=2, [I]Collate:=True[/I]
Wenn die Seiten in der Reihenfolge 1,1,2,2,... herauskommen, ist Collate nötig, ansonsten geht's ohne.
 
Also kam die Tage jetzt nimmer dazu, bin jetzt aber fertig :wub

Code:
Private Sub Drucken_Click()

'
' Dublizieren Makro
'
      'Speichern aus Name+Vorname.
      'Der Stand wie es Archiviert wird !
      
            With Dialogs(wdDialogFileSaveAs)
            .Name = ActiveDocument.FormFields("Text34").Result & "_" & ActiveDocument.FormFields("Text35").Result
            .Show
            End With
          
      'Der Schutz des aktiven Dokuments wird aufgehoben
               If ActiveDocument.ProtectionType <> wdNoProtection Then
               ActiveDocument.Unprotect Password:=""
               End If
            
             
        Application.ActivePrinter = "\\UEBPS02\UEBPRT113-A4"

          'Dublizieren
          
            For Zahl = 1 To 2
                Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=5
                Selection.Bookmarks("\Page").Range.Copy
            
                Selection.EndKey Unit:=wdStory
                Selection.InsertBreak (wdPageBreak)
                Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=Pages + 5
                Selection.PasteAndFormat (wdFormatOriginalFormatting)
             Next Zahl
        
        Application.ActiveDocument.PrintOut Copies:=1
            
            'Dokument schließen, ohne die 3 Folien.
                       
            ActiveDocument.Close savechanges:=False
            Application.Quit savechanges:=False
        
                  


End Sub

Ist jetzt der fertige Code.
Falls ihn jemand benutzen will oder noch ne Frage oder verbesserungsvorschläge hat, gerne hier rein schreiben.

Greez. :)
 
Back
Top Bottom