Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zugriff auf Namensbereich

Forumthread: Zugriff auf Namensbereich

Zugriff auf Namensbereich
02.05.2024 09:20:04
stepa
Hallo liebes Forum,
bisher konnte ihr mir als stiller Mitleser sehr weiterhelfen. Vielen Dank schonmal.
Aktuell habe ich folgendes Problem und hoffe ihr könnt mir weiterhelfen:
Im Namensmanger gibt es den Namen "Konstellationen", diser bezieht sich auf einen Bereich in einem anderen Blatt (Namen ist für Arbeitsmappe freigegeben) welchen ich nun VAB auslesen möchte.
Hintergrund. Im ersten Blatt, in L3, wird dieser Name als Dropdown verwendet.
ich möchte nun alle Elemente des Dropdowns auslesen und dann den mittels VBA einen gültigen Wert in L3 setzen.



SET mWB = Workbooks.Open(sDatei)
SET mWS = mWB.Worksheets.(sSheet)
sKonst = mWS.Range("L3").Validation.Formula1
SET mWB = Workbooks.Open(sDatei) SET mWS = mWB.Worksheets.(sSheet) sKonst = mWS.Range("L3").Validation.Formula1 ' vorderstes Zeichen "=" entfernen sKonst = Right(sKonst,len(sKonst)-1) sText = Range(sKonst)

hier bekomme ich den Namen raus, funktioniert.

Wenn ich allerdings mit der Range-Funktion darauf zugriffen will bekomme ich laufzeitfehler 1004



' vorderstes Zeichen "=" entfernen
sKonst = Right(sKonst,len(sKonst)-1)
sText = Range(sKonst)


Könnt ihr mir weiterhelfen wie ich hier meine Daten raus bekomme? Vielen Dank
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zugriff auf Namensbereich
02.05.2024 11:11:18
Fennek
Hallo,

in einem kleinen Test lief dieser Code:


Sub T_1()
Dim WB As Workbook, NM As Name

Set WB = ThisWorkbook
Set NM = WB.Names(1)

Debug.Print NM.Name, NM.RefersTo

Debug.Print Range(NM).Cells(1)
End Sub


mfg
AW: Zugriff auf Namensbereich
02.05.2024 15:18:31
Trägheit
Hi stepa.



Option Explicit

Sub Demo()

Dim rngCell As Excel.Range
Dim rngValidation As Excel.Range
Dim strAddr As String

Set rngCell = Worksheets("Tabelle1").Range("L3")

With rngCell.Validation
On Error GoTo NoValidation
If .Type = xlValidateList Then
On Error GoTo 0
If Left$(.Formula1, 1) = "=" Then
'=> Formelausdruck
strAddr = Right$(.Formula1, Len(.Formula1) - 1)
strAddr = "'" & rngCell.Worksheet.Name & "'!" & strAddr
Set rngValidation = rngCell.Worksheet.Range(strAddr)
Else
'=> einfache Liste mit Elementen, welche durch ein Trennzeichen voneinander getrennt sind
'...
End If
End If
NoValidation:
End With

'...

End Sub


Wie du siehst, kann der Umgang mit so einer Datenüberprüfung etwas umständlich sein.
Wenn man das an mehreren Stellen benötigt, oder wenn man es mit verschiedenen Typen zu tun bekommt, fängt es an Sinn zu machen, die dafür notwendige Logik auszulagern. Entweder in einzelne Methoden, oder in Klassen.


Grüße
Anzeige
AW: Nachtrag
02.05.2024 15:34:27
Trägheit
Andere Herangehensweisen haben alle etwas mit


For Each objName In ThisWorkbook.Names

zu tun.

Man muss also über alle definierten Namen iterieren und schauen ob der gesuchte Name passt (und falls es mehrere unter dem selben Namen gibt, ob das Tabellenblatt passt).
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige