Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Sheet Name aus Zelle "einlesen"

Forumthread: Sheet Name aus Zelle "einlesen"

Sheet Name aus Zelle "einlesen"
15.03.2016 12:55:14
Alex
Servus,
ich habe eine Suchfunktion: Suchbegriff steht in Spalte D, Worksheet, in dem gesucht wird, steht in Spalte B.
Spalte A soll jedes mal, wenn das Blatt geöffnet wird, dynamisch aktualisiert werden, also in welcher Zeile das Suchergebnis gefunden wurde.
Jetzt dachte ich mir einfach:
Set ws = cells(i,2) (oder .value: geht auch nicht)
leider scheint das nicht zu funktionieren....
wie bekomme ich denn dem "ws" gesagt, welches Worksheet er denn ist, abhänig von welcher Zelle in der for i Schleife?
Private Sub Worksheet_Activate()
Dim rng As Range
Dim i As Integer
Dim lngzeile As Long
Dim ws As Worksheet
lngzeile = Worksheets("Changelog").UsedRange.Rows.Count
For i = 1 To lngzeile
Set ws = Cells(i, 2)
Set rng = Sheets(ws).Cells.Find(What:=Cells(i, 4).Text, after:=ActiveCell, LookIn:=xlFormulas,  _
LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False)
Cells(i, 1) = rng.Address
Next i
End Sub
Danke für Hilfe!
Gruß Alex!

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sheet Name aus Zelle "einlesen"
15.03.2016 12:58:28
EtoPHG
Hallo Alex,
probier_
Set ws = Worksheets(Cells(i, 2))

Gruess Hansueli

AW: Sheet Name aus Zelle "einlesen"
15.03.2016 13:18:03
Alex
Hey Hansueli,
bei deiner Lösung kommt: "typen unverträglich"
Das muss doch irgendwie möglich sein, aber im Internet auch gar nichts dazu gefunden...
Gruß Alex

Anzeige
AW: Sheet Name aus Zelle "einlesen"
15.03.2016 13:31:27
Steve
Hallo Alex,
Hansuelis Lösung baut darauf auf, dass in deiner Zelle ein eindeutiger Text steht, wenn nicht musst du einen daraus machen. Das kann z.B. bei Datums und Uhrzeitangaben auftreten. Bei ganzen Zahlen würde er eventuell einen Indexfehler bringen, denn Zahlen sind für ihn keine Namen sondern das wievielte Tabellenblatt von links an gezählt. Daher müsste man in solch einem Fall auch unbedingt CStr() verwenden um das Tabellenblatt was meinetwegen "5" heist zu erwischen und nicht das fünfte.
Set ws = Worksheets(CStr(Cells(i,2)))
CStr() macht nichts anderes als deinen Zellenwert in Text zu konvertieren.
lg Steve

Anzeige
AW: Sheet Name aus Zelle "einlesen"
15.03.2016 13:34:01
ChrisL
Hi Alex
Find müsstest du dann auch noch entsprechend referenzieren.
Sub t()
Dim rng As Range
Dim i As Integer
Dim lngzeile As Long
Dim ws As Worksheet
With Worksheets("Changelog")
lngzeile = .UsedRange.Rows.Count
For i = 1 To lngzeile
Set ws = Worksheets(CStr(.Cells(i, 2)))
Set rng = ws.Cells.Find(What:=.Cells(i, 4).Text, after:=ActiveCell, LookIn:=xlFormulas,  _
_
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False)
.Cells(i, 1) = rng.Address
Next i
End With
End Sub

cu
Chris

Anzeige
AW: Sheet Name aus Zelle "einlesen"
15.03.2016 13:58:42
Alex
Hey Chris, Steve, Hansueli,
das mit dem CStr macht Sinn.
Es funktioniert jetzt so halbwegs,
Problem:
lngzeilee = .UsedRange.Rows.Count

zeigt mir immer 52 an (über msgbox getestet)... alles schon gelöscht, formatiert, neues Tabellenblatt mit Changelog erstellt... nichts, immer 52....
Ich probiere jetzt mal noch gleich ne andere Möglichkeit aus.
DANKE
lg Alex

Anzeige
AW: Sheet Name aus Zelle "einlesen"
15.03.2016 14:01:26
ChrisL
Hi Alex
Oder so...
lngzeile = .Range("B65536").End(xlUp).Row
cu
Chris

