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

worksheet mit named range suchen

worksheet mit named range suchen
05.02.2018 14:48:02
Burkhard
Hallo miteinander,
ich möchte in einer Arbeitsmappe (workbook) dasjenige Arbeitsblatt (worksheet) finden, das einen bestimmten "benannten Bereich" ("named range") hat - z.B. "AdminList".
Die Idee hinter dem folgenden Code ist, alle worksheets eines workbooks anzusehen und nach dem named range abzufragen. Wenn der nicht vorhanden ist, gibt's einen Fehler - so weit so gut.
Eigentlich sollte der Code dann mit dem nächsten worksheet weitermachen. Das funktioniert aber nur nach dem Auftreten des ersten Fehlers, also in "Tabelle1". Wenn dann "Tabelle2" dran ist und dort erneut ein Fehler auftritt (also der named range auch dort nicht gefunden wurde), springt die Fehlerbehandlung in die Fehlerroutine des rufenden Programmes (das "getSheetName" aufruft).

Public Function getSheetName(sNamedRange) As String     ' find sheet that
has sNamedRange (e.g. "AdminList")
Dim wks As Worksheet
Dim sMsg As String
getSheetName = ""
For Each wks In ActiveWorkbook.Worksheets
Err.Clear
On Error GoTo NextFor
If wks.Range(sNamedRange).Address > "" Then
getSheetName = wks.Name
Exit For
End If
NextFor:
Next
On Error GoTo 0
If getSheetName = "" Then
sMsg = "No worksheet found that contains a named range '" & sNamedRange & "'!"
MsgBox sMsg
End If
End Function

Wo liegt mein Denk- oder Codierfehler?

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

Betreff
Datum
Anwender
Anzeige
AW: worksheet mit named range suchen
05.02.2018 15:04:49
Beverly
Hi Burkhard,
meinst du vielleich so etwas nach diesem Prinzip:
Sub NamenErkennen()
Dim namName As Name
For Each namName In ActiveWorkbook.Names
If namName.Name = "AdminList" Then MsgBox Range(namName.RefersTo).Parent.Name
Next namName
End Sub


AW: worksheet mit named range suchen
05.02.2018 16:20:00
Burkhard
Hallo Karin,
bei diesem Code:
    For Each nName In ActiveWorkbook.Names
If nName.Name = sNamedRange Then
getSheetName = Range(nName.RefersTo).Parent.Name
Exit For
End If
Next nName
bekomme ich einen Fehler "1004 Anwendungs- oder objektdefinierter Fehler" beim Zugriff auf .Parent.Name
Als Ergebnis möchte ich außerdem ausschließlich worksheet-spezifische Namen - kann man das irgendwie einstellen oder abfragen?
Grüße
Burkhard
Anzeige
AW: worksheet mit named range suchen
05.02.2018 16:47:13
Werner
Hallo Burkhard,
beim Anlegen deines benannten Bereichs im Pulldown "Bereich" - Diese Arbeitsmappe auswählen.
Gruß Werner
AW: worksheet mit named range suchen
05.02.2018 17:23:35
Burkhard
Hallo Werner,
ich lege die Namen nicht an, benutze sie nur, um ein bestimmtes worksheet zu finden ..
Grüße
Burkhard
AW: worksheet mit named range suchen
05.02.2018 18:16:30
Beverly
Hi Burkhard,
ich habe den Namen "AdminList" jetzt mal sowohl Mappenweit also auch Blattspezifisch definiert und mit folgendem Code wird in der MsgBox der Name des Tabellenblattes für den Blattspezifisch definierten Namen ausgegeben:
Sub NamenErkennen()
Dim namName As Name
For Each namName In ActiveWorkbook.Names
If InStr(namName.Name, "!") > 0 Then
If InStr(namName.Name, "AdminList") > 0 Then MsgBox Range(namName.RefersTo).Parent. _
Name
End If
Next namName
End Sub

Übrigens: wenn man eine Mappe bereitstellt, kann man als Helfer besser auf die konkreten Bedingungen eingeben.


Anzeige
AW: worksheet mit named range suchen
05.02.2018 20:19:17
Luschi
Hallo Karin,
MsgBox namName.Parent.Name
macht es in diesem Fall auch, statt Object -> String -> wieder Objekt --> 1. Elternelement
Gruß von Luschi
aus klein-Paris
AW: worksheet mit named range suchen
06.02.2018 09:38:32
Burkhard
Hallo Karin, hallo Luschi
funktioniert perfekt!
Public Function getSheetName(sNamedRange) As String     ' find sheet that has sNamedRange (e.g.  _
"AdminList")
Dim nName As Name
getSheetName = ""
For Each nName In ActiveWorkbook.Names
If InStr(nName.Name, "!") > 0 Then   'workbook-specific names only
If InStr(nName.Name, sNamedRange) > 0 Then
getSheetName = nName.Parent.Name
Exit For
End If
End If
Next nName
If getSheetName = "" Then                'not found
[...]
Vielen Dank!
Burkhard
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige