Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Excel <-> Word Seriendruck (wenn Zelle nicht leer)

Excel <-> Word Seriendruck (wenn Zelle nicht leer)
14.12.2007 00:41:00
Alex
Hallo Leute,
bin leider immer noch am Kämpfen mit meinem Projekt - habe nun dank Jens alles soweit hinbekommen, wie ich mir das vorgestellt habe. Allerdings eine Sache geht noch überhaupt nicht. Seriendruck in Excel oder von mir aus kann es auch ein Makro sein, dass mir Word startet und dann in die Felder die Daten übernimmt.
Problem ist - ich hab in VBA nur äußerst bescheidene Kenntnisse und weis nicht, wie ich an Word nur dann einen "Datumswert" übergebe, wenn in der Tabelle einer eingetragen ist. (quasi irgendwie If Not xxx "" oder If Not IsEmpty(Range...)) - aber irgendwie klappt das nicht... hab entweder eine Endlosschleife die ich nicht mehr verlassen kann - oder der Compiler meckert, dass ich eine Typen unverträglich sind, With-Block... nicht passt, etc.
Hab hier mal zwei screenies angehängt - mit der Bitte um Erklärung, wie ich Excel sagen kann, dass es nur Name, Klasse und Datum in eine zweite Tabelle kopiert, wenn ein Datumswert vorhanden ist - und dann Datum an Datum in eine eigene Spalte legt.
Hier noch mein bisheriger Versuch:
  • 
    Sub BonSchueler()
    Dim name As Long
    Dim Row As Range
    Dim rngSource As Range, Copy As Range
    Dim cell As Range
    Dim ws1 As Worksheet, ws2 As Worksheet
    Set ws1 = Sheets("Datenbank")
    Set ws2 = Sheets("Bondruck")
    Set rngSource = ws1.Range("D2:AH34") 'Bereich in dem die Datumswerte per
    'Steuerelement Kalender eingetragen werden
    Application.ScreenUpdating = False
    Worksheets("BonSchueler").Cells.Clear 'Alte Tabelleninhalte löschen
    For name = 1 To Sheets("Datenbank").Cells(2, 1).End(xlDown).Row
    If Not IsEmpty(rngSource) Then   ' Wenn Zelle nicht leer ist
    '    With Copy
    ws2.Cells(6 + 6, 3) = ws1.Cells(Range("D2:AH2"), 1)  ' Datum
    ws2.Cells(4 + 6, 3) = ws1.Cells(Row.Count, 1)        ' Name
    ws2.Cells(5 + 6, 3) = ws1.Cells(Row.Count, 2)        ' Klasse
    ws2.Cells(3 + 6, 3) = ws1.Cells(Row.Count, 3)        ' Menüpreis
    '    End With
    End If
    Next
    Application.ScreenUpdating = True
    End Sub
    



  • Hoffe dass mir da jemand einige Tipps geben kann...
    Danke
    Alex S.

    Anzeige

    8
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Excel <-> Word Seriendruck (wenn Zelle nicht l
    14.12.2007 00:57:46
    Alex
    Sheet "Datenbank"
    Userbild
    Hier soll in Zeilen durchsucht werden ob Datum in Zelle vorhanden
    Sheet "Bondruck"
    Userbild
    und hier sollte dann (sofern es überhaupt möglich ist) der Seriendruck stattfinden. (A4 Seite mit 2x6 Etiketten)
    Man müsste also 6 mal die Zellen füllen (eventuell mit .Cells(4+6,3) ?)
  • .Cells(4,3) 'Name
    .Cells(5,3) 'Klasse
    .Cells(6,3) 'immer das Datum das in der Tabelle hinterlegt ist, dann das nächste, usw. bis Spalte AH, dann nächster Name
    .Cells(4,6) 'Name zweites Etikett (waagrecht) am Seriendruck
    .Cells(5,6) 'Klasse
    .Cells(6,6) ' Datum
    .Cells(10,3)
    .Cells(11,3)
    .Cells(12,3)

  • nur wie kann ich das dynamisch gestalten oder sagen, dass wenn ein Blatt voll ist mit Werten diese gedruckt, dann mittels ClearContents die Felder leeren und mit den nächsten Daten bestücken...
    Bin für jeden Tipp dankbar :)
    MfG

    Anzeige
    noch offen...
    14.12.2007 01:32:00
    Jens

    AW: noch offen...
    14.12.2007 10:41:11
    Alex
    Hallo Heinz, hallo Jens,
    danke für deine Mühe - damit lässt sich sicher etwas anfangen - werde mich gleich mal daran machen - das nach meinem Sheet umzubauen.
    Bedanke mich schon mal jetzt ganz herzlich für die rasche und kompetente Info :)
    PS.: das Forum und die Leute hier sind ein Hammer... immer bereit einem sofort Rede und Antwort zu stehen :)
    MfG
    Alex S.

    Anzeige
    AW: noch offen...
    14.12.2007 15:14:30
    Alex
    Hallo Heinz,
    habe nun dank deiner Vorarbeit alles soweit hinbekommen, allerdings ein Problem stellt sich mir noch.
    Ich schaffe es nicht die ersten 12 Werte zu drucken... er nimmt bei mir mit =INDEX(Liste!A:C;2+Liste!$E$1;1) nur die Namen 13 bis 24 in der Tabelle Liste.
    Darf ich fragen wie du die Matrix deklarierst? Du schreibst ja nur =INDEX(Liste;2+Liste!$E$1;1)... bei mir läuft das jedoch nicht... wenn ich das so übernehme erscheint bei mir in der jeweiligen Zelle #NAME? - habe jedoch die Zelle gleich formatiert wie du in deinem Bsp.
    Bitte nochmals um Hilfeeee :)
    MfG
    Alex S.

    Anzeige
    AW: noch offen...
    15.12.2007 20:01:25
    HAW
    Hallo Alex,
    habe erst jetzt deine Frage gesehen.
    das kommt darauf an, was in der Zelle E1 der Tabelle Liste steht.
    Mit dieser Zahl wird gesteuert, welcher 12er-Block verwendet wird.
    Für die ersten 12 muss da eine 0 stehen, für die zweiten 12 eine 12, für die dritten 12 eine 24 usw.
    Vermutlich hast du eine 12 stehen, dann werden in der Tabelle Bondruck die Datensätze 13 bis 24 (also der zweite 12er-Block) angezeigt.
    Liste ist als Name definiert.
    Sie mal unter Einfügen/Name/Definieren nach:
    Da findest du den Namen Liste. Wenn du ihn anklickst kannst du unten die Definition sehen:
    =Liste!$A;$C
    Du kannst natürlich anstatt dem Namen Liste auch den definierten Bereich Liste!$A:$C verwenden, wie du das ja offensichtlich getan hast.
    Gruß
    Heinz

    Anzeige
    AW: noch offen...
    15.12.2007 22:04:08
    Alex
    Hallo Heinz,
    ja - ich habe schon gesehen - dass beim ersten mal der Wert auch 0 gesetzt wird - aber sobald das Makro durch ist - ist der Wert auf 12 - und erst dann beginnt er mit dem Druck... somit druckt er auch die Datensätze 13 - 24. werde nun mal versuchen - dass er beim wert 0 gleich die ersten 12 Datensätze druckt und erst danach die Zahl auf 12 erhöht. Soweit ich das gesehen habe - funktioniert dies aber in deiner originalen Version auch nicht... Versuche schnell mal, das ganze in eine Schleife zu packen. Oder aber ich setze den Wert im Makro Drucken auf 0 und erhöhe ihn erst nachdem die Schleife ein mal durchgelaufen ist.
    Sollte ich es nicht hinbekommen - melde ich mich nochmals...
    danke derweilen
    mfg
    Alex S.

    Anzeige
    AW: noch offen...
    15.12.2007 23:01:00
    Alex
    Hallo Heinz,
    bin nun nach etlichen Versuchen drauf gekommen, dass ich die automatische Formelberechnung ausgeschalten hatte. nachdem nun vom Manuell wieder auf Automatisch angehakt ist-läuft alles bestens...
    danke dir für deine Geduld und Mühe :)
    Schönes WE noch ...
    MfG
    Alex S.
    Anzeige
    ;

    Forumthreads zu verwandten Themen

    Anzeige
    Anzeige
    Entdecke relevante Threads

    Schau dir verwandte Threads basierend auf dem aktuellen Thema an

    Alle relevanten Threads mit Inhaltsvorschau entdecken
    Anzeige
    Anzeige

    Infobox / Tutorial

    Excel Seriendruck: Datenübertragung zwischen Excel und Word


    Schritt-für-Schritt-Anleitung

    1. Vorbereiten der Excel-Daten:

      • Stelle sicher, dass deine Daten in Excel gut strukturiert sind. Die Spalten sollten klare Überschriften haben, wie Name, Klasse und Datum.
    2. VBA-Makro erstellen:

      • Öffne den VBA-Editor in Excel (Alt + F11).
      • Füge ein neues Modul hinzu und kopiere den folgenden Code:
      Sub BonSchueler()
         Dim name As Long
         Dim Row As Range
         Dim rngSource As Range, Copy As Range
         Dim cell As Range
         Dim ws1 As Worksheet, ws2 As Worksheet
         Set ws1 = Sheets("Datenbank")
         Set ws2 = Sheets("Bondruck")
         Set rngSource = ws1.Range("D2:AH34")
         Application.ScreenUpdating = False
         Worksheets("Bondruck").Cells.Clear
      
         For name = 1 To ws1.Cells(2, 1).End(xlDown).Row
             If Not IsEmpty(ws1.Cells(name + 1, 3)) Then ' Wenn Datum vorhanden ist
                 ws2.Cells(4 + name, 3) = ws1.Cells(name + 1, 1) ' Name
                 ws2.Cells(5 + name, 3) = ws1.Cells(name + 1, 2) ' Klasse
                 ws2.Cells(6 + name, 3) = ws1.Cells(name + 1, 3) ' Datum
             End If
         Next
         Application.ScreenUpdating = True
      End Sub
    3. Makro ausführen:

      • Schließe den VBA-Editor und führe das Makro in Excel aus (Entwicklertools > Makros).
    4. Seriendruck in Word:

      • Öffne Word und gehe zu "Sendungen" > "Serienbrief starten".
      • Wähle „Vorhandene Liste verwenden“ und wähle deine Excel-Datei aus.
      • Stelle sicher, dass die Platzhalter korrekt gesetzt sind und führe den Druck aus.

    Häufige Fehler und Lösungen

    • Problem: Das Datum wird als Zahl angezeigt.

      • Lösung: Stelle sicher, dass die Datumsspalte in Excel korrekt formatiert ist. Gehe zu „Zellen formatieren“ und wähle „Datum“.
    • Problem: Makro läuft in einer Endlosschleife.

      • Lösung: Überprüfe die Bedingungen in deiner Schleife. Achte darauf, dass die Schleife die richtige Anzahl von Iterationen hat.
    • Problem: Typen sind nicht kompatibel.

      • Lösung: Überprüfe die Datentypen in deinem Code. Stelle sicher, dass du mit den richtigen Typen arbeitest (z.B. Long für Zeilen).

    Alternative Methoden

    • Excel Seriendruck ohne Word:

      • Du kannst Daten auch direkt in Excel drucken, indem du die Daten in eine Vorlage überträgst und die Druckfunktion von Excel verwendest.
    • Verwendung von Power Query:

      • Mit Power Query kannst du Daten aus verschiedenen Quellen abrufen, transformieren und in Excel laden, was den Seriendruckprozess erheblich vereinfacht.

    Praktische Beispiele

    • Beispiel 1: Ein einfacher Serienbrief, der Namen und Adressen aus einer Excel-Tabelle anzeigt, die in einem Word-Dokument formatiert sind.

    • Beispiel 2: Erstelle einen Serienbrief für Einladungen, wobei das Datum nur dann übernommen wird, wenn ein Datum in der Excel-Tabelle vorhanden ist.


    Tipps für Profis

    • Fehlerbehebung: Aktiviere die automatische Berechnung, wenn du Probleme mit Formeln hast, die nicht aktualisiert werden.

    • Makros optimieren: Verwende Application.Calculation = xlCalculationManual vor der Schleife und setze es nach der Schleife zurück, um die Leistung zu verbessern.

    • Datenvalidierung: Achte darauf, dass deine Daten in Excel für den Seriendruck gut validiert sind, um Fehler im Word-Dokument zu vermeiden.


    FAQ: Häufige Fragen

    1. Wie kann ich sicherstellen, dass nur nicht leere Zellen in den Seriendruck übernommen werden?
    Du kannst die If Not IsEmpty(...)-Bedingung im VBA verwenden, um zu überprüfen, ob eine Zelle leer ist, bevor du den Wert überträgst.

    2. Was tun, wenn der Serienbrief das Datum als Zahl anzeigt?
    Stelle sicher, dass die Datumsformatierung in deiner Excel-Datei korrekt eingestellt ist. Du kannst die Zellen formatieren, bevor du den Seriendruck startest.

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Entdecke mehr
    Finde genau, was du suchst

    Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

    Suche nach den besten Antworten
    Unsere beliebtesten Threads

    Entdecke unsere meistgeklickten Beiträge in der Google Suche

    Top 100 Threads jetzt ansehen
    Anzeige