Erstellen eines Deckblattes aus Datensatz

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Erstellen eines Deckblattes aus Datensatz
von: Meike
Geschrieben am: 01.12.2015 15:02:13

Hallo,
vielen Dank an Bernd und ludicla für die schnellen Antworten :-)
Ich möchte gerne im Tabellenblatt 1 zeilenweise Daten eingeben und diese sollen dann in den vorgesehenen Feldern im Tabellenblatt 2 erscheinen.
Nach jeder Zeile wird das Deckblatt gedruckt, so dass es sich mit der Eingabe in der nächsten Zeile (in Tabelle1) wieder neu befüllen soll.
Hat jemand eine Idee, wie ich das umsetzen könnte? Leider habe ich keine Erfahrung mit VBA/ Makros.
https://www.herber.de/bbs/user/101938.xlsx
Vielen Dank & freundliche Grüße
Meike

Bild

Betrifft: AW: Erstellen eines Deckblattes aus Datensatz
von: UweD
Geschrieben am: 01.12.2015 16:26:28
Hallo

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Fehler
    Dim Z As Double, TB1, TB2
    If Not Intersect(Target, Columns(7)) Is Nothing Then
        Set TB1 = ActiveSheet
        Set TB2 = Sheets("Tabelle2")
        Z = Target.Row
        If WorksheetFunction.CountA(Range(Cells(Z, 1), Cells(Z, 7))) <> 7 Then
            MsgBox " Alle Spalten der Reihe Ausfüllen"
            Exit Sub
        Else
            With TB2
                .Cells(2, 2) = TB1.Cells(Z, 2) ' Firma
                .Cells(2, 6) = TB1.Cells(Z, 3)  ' int. Re-Nr.
                '.Cells(10, 2) = TB1.Cells(Z, ??) ' ext. Re-Nr.
                .Cells(10, 6) = TB1.Cells(Z, 5) ' Abteilung.
                .Cells(12, 2) = TB1.Cells(Z, 1) ' Eingang
                .Cells(14, 2) = TB1.Cells(Z, 7) ' Fälligkeit.
                .Cells(16, 2) = TB1.Cells(Z, 6) & " zus. Text" ' Skonto.
                .Cells(16, 6) = TB1.Cells(Z, 4) ' Betrag.
                
                .PrintOut
                TB1.Cells(Z, 9) = "gedruckt"
            End With
        End If
        
    End If
    Err.Clear
Fehler:
        If Err.Number <> 0 Then MsgBox "Fehler: " & Err.Number & vbLf & Err.Description: Err. _
Clear
End Sub
- Rechtsclick auf den Tabellenblattreiter von Tabelle1
- Code anzeigen
- Das Makro dort reinkopieren
Wenn du in Spalte 1 anfängst und dich nach hinten durcharbeitest, wird, wenn du Spalte 7 verlässt
geprüft, ob alle Spalten gefüllt sind.
Dann werden die Daten übertragen und ausgedruckt
OK??
Gruß UweD

Bild

Betrifft: AW: Erstellen eines Deckblattes aus Datensatz
von: Meike
Geschrieben am: 02.12.2015 08:25:17
Hallo UweD,
VIELEN DANK!!! Das ging ja schnell. Es funktioniert super.
Nur eine Frage habe ich noch. Sobald die Reiter in der Arbeitsmappe umbenannt werden, müsste ich ja auch das Makro anpassen oder?
Sprich, üblicherweise sind die Tabellenblätter nach den einzelnen Monaten benannt.
VIELEN DANK noch einmal!!
VG
Meike

Bild

Betrifft: AW: Erstellen eines Deckblattes aus Datensatz
von: UweD
Geschrieben am: 02.12.2015 09:55:14
Hallo Meike
Das Ausgabeblatt gibt es ja nur 1 x, den Namen kannst du hier abändern

      Set TB2 = Sheets("Tabelle2") ' z.B. "Ausgabe"
Der Name des Blattes, in dem du die Daten erfasst, ist egal,
      Set TB1 = ActiveSheet

da das Makro im Blatt selbst zugeordnet ist.
Aber!, wenn du die Monate in der Datei "archivieren" möchtest, also neue Monate hinzufügst, dann muss das Makro mit in das neue Blatt kopiert werden.
Das kopieren kann aber auch automatisiert werden.
- In ein normales Modul einfügen..
- Aus einem Datenerfassungsblatt ausführen
- (Druckblatt habe ich in "Ausgabe" umbenannt)
Sub Neuer_Monat()
    On Error GoTo Fehler
    Dim TB1, TB2, JaNein
    Dim LR&
    Set TB1 = ActiveSheet
    If TB1.Name = "Ausgabe" Then
        MsgBox "Kopie von diesem Blatt nicht möglich"
        Exit Sub
    End If
    JaNein = MsgBox("Neues Monatsblatt anlegen", vbYesNo + vbQuestion, "Blatt kopieren")
    If JaNein = vbYes Then
        LR = TB1.Cells(Rows.Count, 1).End(xlUp).Row ' letzte Zeile der Spalte 1
        TB1.Copy After:=Sheets(Sheets.Count - 1) 'vor das Letzte
        Set TB2 = ActiveSheet
        TB2.Name = Format(Date, "MM.YYYY") ' Benennung Monat.Jahr
        Application.EnableEvents = False
        TB2.Rows("3:" & LR).Delete Shift:=xlUp ' Löschen 
        TB2.Cells(3, 1).Select
    End If
    Err.Clear
Fehler:
    If Err.Number <> 0 Then MsgBox "Fehler: " & Err.Number & vbLf & Err.Description: Err.Clear
    Application.EnableEvents = True
End Sub
Gruß UweD

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Erstellen eines Deckblattes aus Datensatz"