Tabellenblatt kopieren und mit Inhalt einer Zelle umbenennen

gunse68

Grünschnabel
Hallo erst mal,
ich habe beim rumstöbern festgestellt, dass hier die VBA-cracks sitzen, die mir hoffentlich bei meinem Problem behilflich sein können.

Ausgangssituation:
Tabellenblatt 1: Stammdatenblatt mit Datensätzen (u.a. Namen, Adressen etc); je Datensatz eine Zeile; dieses Tabellenblatt ändert sich von Jahr zu Jahr (Struktur bleibt gleich nur die Anzahl der Datensätze ändert sich)
Tabellenblatt 2: Wertetabelle, aus dem Stammdatenblatt wird zeilenweise der jeweilige Name übernommen und individuell um Werte ergänzt
Tabellenblatt 3: Auswerteblatt; in einem vorgegebenen Formblatt werden sowohl Daten vom Stammblatt als auch Daten aus der Wertetabelle mithilfe der Funktion sverweis übernommen und dann ausgedruckt

Problem:
ich brauche für jeden Datensatz im Stammblatt ein Auswerteblatt (z.Zt. mache ich das über copy/paste und manuelles umbenennen und anpassen der Funktion sverweis bezüglich des Suchkriteriums:()

gedachte Lösung:
über eine Schleife soll vom Stammblatt der Name aus der Zelle erfasst werden, dann das Auswerteblatt kopiert und mit dem entsprechenden Namen benannt werden, dann der nächste Name usw. bis alle Datensätze erfasst sind

Gibt es eine Möglichkeit in sverweis als Suchkriterium den Tabellennamen zu verwenden?

Ich freue mich auf eure Lösungsvorschläge

MfG
Gunnar

Ich habe jetzt noch ein wenig tiefer gesucht und auch schon vergleichbare Sachen gefunden, habe aber das Problem, dass meine Programmierkünste mit Turbopascal 6 geendet haben und ich nie wirklich in die objektorientierte Geschichte reingefunden habe. Ich blicke also absolut nicht durch, welche Objekte mit welchen Handles ich einsetzen kann und muss...:(

Aber hier vielleicht schon mal ein Stückchen Code, das für mich ganz passabel aussieht:
Code:
Public Sub NeueTabellenausNamen()
    Dim intAnzahl As Integer, intZaehler As Integer
    Dim blnTest As Boolean
    Dim objSheet As Variant
    
    intAnzahl = Sheets("Stammdaten").Range("B4") /hier soll die Anzahl der Durchläufe anhand der Anzahl der Datensätze erfasst werden
    
    For intZaehler = 1 To intAnzahl /die Überprüfung, ob es das Tabellenblatt schon gibt
        blnTest = False
        
        For Each objSheet In Sheets
            If objSheet.Name = Sheets("Stammdaten").Range("B4").Value Then
                blnTest = True
                Exit For
            End If
        Next objSheet
 
        If Not blnTest Then /hier das erstellen und benennen der Tabellenblätter
            Sheets("Auswertung").Copy after:=Sheets(Sheets.Count)
            Sheets(Sheets.Count).Name = Sheets("Stammdaten").Range("B4").Value 
        End If
 
    Next intZaehler
End Sub

Sheets("Stammdaten").Range("B4").Value
in rot markiert das besagte Problem mit den Objekten und ihren Eigenschaften - ich weiß gar nicht ob es das gibt, was ich mir da ausgedacht habe; dass das nicht läuft muss ich nicht erwähnen oder :rolleyes:
 
Zuletzt bearbeitet:
Nochmal hallo,

wenn man lange genug probiert, kriegt man`s doch ans Laufen...

Der Code macht schon was ich will:
Code:
Sub NeueTabellenausNamen()
Dim i As Integer

Anzahl = WorksheetFunction.CountA(Sheets(1).Range("B2:B200"))

For i = 1 To Anzahl
Titel = Sheets(1).Cells(i + 1, 2).Value
ActiveWorkbook.Sheets(3).Copy After:=Worksheets(Worksheets.Count)
Sheets(Worksheets.Count).Name = Titel
Next

End Sub

Das geht bestimmt noch schöner, aber wie schon erwähnt, es läuft.

Das Problem mit dem sverweis entpuppt sich als schwieriger.
Den Namen des Tabellenblattes lasse ich mit =TEIL(ZELLE("Dateiname");FINDEN("]";ZELLE("Dateiname"))+1;31) in Zelle A1 eintragen.
Dann habe ich =SVERWEIS($A$1;Ergebnisse!B2:E4;3;FALSCH)in Zelle B2; kriege jetzt aber auf allen Blättern den gleichen Eintrag. Erst wenn ich das einzelne Blatt aktualisiere, korrigiert er das, trägt mir aber die aktualisierten Werte wiederum auf allen Blättern ein:eek:
Hat für dieses Problem jemand eine Lösung parat?
MfG
Gunnar

ok, auch wenn das hier zu einem Selbstgespräch mutiert, nach ein wenig Spielerei habe ich auch das o.g. Problem gelöst.
Nach ergänzen des Codes um die Zeile
Code:
Sheets(Worksheets.Count).Cells(1, 1) = Titel
und weglassen des Funktionsaufrufes =TEIL(ZELLE("Dateiname");FINDEN("]";ZELLE("Dateiname"))+1;31) in der Zelle A1 funktioniert jetzt auch sverweis wie es soll.
 
Zuletzt bearbeitet:
Zurück