mwtuje
Goto Top

Seriendruck in Excel (Sverweis)

Hallo Leute,

ich kenne die Funktion des Serienbriefes in Microsoft Word, genau so etwas möchte ich in Excel versuchen.
Es gibt ein Konditionsblatt, dass sich bei Eingabe einer Nummer (Kundennummer) ändert. Je nach Kundennummer ändern sich Preise und Rabatte.
Das Feld der Kundennummer ist mit einem SVERWEIS mit einer anderen Tabelle verknüpft (Da wo die Datensätze sind)
Diese würden wir gerne drucken und den Kunden aushändigen. Jedoch 940 Konditionsblätter einzeln einzugeben und zu drucken ist sehr unpraktisch.
Gibt es eine Möglichkeit einen Seriendruck in Excel zu starten?

MfG
MWTUJE

Content-Key: 292182

Url: https://administrator.de/contentid/292182

Printed on: April 25, 2024 at 17:04 o'clock

Member: Qugart
Qugart Jan 04, 2016 at 14:41:18 (UTC)
Goto Top
Geht eigentlich ziemlich einfach mit VBA.
Kommt eben auf die Kundennummern drauf an.
Die sollten in einer Exceltabelle vorhanden sein.
Dann kannst du mittels VBA in die Zelle, die SVERWEIS abfragt, die Kundennummern der Reihe nach ausgeben und gleich das entsprechende Sheet oder den enstprechenden Bereich ausdrucken lassen.
Member: raekeb
raekeb Jan 04, 2016 at 14:46:33 (UTC)
Goto Top
Hallo MWTUJE,
Binde den Ausgabebereich in Excel per DDE in ein Wordformular ein:
Bereich markieren,
Strg-c
in Word-formular wechseln
Einfügen - Inhalte einfügen - Excel Tabelle - Verknüpfung - ok
etwas nachformatieren und in Word die Serienbrieffunktion starten
Datenquelle sind hier die Kundennr und die Adressfelder aus Excel
Ansonsten per VBA
Gruß aus Bayern
Mitglied: 122990
122990 Jan 04, 2016 updated at 16:13:54 (UTC)
Goto Top
VBA Beispiel:
Kundennummern stehen auf Blatt Kunden ab A2 untereinander.
Zelle wo die Kundennummer eingefügt werden muss ist hier auf einem Blatt mit dem Namen Konditionsblatt in Zelle B3
Sub PrintAll()
    With Sheets("Kunden")  
        For Each cell In .Range("A2:A" & .Cells(Rows.Count, "A").End(xlUp).Row)  
           If cell.Value <> "" then  
            With Sheets("Konditionsblatt")  
                .Range("B3").Value = cell.Value  
                .PrintOut
            End With
           End if
        Next
    End With
End Sub
Einen bestimmten Drucker kann man der .PrintOut-Methode auch mitgeben wenn man möchte, z.B.
.PrintOut ActivePrinter:="HP Laserjet 1320"
Gruß grexit
Member: MWTUJE
MWTUJE Jan 04, 2016 at 14:58:48 (UTC)
Goto Top
Danke für die Hilfe!
Ich hab schon nach solchen Methoden gesucht aber nur sinnlose Anleitungen gefunden.
Muss ich das im VBA in die Tabelle oder in das Modul des Konditionsblatts schreiben?
Member: MWTUJE
MWTUJE Jan 04, 2016 at 15:00:06 (UTC)
Goto Top
Genauso hatte ich es auch erst versucht. Nur leider hat sich alles so verschoben und es wäre zu viel Aufwand entstanden.
Trotzdem vielen Dank!
Mitglied: 116301
116301 Jan 04, 2016 updated at 15:05:18 (UTC)
Goto Top
Hallo!

Aus Performancegründen, d.h. damit nur ein Druckauftrag (schnelle Druckausgabe) erfolgt, würde ich per Makro (VBA) eine temporäre Arbeitsmappe erstellen, die alle Kundennummergenerierte Tabellenblätter enthält und die temporäre Arbeitsmappe anschließend komplett auf einen Schlag ausdrucken und die Arbeitsmappe ohne zu speichern wieder schließen?

Gruß Dieter
Mitglied: 122990
122990 Jan 04, 2016 updated at 15:12:35 (UTC)
Goto Top
Zitat von @MWTUJE:
Muss ich das im VBA in die Tabelle oder in das Modul des Konditionsblatts schreiben?
Ist egal wo...
Member: MWTUJE
MWTUJE Jan 04, 2016 at 15:50:32 (UTC)
Goto Top
Also ich habe es mit einer Beispiel-Tabelle versucht und es hat auch alle Datensätze ausgegeben.
Nur leider hat er nach dem letzten Datensatz immer weiter gedruckt und einfach nicht aufgehört ^^
Es stand halt bei der Kundennummer nichts mehr und bei den Adressen stand dann #NV.
Mitglied: 122990
122990 Jan 04, 2016 updated at 16:14:18 (UTC)
Goto Top
Das Skript geht davon aus das nach der letzten Kundennummer in Spalte A absolut nichts mehr in dieser Spalte steht. Wenn du das nicht realisieren kannst und zwischen den Kundenummern keine leeren Zellen sind, kann man den Range auch so einschränken, Zeile 3 so ändern
For Each cell In .Range("A2",.Range("A2").End(xlDown))  
Du kannst natürlich auch mit einer simplen IF Abrage prüfen (oben ergänzt) ob der Inhalt der Zelle einen Wert hat, kommt immer ganz auf dein Sheet an.
Wir haben hier halt null Info von deinem Sheet, bedenke das.

Geht hier ansonsten im Test einwandfrei..., ansonsten hast du irgendwo einen Typo oder Code nicht komplett kopiert, überprüfe Zeile 3 penibelst ob sie wirklich mit dem Code oben übereinstimmt. Hier reicht es schon wenn du einen Punkt weglässt, das es nicht wie gewünscht läuft.