Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1924to1928
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro automatisch aktualisieren

Makro automatisch aktualisieren
04.04.2023 13:42:19
Blue

Liebes Excelforum,

ich knobel seid einer Weile an einem VBA-Problem und komme nicht mehr weiter. Ich habe ein Makro erstellt, um automatisch benannte Tabellenblätter aus einer Liste zu generieren. Das sieht momentan so aus:

Sub Tabellenblaetter_ERSTMALIG_erstellen()
'** Neues benanntes Tabellenblatt einf¸gen
 
Dim i As Long, ws As Worksheet, blatt As Object, boVorhanden As Boolean

Application.ScreenUpdating = False

With Worksheets("Tabellenblatt")
    For i = 2 To .Cells(.Rows.Count, "A").End(xlUp).Row
        For Each ws In ThisWorkbook.Worksheets
            If ws.Name = .Cells(i, "B") & " " & .Cells(i, "A") Then
                boVorhanden = True
            End If
        Next ws
        If Not boVorhanden Then
            Worksheets("Vorlage").Copy after:=Worksheets(Sheets.Count)
            With ActiveSheet
                .Name = Worksheets("Tabellenblatt").Cells(i, "B") & " " _
                & Worksheets("Tabellenblatt").Cells(i, "A")
                .Cells(4, "E").FormulaLocal = "=Tabellenblatt!B" & i & "&"" ""&Tabellenblatt!A" & i
                .Cells(16, "F").FormulaLocal = "='Tabellenblatt'!C" & i
               
            End With
            boVorhanden = False
        End If
    Next i

End With
End Sub


Mein Problem ist, dass die Tabelle laufend ergänzt wird und entsprechend neue Tabellenblätter erstellt werden sollten. Ich kriege es aber nicht hin, das Makro entsprechend anzupassen, dass dann die neuen Einträge identifiziert werden und nur für sie ein neues Tabellenblatt erstellt wird. Meine erste Idee war es, eine neue Tabelle für "Neuzugänge" anzulegen und die Einträge dann nach dem Erstellen in die endgültige Tabelle zu übertragen. Gibt es eine schönere Lösung dafür, die es auch ermöglichen würde, Daten aus der ursprünglichen Tabelle direkt zu übertragen (wie im Makro vorgesehen)?

Vielen Dank schon einmal im Voraus und viele Grüße
Lila

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro automatisch aktualisieren
04.04.2023 13:57:34
Rudi Maintaire
Hallo,
ich versehe dein Problem nicht.
Es wird doch geprüft, ob das Blatt bereits vorhanden ist. Neu nur wenn nicht.

Gruß
Rudi


AW: Makro automatisch aktualisieren
04.04.2023 15:51:33
Blue
Hi Rudi,

bei mir passiert leider einfach gar nichts, wenn ich das Makro erneut ausführe. Es werden also keine neuen Tabellenblätter erstellt. Jetzt bin ich leider auch totaler VBA-Anfänger, muss ich beim Ausführen schon etwas beachten?

Viele Grüße
Lila


AW: Makro automatisch aktualisieren
04.04.2023 16:01:36
Rudi Maintaire
Hallo,
dann lade mal die Mappe hoch.

Gruß
Rudi


Anzeige
AW: Makro automatisch aktualisieren
04.04.2023 16:06:49
Daniel
Hi
dein Rücksetzen der Variable boVorhanden ist falsch platziert.
der entscheidende Code auf das wesentliche reduziert ist das hier, dh boVorhanden wird dann auf FALSE gesetz, wenn es FALSE ist!

If Not boVorhanden Then
    ...
    boVorhanden = False
End If
also entweder kommt es in den ELSE-teil dieses Ifs (den du noch nicht hast):
If Not boVorhanden Then
    ...
Else
     boVorhanden = False
End If
oder du platzierst es am Anfang, vor der Schleife (was ich für sinnvoller halte):
      For i = 2 To .Cells(.Rows.Count, "A").End(xlUp).Row
          boVorhanden = False
          For Each ws In ThisWorkbook.Worksheets
              If ws.Name = .Cells(i, "B") & " " & .Cells(i, "A") Then
                  boVorhanden = True
              End If
          Next ws
noch besser finde ich, hier den Schleifenzähler ws zu verwenden.
du kannst hier ausnutzen, das in einer For-Each-Schleife der Schleifenzähler NOTHING ist, wenn die Schleife vollständig durchlaufen wurde und bei einem vorzeitigen Abbruch dann das Objekt beim Abbruch enthält. Das lässt folgende elegante Programmierung zu:

  With Worksheets("Tabellenblatt")
      For i = 2 To .Cells(.Rows.Count, "A").End(xlUp).Row
          For Each ws In ThisWorkbook.Worksheets
              If ws.Name = .Cells(i, "B") & " " & .Cells(i, "A") Then Exit for
          Next ws
          If ws Is Nothing  Then
              ...
Gruß Daniel

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige