Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1480to1484
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

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!

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

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

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

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige