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

Tabellenblatt durch Zelleninhalt auswählen

Forumthread: Tabellenblatt durch Zelleninhalt auswählen

Tabellenblatt durch Zelleninhalt auswählen
16.05.2008 16:58:38
Christoph
Hallo,
Ich würde gerne ein bestehendes Tabellenblatt anhand eines Zelleninhalts anspringen.
Wenn also in Zelle B2 "D1" steht möchte ich das Tabellenblatt D1 ansprechen, leider gelingt mir das nicht, ich bekomme immer den Fehler "Index ausserhalb des gültigen Bereichs"
Code:
MsgBox ActiveWorkbook.Sheets(Cells(1, 2).Value).Index
durch
MsgBox Cells(1, 2).Value erhält man "D1"
und durch
MsgBox ActiveWorkbook.Sheets("D1").Index
auch den richtigen Index. :(
Danke schonmal im vorraus
Gruß Christoph

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenblatt durch Zelleninhalt auswählen
16.05.2008 17:08:27
Sigi
Hi Christoph,
wenn der Tabellenname in Zelle B2 steht solltest du auch die richtige Zelle auslesen: Cells(2, 2).Value !! Cells(1, 2) ist vermutlich leer - deshalb außerhalb des gültigen Bereichs.
Gruß
Sigi

AW: Tabellenblatt durch Zelleninhalt auswählen
16.05.2008 17:16:50
Christoph
Hallo,
Danke für die Antwort Sigi,
Das Problem scheint zu sein das der Wert in einer Zellesteht die B1 und C1 einnimmt, wenn ich es mit einer einzelnen Zelle probiere geht es :) Wie kann ich denn solche verbundenen Zellen gezielt ansprechen?
Danke
Gruß Christoph

Anzeige
AW: Tabellenblatt durch Zelleninhalt auswählen
16.05.2008 17:20:51
Sigi
Hi Christoph,
verbundene Zellen sind der Tod eines Programmierers!
Verzichte auf verbundene Zellen! Ich kenne keinen Grund wozu verbundene Zellen gut sein sollen.
Gruß
Sigi

AW: Tabellenblatt durch Zelleninhalt auswählen
16.05.2008 17:27:11
Christoph
Hallo Sigi,
Na ich wollte das gerne wegen der Übersicht haben, D1 ist die Überschrift der Spalten und diese Unterteilen sich nochmal in M und W :(

Anzeige
AW: Tabellenblatt durch Zelleninhalt auswählen
16.05.2008 17:35:00
Sigi
Hi Christoph,
na ja - es mag ja optisch ganz nett sein, aber beim Programmieren hast du damit an zig Stellen Probleme! Da hat sich Microsoft was nettes für "normale" User einfallen lassen, aber einen Programmierer treiben sie damit zur Kapitulation.
Gruß
Sigi

AW: Tabellenblatt durch Zelleninhalt auswählen
16.05.2008 17:42:00
Christoph
ok hab jetzt verbundenen Zellen rausgenommen, aber hab ein, für mich sehr eigenartiges PRoblem

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngBereich As Range
Dim lngLetzteZeile As Long
Dim Cell As String
lngLetzteZeile = Range("B" & Range("B:B").Rows.Count).End(xlUp).Row
Set rngBereich = Range("B3:B" & lngLetzteZeile)
If Not Intersect(Target, rngBereich) Is Nothing Then
MsgBox Cells(1, 2).Value
MsgBox ActiveWorkbook.Sheets(Cells(1, 2).Value).Index
End If
Set rngBereich = Nothing
End Sub


Ich bekomm die MsgBox mit "D1" und dann einen Fehler, wenn ich "D1" in die Zelle C(1,11) eintrage und alles damit teste funktioniert es. Hast du eine Ahnung woran das liegen könnte?
Danke Gruß Christoph

Anzeige
AW: Tabellenblatt durch Zelleninhalt auswählen
16.05.2008 17:57:44
Sigi
Hi Christoph,
mit ist nicht klar was du erreichen möchtest.
Mit MsgBox Cells(1, 2).Value wird einfach der Wert der Zelle "B1" angezeigt.
Mit MsgBox ActiveWorkbook.Sheets(Cells(1, 2).Value).Index versuchst du den Index der Tabelle mit dem Namen aus Zelle "B1" zu ermitteln. Die Tabelle mit diesem Namen aus "B1" muss exisitieren, sonst gibt's einen Fehler.
Gruß
Sigi

Anzeige
AW: Tabellenblatt durch Zelleninhalt auswählen
16.05.2008 18:05:00
Christoph
Ja das Problem ist das sie existiert und ich trotzdem einen Fehler bekomme,
ich hab die datei mal hochgeladen, dann sieht man auch was eigentl passieren soll
http://schmertz.berserks.org/Sportfest.xlsm
In Tabelle1 ("Klasse 7 (M)") wird der Code ausgeführt den ich oben schon gepostet habe. Allderdings übergibt der die Werte alle an eine Funktion GetPkt, diese soll das dem Tabellenblatt D1 die entsprechenen Punkte zu den Werten holen. Das funktioniert leider nicht wenn ich den Wert aus Zelle B1 (Cells(1,2)) nehmen will. Versuch ich es mit Zelle K1 Cells(1,11) geht es
Ich danke dir das du dich solange mit mir beschäftigst :)

Anzeige
AW: Tabellenblatt durch Zelleninhalt auswählen
16.05.2008 17:21:32
fcs
Hallo Christoph,
aktivieren (anspringen?) eines Blatt geht so.

Sub Batt_in_B2_aktivieren()
On Error GoTo Fehler
ActiveWorkbook.Worksheets(Cells(1, 2).Value).Activate
Exit Sub
Fehler:
MsgBox "Fehler Nr. " & Err.Number & " ist aufgetreten! & vblf & err.Description" _
& vbLf & "Blatt " & Cells(1, 2).Value & " gibt es wohl noch nicht!"
End Sub


Wenn du das Blatt für weitere Anweisungen ansprechbar machen willst, daann solltest eine entsprechende Objektvariable definieren.


Sub Batt_in_B2_setzen()
Dim objWks As Worksheet
On Error GoTo Fehler
Set objWks = ActiveWorkbook.Worksheets(Cells(1, 2).Value)
With objWks
'Anweisungen was im Tabelenblatt passieren soll
End With
Exit Sub
Fehler:
MsgBox "Fehler Nr. " & Err.Number & " ist aufgetreten! & vblf & err.Description" _
& vbLf & "Blatt " & Cells(1, 2).Value & " gibt es wohl noch nicht!"
End Sub


Gruß
Franz

Anzeige
AW: Tabellenblatt durch Zelleninhalt auswählen
16.05.2008 17:26:00
Christoph
Hallo Franz,
danke für die Antwort. Das Problem liegt leider darin das die Zellen B1 und C1 verbunden sind und ich deshalb einen Indexfehler bekomme. (Siehe AW von Sigi :)
;
Anzeige

Infobox / Tutorial

Tabellenblatt durch Zelleninhalt auswählen


Schritt-für-Schritt-Anleitung

Um ein Tabellenblatt in Excel durch den Inhalt einer Zelle auszuwählen, kannst Du folgenden VBA-Code verwenden. Dieser Code geht davon aus, dass sich der gewünschte Tabellenblattname in Zelle B2 befindet:

Sub BlattAuswaehlen()
    On Error GoTo Fehler
    Dim BlattName As String
    BlattName = Cells(2, 2).Value ' Zelle B2
    ActiveWorkbook.Worksheets(BlattName).Activate
    Exit Sub
Fehler:
    MsgBox "Fehler: Blatt '" & BlattName & "' existiert nicht."
End Sub

Stelle sicher, dass der Tabellenblattname korrekt in der angegebenen Zelle steht. Wenn Du beispielsweise in Zelle B2 "D1" eingibst, wird das Tabellenblatt "D1" aktiviert.


Häufige Fehler und Lösungen

Ein häufiges Problem, das Du möglicherweise hast, ist der Fehler "Index außerhalb des gültigen Bereichs". Dieser Fehler tritt auf, wenn der Tabellenblattname, den Du versuchst anzusprechen, nicht existiert. Hier sind einige Lösungen:

  • Falsche Zelle: Achte darauf, dass Du die richtige Zelle ausliest. Wenn Du den Wert aus Zelle B2 benötigst, stelle sicher, dass Du Cells(2, 2) verwendest und nicht Cells(1, 2), welches möglicherweise leer ist.
  • Verbundene Zellen: Wenn Du verbundene Zellen verwendest, kann dies zu Problemen führen. Es wird dringend empfohlen, die verbundenen Zellen zu entfernen, da sie häufig Fehler bei der Programmierung verursachen.

Alternative Methoden

Wenn Du Schwierigkeiten mit der Aktivierung von Tabellenblättern hast, kannst Du auch eine Funktion verwenden, um den Namen des Blattes zurückzugeben:

Function BlattNameAbrufen() As String
    BlattNameAbrufen = Cells(2, 2).Value
End Function

Diese Funktion gibt den Namen des gewünschten Tabellenblattes zurück, den Du dann in anderen Makros verwenden kannst.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie Du den Inhalt einer Zelle nutzen kannst, um Daten in einem Tabellenblatt zu aktualisieren:

Sub DatenAktualisieren()
    Dim ZielBlatt As Worksheet
    Dim BlattName As String
    BlattName = Cells(2, 2).Value
    On Error Resume Next
    Set ZielBlatt = ActiveWorkbook.Worksheets(BlattName)
    On Error GoTo 0
    If Not ZielBlatt Is Nothing Then
        ' Hier kannst Du Deine Anweisungen für das Zielblatt einfügen
        ZielBlatt.Range("A1").Value = "Aktualisierte Daten"
    Else
        MsgBox "Blatt '" & BlattName & "' existiert nicht."
    End If
End Sub

In diesem Beispiel wird der Inhalt von Zelle A1 im gewählten Tabellenblatt aktualisiert, falls das Blatt existiert.


Tipps für Profis

  • Verwendung von With-Anweisungen: Um den Code effizienter zu gestalten, kannst Du die With-Anweisung verwenden. Dies ist besonders nützlich, wenn Du mehrere Anweisungen für dasselbe Objekt hast.

    With ActiveWorkbook.Worksheets(BlattName)
      .Range("A1").Value = "Daten"
      .Range("A2").Value = "Weitere Daten"
    End With
  • Fehlerbehandlung: Implementiere grundlegende Fehlerbehandlungsroutinen, um sicherzustellen, dass Dein Code robust ist und nicht bei jedem kleinen Fehler abbricht.


FAQ: Häufige Fragen

1. Was mache ich, wenn die Zelle leer ist?
Wenn die Zelle leer ist, wird der Fehler "Index außerhalb des gültigen Bereichs" angezeigt. Stelle sicher, dass die Zelle den erwarteten Tabellenblattnamen enthält.

2. Kann ich auch verbundene Zellen verwenden?
Es wird nicht empfohlen, verbundene Zellen zu verwenden, da sie in VBA oft zu unerwarteten Fehlern führen. Es ist besser, die Zellen zu entkoppeln und den Inhalt klar zu strukturieren.

3. Wie kann ich den Fehler bei der Aktivierung eines Blattes vermeiden?
Verwende die Fehlerbehandlungsroutine, die im Codebeispiel gezeigt wird, um sicherzustellen, dass Dein Makro nicht abstürzt, wenn ein Blatt nicht existiert.

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