Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA - Daten aktualisieren wenn Tabellenblatt vorhanden ist

VBA - Daten aktualisieren wenn Tabellenblatt vorhanden ist
19.11.2019 08:09:02
Blex2702
Hallo,
ich bin neu hier und benötige Eure Hilfe.
Ich habe ein Testtemplate erstellt, in dem bestimmte Informationen zu Testfällen eingetragen werden. Das Template besteht anfangs aus drei Tabellenblättern „Übersicht“, „Mustervorlage“ und „Ausfüllhinweise“. Die Mustervorlage ist durch Passwort vor Veränderungen geschützt.
In der Übersicht werden allgemeine Informationen zu den einzelnen Testfällen eingetragen. Via Makro wird, nach dem die Informationen erfasst worden sind, für jeden einzelnen Testfall ein Arbeitsblatt (nach Mustervorlage) angelegt. Der Name des Arbeitsblattes ergibt sich aus Zelle A7, A8, ff. Sodann werden auf den einzelnen Tabellenblättern weitere Informationen erfasst.
Sobald wir zur Testdurchführungsphase gelangen, werden sowohl in den einzelnen Tabellenblättern, als auch auf der Übersichtsseite Informationen ergänzt. Die Informationen auf der Übersichtsseite sollen sich z.B. nach Betätigung eines Buttons „aktualisieren“ automatisch auf den entsprechenden zugehörigen Tabellenblättern aktualisieren. Und hier hapert es mit meinen Kenntnissen.
Den VBA-Code zur Anlage neuer Tabellenblätter habe ich mir auch bereits aus verschiedenen Foren zusammengebaut. Kann der ggf. dahingehend erweitert werden, dass eine Prüfung stattfindet, ob es ein Tabellenblatt bereits gibt, falls nein, dieses angelegt werden soll und andernfalls nur aktualisiert werden soll?
Ich hoffe, ich habe mich klar ausgedrückt. Das Excel-Sheet werde ich hier hochladen. Der bisherige Code sieht wie folgt aus:
Sub TabellenErstellen()
Dim LastRow, I, sht As Worksheet
With Sheets("Übersicht")
LastRow = .Cells(Rows.Count, "A").End(xlUp).Row
For I = 7 To LastRow
On Error Resume Next
Set sht = Sheets(.Range("A" & I).Value)
If Err.Number > 0 Then
Sheets("Mustervorlage").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = .Range("A" & I)
ActiveSheet.Range("B3") = .Range("D2")
ActiveSheet.Range("B4") = .Range("B1")
ActiveSheet.Range("B6") = .Range("A" & I)
ActiveSheet.Range("B7") = .Range("B" & I)
ActiveSheet.Range("B8") = .Range("F" & I)
ActiveSheet.Range("D3") = .Range("D1")
ActiveSheet.Range("D4") = .Range("B2")
ActiveSheet.Range("D6") = .Range("C" & I)
ActiveSheet.Range("D7") = .Range("D" & I)
ActiveSheet.Range("D8") = .Range("E" & I)
End If
Next
End With
End Sub

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Daten aktualisieren wenn Tabellenblatt vorhanden ist
19.11.2019 08:53:27
Beverly
Hi,
du musst das Passwort per Code aufheben damit du Daten eintragen kannst und am Ende wieder setzen - nach diesem Prinzip:
Sub TabellenErstellen()
Dim LastRow, I, sht As Worksheet, strTab As String
With Sheets("Übersicht")
LastRow = .Cells(Rows.Count, "A").End(xlUp).Row
For I = 7 To LastRow
strTab = .Range("A" & I).Value
On Error Resume Next
Set sht = Sheets(strTab)
If Err.Number > 0 Then
Sheets("Mustervorlage").Copy After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = .Range("A" & I)
On Error GoTo 0
End If
Sheets(strTab).Unprotect "DeinPasswort"  '

Du kannst es aber auch anders lösen: hebe generell den Schutz der Mustervorlage auf und blende sie stattdessen aus. Beim Kopieren blendest du sie ein, erstellst alle neuen Blätter, trägst die Daten ein und setzt dann den Blattschutz auf jedes neue Blatt. Ganz am Ende blendest du die Mustervorlage wieder aus.


Anzeige
AW: VBA - Daten aktualisieren wenn Tabellenblatt vorhanden ist
19.11.2019 11:05:05
Blex2702
Hallo Beverly,
danke für Deine Antwort.
Aber das ist nicht das Problem. Trotz Passwortschutz werden weitere Tabellenblätter angelegt, die editierbar sind. Ich habe die Mustervorlage deswegen gesperrt, damit andere Nutzer des Templates die Vorlage nicht verändern.
Die neu anzulegenden Tabellenblätter und die Übersicht werden editiert.
Mein Wunsch wäre, wenn auf dem neuen Tabellenblatt die Zelle B9 beschrieben wird, sich dieser Inhalt direkt in die entsprechende Zelle der Übersicht einträgt (hier: "G" & I).
Das gleiche gilt für D9 = ("H" & I) und D7 = ("D" & I).
Anzeige
AW: VBA - Daten aktualisieren wenn Tabellenblatt vorhanden ist
19.11.2019 14:34:31
Beverly
Hi,
wenn man die Mustervorlage ausblendet kann niemand sie ändern... Aber das war nur ein Vorschlag.
Ich bin von deinem Code ausgegangen und deiner Frage:
  • "Den VBA-Code zur Anlage neuer Tabellenblätter habe ich mir auch bereits aus verschiedenen Foren zusammengebaut. Kann der ggf. dahingehend erweitert werden, dass eine Prüfung stattfindet, ob es ein Tabellenblatt bereits gibt, falls nein, dieses angelegt werden soll und andernfalls nur aktualisiert werden soll"?

  • Und genau das macht mein Code.
    Zu deiner anderen Frage: soll das für jedes neu erstellte Blatt gelten, dass die jeweilige Zelle auf der Übersicht geändert wird und wie genau stellst du dir das vor? Bei einer erneuten Eingabe wird doch die auf der Übersicht jedesmal überschrieben und was meinst du mit B9 soll in ("H" & I) eingetragen werden?


    Anzeige
    AW: VBA - Daten aktualisieren wenn Tabellenblatt vorhanden ist
    20.11.2019 12:29:11
    Blex2702
    Hallo Karin,
    Du hattest Recht. Ich muss den PW-Schutz aufheben, bevor ich die neuen Tabellenblätter nach der Vorlage erstelle. Komischerweise hat das gestern immer super funktioniert. Beim Ausführen des Makros heute, waren sämtliche neu angelegten Tabellenblätter leer und konnten nicht editiert werden.
    Habe den Blattschutz komplett rausgenommen und blende die Vorlage nun ein und direkt wieder aus. Das funktioniert super!! Danke für den Tipp!
    Um auf Deine Frage zu Antworten:
    Nach dem alle benötigten Informationen auf den neuen Tabellenblättern eingetragen sind, wird die Datei gespeichert. Sobald es daran geht, die beschriebenen Testfälle durchzuführen, wird in die Datei auf den jeweiligen Tabellenblättern das Ergebnis der Durchführung der Testfälle (Status), als auch das Datum des Testtags und der Name des Testers eingetragen. Diese Änderung soll im Tabellenblatt "Übersicht" in den jeweiligen Zellen übernommen werden.
    Das Problem, das ich habe ist:
    Ich weiß bei Schreiben des Makros nicht, wie die Tabellenblätter heißen, in denen Änderungen vorgenommen worden sind. Das einzige, dass ich benennen kann, sind die drei Zellen pro Tabellenblatt, in denen Änderungen vorgenommen werden und die Zellen (als Variable), in die die Daten auf dem Blatt "Übersicht" übernommen werden sollen.
    Wahrscheinlich macht es mehr Sinn, dass in ein neues Makro zu schreiben.
    Ich hoffe, das wird jetzt etwas deutlicher?
    LG Alexandra
    Anzeige

    324 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige