Mehrere Tabellentexte auf einem Tabellenblatt zusammenfassen?


27.02.2023, 18:46

Hallo DanKirpan,

kannst du mir bei der Anpassung nochmal helfen?

 !! Info alle Blätter haben noch einen Blattschutz!!

Tabelle 1 = Deckblatt

Tabelle 2 = VDE und Funktionsprüfung

Tabelle 3 = Stromdurchflutung

Tabelle 4 = Jochmagnetisierung

Tabelle 5 = Spulenmagnetisierung

Tabelle 6 = Hilfsdurchflutung

Tabelle 7 = Induktionsdurchflutung

Tabelle 8 = ASTM

Tabelle 9 = Entmagn., Feldlagen und UV-Beleuchtung

Tabelle 10 = EM6

Tabelle 11 = Prüfmittel

Tabelle 12 = Bewertung

Tabelle 13 Zertifikat (Ziel Tabelle A95)

Danke schon mal im Voraus.

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Hallo,

dazu kannst du dies verwenden:

Sub Tabellentext_zusammenfassen()
Dim i As Long, lZei As Long
Dim CopBer As Range, Zelle As Range
Dim AusBer As String, AusBlatt As String


    For i = 1 To 12
'Bereiche und Blatt festlegen das ausgelesen wird
        AusBlatt = "Tabelle" & i
        Select Case i
            
        Case 1
            AusBer = "A45:A47"
        Case 2
            AusBer = "A35:A37, A68:A80, A105:A117, A141:A155, A178:A196"
        Case 3 'gilt für 3-7 da die Fälle 4-7 nicht anders festgelegt sind
            AusBer = "A40:A45, A85:A90, A130:A135, A175:A180"
        Case 8
            AusBer = "A42:A44"
        Case 9
            AusBer = "A44:A48"
        Case 10
            AusBer = "A37:A40"
        Case 11
            AusBer = "A27:A48"
        Case 12
            AusBer = "A27:A31"
        End Select
        
        Set CopBer = ActiveWorkbook.Sheets(AusBlatt).Range(AusBer)
        
'Inhalte kopieren unter Ausschluss von Leerwerten
        With ActiveWorkbook.Sheets("Tabelle13")
            For Each Zelle In CopBer
                If Zelle.Value <> "" Then
                    lZei = Application.WorksheetFunction.Max(95, .Range("A" & .Rows.Count).End(xlUp).Row + 1)
                    .Range("A" & lZei) = Zelle.Value
                End If
            Next Zelle
        End With
    Next i
End Sub

Es wird jedes Blatt durchgegangen, darauf der gewünschte Bereich festgelegt und Zelle für Zelle aufgelistet. Sollten deine Blätter nicht tatsächlich Tabelle1 , Tabelle2 etc. heißen müsstest du den Blattnamen noch mit in den Fällen anpassen.


86hesse 
Fragesteller
 27.02.2023, 17:03

Danke DanKirpan,

werde es gleich Versuchen.

Mfg

0
86hesse 
Fragesteller
 27.02.2023, 17:53

Hallo DanKirpan,

kannst du mir bei der Anpassung nochmal helfen?

 !! Info alle Blätter haben noch einen Blattschutz!!

Tabelle 1 = Deckblatt

Tabelle 2 = VDE und Funktionsprüfung

Tabelle 3 = Stromdurchflutung

Tabelle 4 = Jochmagnetisierung

Tabelle 5 = Spulenmagnetisierung

Tabelle 6 = Hilfsdurchflutung

Tabelle 7 = Induktionsdurchflutung

Tabelle 8 = ASTM

Tabelle 9 = Entmagn., Feldlagen und UV-Beleuchtung

Tabelle 10 = EM6

Tabelle 11 = Prüfmittel

Tabelle 12 = Bewertung

Tabelle 13 Zertifikat (Ziel Tabelle A95)

Danke schon mal im Voraus.

0
DanKirpan  28.02.2023, 12:32
@86hesse

Hallo,

hatte erst jetzt wieder etwas Zeit. Wenn das Zertifkat-blatt ebenfalls einen Schutz hat, müsstest du diesen temporär aufheben, auf den anderen Blättern hat er für das Makro keine Auswirkung.

Sonst genügt es wie gesagt den Blattnamen mit in der Case-Anweisung festzulegen. Tabelle9 "Entmagn., Feldlagen und UV-Beleuchtung" ist bei mir allerdings ein unmöglicher Blattname da er länger als 31 Zeichen ist, da müsstest du nochmal prüfen ob Excel den geplanten Namen bei dir nicht automatisch gekürzt hat und entsprechend Case 9 anpassen.

Sub Tabellentext_zusammenfassen()
Dim i As Long, lZei As Long
Dim CopBer As Range, Zelle As Range
Dim AusBer As String, AusBlatt As String




    For i = 1 To 12
'Bereiche und Blatt festlegen das ausgelesen wird
        AusBlatt = "Tabelle" & i
        Select Case i
            
        Case 1
            AusBer = "A45:A47"
            AusBlatt = "Deckblatt"
        Case 2
            AusBer = "A35:A37, A68:A80, A105:A117, A141:A155, A178:A196"
            AusBlatt = "VDE und Funktionsprüfung"
        Case 3
            AusBer = "A40:A45, A85:A90, A130:A135, A175:A180" 'gilt für 3-7 da die Fälle 4-7 nicht anders festgelegt sind
            AusBlatt = "Stromdurchflutung"
        Case 4
            AusBlatt = "Jochmagnetisierung"
        Case 5
            AusBlatt = "Spulenmagnetisierung"
        Case 6
            AusBlatt = "Hilfsdurchflutung"
        Case 7
            AusBlatt = "Induktionsdurchflutung"
        Case 8
            AusBer = "A42:A44"
            AusBlatt = "ASTM"
        Case 9
            AusBer = "A44:A48"
            AusBlatt = "Tabelle9"
            'AusBlatt = "Entmagn., Feldlagen und UV-Beleuchtung" 'Name länger als 31 Zeichen
        Case 10
            AusBer = "A37:A40"
            AusBlatt = "EM6"
        Case 11
            AusBer = "A27:A48"
            AusBlatt = "Prüfmittel"
        Case 12
            AusBer = "A27:A31"
            AusBlatt = "Bewertung"
        End Select
        
        Set CopBer = ActiveWorkbook.Sheets(AusBlatt).Range(AusBer)
        