AW: Sheet Name aus Zelle "einlesen"
15.03.2016 14:01:33
Alex
Hallo,
anbei der funktionierende Code der vollständigkeitshalber :)
Private Sub Worksheet_Activate()
Dim rng As Range
Dim i As Long
Dim lngzeilee As Long
Dim ws As Worksheet
Dim norow As Long
norow = ActiveSheet.Range("A" & ActiveSheet.Rows.Count).End(xlUp).Row
With Worksheets("Changelog")
.Unprotect Password:="Secret"
For i = 2 To norow
Set ws = Worksheets(CStr(.Cells(i, 2)))
Set rng = ws.Cells.Find(What:=.Cells(i, 4).Text, after:=ActiveCell, LookIn:=xlFormulas,  _
_
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False)
.Cells(i, 1) = rng.Address
Next i
End With
End Sub
Gruß+Danke
Alex!
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Dynamisches Einlesen des Sheet-Namens aus einer Zelle in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Öffne das VBA-Editor-Fenster: Drücke ALT + F11.

  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (DeineDatei.xlsx)" > Einfügen > Modul.

  3. Kopiere und füge folgenden Code ein:

    Private Sub Worksheet_Activate()
        Dim rng As Range
        Dim i As Long
        Dim lngzeile As Long
        Dim ws As Worksheet
        Dim norow As Long
    
        norow = ActiveSheet.Range("A" & ActiveSheet.Rows.Count).End(xlUp).Row
        With Worksheets("Changelog")
            .Unprotect Password:="Secret"
            For i = 2 To norow
                Set ws = Worksheets(CStr(.Cells(i, 2))) ' Einlesen des Sheet-Namens aus Zelle
                Set rng = ws.Cells.Find(What:=.Cells(i, 4).Text, after:=ActiveCell, LookIn:=xlFormulas, _
                LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, _
                SearchFormat:=False)
                .Cells(i, 1) = rng.Address ' Speichern der Adresse des Suchergebnisses
            Next i
        End With
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Aktiviere das Arbeitsblatt „Changelog“ und teste die Funktionalität.


Häufige Fehler und Lösungen

  • Fehler: "Typen unverträglich": Stelle sicher, dass die Zelle, aus der du den Sheet-Namen einliest, auch wirklich einen gültigen Namen enthält. Verwende CStr() um sicherzustellen, dass der Wert als String interpretiert wird.

    Set ws = Worksheets(CStr(Cells(i, 2)))
  • Fehler: Falsche Zeilenanzahl: Wenn lngzeile = .UsedRange.Rows.Count immer einen festen Wert zurückgibt, verwende stattdessen:

    lngzeile = .Range("B65536").End(xlUp).Row

Alternative Methoden

  1. Direkte Zuweisung des Arbeitsblatts: Wenn der Sheet-Name immer fest ist, kannst du ihn auch direkt zuweisen:

    Set ws = Worksheets("MeinSheetname")
  2. Verwendung von Application.Match: Suche nach dem Tab-Namen in einer Liste:

    Dim index As Variant
    index = Application.Match(Cells(i, 2), Sheets("Tabellennamen").Range("A:A"), 0)
    If Not IsError(index) Then
        Set ws = Worksheets(Cells(index, 1))
    End If

Praktische Beispiele

Angenommen, du hast in Spalte B die Sheet-Namen und in Spalte D die Suchbegriffe:

A (Ergebnis) B (Sheet-Namen) D (Suchbegriffe)
Sheet1 Suchbegriff1
Sheet2 Suchbegriff2

Mit dem obigen VBA-Skript wird bei Aktivierung des Arbeitsblatts „Changelog“ in Spalte A die Adresse des Suchbegriffs aus dem entsprechenden Sheet eingetragen.


Tipps für Profis

  • Verwende Fehlerbehandlung: Um die Robustheit deines Codes zu erhöhen, füge Fehlerbehandlungen hinzu, um unvorhergesehene Probleme zu lösen.

    On Error Resume Next
  • Optimierung: Deaktiviere Bildschirmaktualisierungen während der Ausführung, um die Performance zu verbessern:

    Application.ScreenUpdating = False
    ' Dein Code hier
    Application.ScreenUpdating = True

FAQ: Häufige Fragen

1. Wie kann ich ein Worksheet mit einem bestimmten Namen erstellen?
Du kannst ein neues Worksheet mit folgendem Befehl erstellen:

Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "NeuesBlatt"

2. Was mache ich, wenn ich den Sheet-Namen nicht kenne?
Du kannst eine Liste aller Sheet-Namen mit einer Schleife ausgeben:

Dim ws As Worksheet
For Each ws In Worksheets
    Debug.Print ws.Name
Next ws

Diese Anleitung hilft dir, Excel VBA effektiv zu nutzen, um den Sheet-Namen aus einer Zelle zu lesen und dynamisch zu verarbeiten. Nutze die bereitgestellten Tipps und Tricks, um deine Fähigkeiten im Umgang mit Excel VBA weiter zu verbessern!

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige