Mit Excel und VBA einen Namen in eine Zelle eingeben und anschliessend das Blatt mit entsprechendem Namen auswählen?

...komplette Frage anzeigen

2 Antworten

Zelle D4 bekommt den Namen "Zieltabelle".

(Zelle markieren, auf die Auwahlbox links oben klicken, wo "D4" drin steht, "D3" mit "Zieltabelle" überschreiben, mit Enter bestätigen)

Code der Tabelle, die diese Zelle enthält:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Tabellnamenszelle As Range
Set Tabellnamenszelle = Me.Parent.Names("Zieltabelle").RefersToRange
If RangeContains(Target, Tabellnamenszelle) Then
On Error Resume Next
Me.Parent.Worksheets(Tabellnamenszelle.Value).Activate
If Err.Number = 0 Then Exit Sub
On Error GoTo 0
MsgBox "Keine Tabelle mit dem Namen """ + Tabellnamenszelle.Value + """ gefunden."
End If
End Sub

Code in einem (ggf. neu eingefügten) Modul:

Option Explicit

Function RangeContains(Big As Range, Small As Range) As Boolean

If Big.Row > Small.Row Then RangeContains = False: Exit Function
If Big.Row + Big.Rows.Count < Small.Row + Small.Rows.Count Then RangeContains = False: Exit Function
If Big.Column > Small.Column Then RangeContains = False: Exit Function
If Big.Column + Big.Columns.Count < Small.Column + Small.Columns.Count Then RangeContains = False: Exit Function

RangeContains = True
End Function
Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von PWolff
26.08.2016, 12:56

Die Funktionen sollten für die Produktion noch verfeinert werden.

Z. B. sollte, wenn das Aktivieren der Tabelle fehlschlägt, die Nachricht von Err.Number abhängen - ob die Tabelle wirklich nicht vorhanden ist oder ausgeblendet ist oder ggf. sonstiges.

(Beachte: Err.Number steht nach "On Error Goto 0" nicht mehr zur Verfügung.)

Die RangeContains-Funktion sollte noch berücksichtigen, dass ein Range-Objekt mehrere Areas (Unterbereiche - diese müssen nicht zusammenhängen) enthalten kann.

1

Also: Ich habe ein Registerblatt "Suche". In diesem wird in der Zelle D4 ein Blattname eingegeben. Dieser Name habe ich dann als Variabel "sucheBlatt" abgespeichert. Nun soll es alle Blätternamen durchsuchen und das Blatt mit dem entsprechenden Namen aktiviert oder geöffnet werden.

Hoffe, dass es nun verständlicher ist.

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?