'Inhalte kopieren unter Ausschluss von Leerwerten
        With ActiveWorkbook.Sheets("Zertifikat") 'Tabelle13 = Zertifikat
            For Each Zelle In CopBer
                If Zelle.Value <> "" Then
                    lZei = Application.WorksheetFunction.Max(95, .Range("A" & .Rows.Count).End(xlUp).Row + 1)
                    .Range("A" & lZei) = Zelle.Value
                End If
            Next Zelle
        End With
    Next i
End Sub


0
86hesse 
Fragesteller
 28.02.2023, 15:00
@DanKirpan

Danke ich Versuche es später, melde mich aber nochmal bei dir.

Vielen Dank

0
86hesse 
Fragesteller
 28.02.2023, 16:39
@DanKirpan Hallo DanKirpanEs kommt nur noch die MeldungSubscript außerhalb des Bereichs (Fehler 9 )

Fehler bei:

Set CopBer = ActiveWorkbook.Sheets(AusBlatt).Range(AusBer)

 Sub Tabellentext_zusammenfassen()

Dim i As Long, lZei As Long

Dim CopBer As Range, Zelle As Range

Dim AusBer As String, AusBlatt As String

  For i = 1 To 12

'Bereiche und Blatt festlegen das ausgelesen wird

    AusBlatt = "Tabelle" & i

    Select Case i

       

    Case 1

      AusBer = "A45:A47"

      AusBlatt = "Deckblatt"

    Case 2

      AusBer = "A35:A37, A68:A80, A105:A117, A141:A155, A178:A196"

      AusBlatt = "VDE und Funktionsprüfung"

    Case 3

      AusBer = "A40:A45, A85:A90, A130:A135, A175:A180" 'gilt für 3-7 da die Fälle 4-7 nicht anders festgelegt sind

      AusBlatt = "Stromdurchflutung"

    Case 4

      AusBlatt = "Jochmagnetisierung"

    Case 5

      AusBlatt = "Spulenmagnetisierung"

    Case 6

      AusBlatt = "Hilfsdurchflutung"

    Case 7

      AusBlatt = "Induktionsdurchflutung"

    Case 8

      AusBer = "A42:A44"

      AusBlatt = "ASTM"

    Case 9

      AusBer = "A44:A48"

      AusBlatt = "Entmag.,Feldlagen und UV-Beleuc"

      'AusBlatt = "Entmagn., Feldlagen und UV-Beleuchtung" 'Name länger als 31 Zeichen

    Case 10

      AusBer = "A37:A40"

      AusBlatt = "EM6"

    Case 11

      AusBer = "A27:A48"

      AusBlatt = "Prüfmittel"

    Case 12

      AusBer = "A27:A31"

      AusBlatt = "Bewertung"

    End Select

     

    Set CopBer = ActiveWorkbook.Sheets(AusBlatt).Range(AusBer)

     

'Inhalte kopieren unter Ausschluss von Leerwerten

    With ActiveWorkbook.Sheets("Zertifikat") 'Tabelle18 = Zertifikat

      For Each Zelle In CopBer

        If Zelle.Value <> "" Then

          lZei = Application.WorksheetFunction.Max(95, .Range("A" & .Rows.Count).End(xlUp).Row + 1)

          .Range("A" & lZei) = Zelle.Value

        End If

      Next Zelle

    End With

  Next i

End Sub

0
DanKirpan  28.02.2023, 16:53
@86hesse

Fehler 9 bedeutet das es auf etwas zugreifen versucht, das nicht existiert. Haben sich beim benennen der Tabellen evtl. Leerzeichen verdoppelt oder am Wortende eingeschlichen?

0
86hesse 
Fragesteller
 28.02.2023, 16:55
@86hesse

Sorry mein Fehler dein Code funktioniert.

Habe

nur noch eins zum Thema

ich habe noch etwas in der Tabelle18 = Zertifikat bei A99:100 und 103:104 stehen

die zwei Zeilen sollten nach unten geschoben werden und als letztes stehen.

Sorry

für die Umstände

0
DanKirpan  28.02.2023, 17:13
@86hesse

Ah okay und kein Problem wegen den Umständen^^

Das ist dasselbe Blatt wie das auf das die Einträge geschrieben werden oder? Dann müsste man sie entweder zwischenspeichern oder die Eintragszeile anders festlegen.

(Nicht auf senden geklickt hier der überarbeitete Absatz des Codes)

'Inhalte kopieren unter Ausschluss von Leerwerten
        With ActiveWorkbook.Sheets("Zertifikat") 'Tabelle13 = Zertifikat
            For Each zelle In CopBer
                If zelle.Value <> "" Then
                    lZei = Application.WorksheetFunction.Max(95, lZei + 1)
                    .Range("A" & lZei).EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
                    .Range("A" & lZei) = zelle.Value
                End If
            Next zelle
        End With
    Next i

0