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

VBA Namensmanager Einträge verfassen und auslesen

VBA Namensmanager Einträge verfassen und auslesen
22.05.2019 17:27:34
David
Liebe Community,
im Zuge meiner Arbeit setze ich mich aktuell mit dem Eintragen und Auslesen von Bereichen im Namensmanager auseinander. Dabei bin ich auf ein paar Verständnisprobleme gestoßen und wollte mal schauen ob die mir hier jemand erklären kann.
1. Anfangs habe es wie folgt versucht Bereiche als Namen zu definieren und wieder auszulesen bzw. zu beschriften:
dim A as String
'Erstellen von A im Namensmanager
Worksheets("Tabelle1").Names.Add Name:=A, RefersToR1C1:=Range(Cells(2, 10), Cells(2, 20))
'Schreiben von Kommentar zu A im Namensmanager
Worksheets("Tabelle1").Names(A).Comment = "Enthält alle vorhandenen A"
'Löscht Eintrag im Namensmanager
Worksheets("Tabelle1").Names(A).Delete
'Funktion zum Suchen von Name im Namensmanager:
Public Function InNamensmanager(Blatt As String, SName As String) As Boolean
' Prüft, ob Eintrag in Namensmanager vorhanden
Dim NManager As Variant
Dim XName As String
Set NManager = Worksheets(Blatt).Names
For i = 1 To NManager.Count
XName = Right(NManager(i).Name, Len(NManager(i).Name) - InStr(NManager(i).Name, "!"))
If XName = SName Then
InNamensmanager = True
End If
Next i
End Function
Mit diesem Programm-Code hat mir Excel auch alles schön im Namensmanager angelegt und auch wieder gelöscht oder ausgegeben. Einzig mein Problem war, dass im Namensmanager A als Bereich nicht definiert wurde.
Weshalb RefersToR1C1:=Range(Cells(2, 10), Cells(2, 20))bei mir nicht funktioniert ist für mich bis jetzt leider ein Rätsel.
2. Nach langem Suchen bin ich dann auf einen Eintrag im Forum gestoßen, bei dem das Anlegen etwas anders gemacht wird:
Worksheets(Tabelle1).Range(Cells(2, 10), Cells(2, 20)).Name = A
Hiermit legt mir Excel den Namen vermeintlich richtig im Namensmanager an und man kann diesen auch beispielsweise als Dropdown nutzen.
Leider kann ich über VBA mit dem gewohnten
Worksheets("Tabelle1").Names(A).Delete
Variante .Name(A).Delete führt auch nicht zum Erfolg.
Allerdings den Namen nicht mehr löschen und auch die vorher genannte Funktion erkennt den Eintrag nicht bzw. gibt mir an, dass im Namensmanager keine Einträge vorhanden sind.
Kann mir jemand erklären wie ich bei 1. die Range richtig angeben müsste?
Oder bei 2. wie ich auf das angelegte Objekt A zugreifen kann?
Über eine Erklärung was ich dabei Falsch gemacht habe wäre ich natürlich auch sehr dankbar :)
Vielen Dank schon einmal für die Hilfe!
Liebe Grüße,
David

61
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Namensmanager Einträge verfassen und auslesen
22.05.2019 17:36:05
Nepumuk
Hallo David,
was steht den in A? Das geht aus deinen Codeschnipseln nicht hervor.
Gruß
Nepumuk
AW: VBA Namensmanager Einträge verfassen und auslesen
22.05.2019 17:48:27
David
Hallo Nepumuk,
A ist bei mir eine Variable des Typs String.
AW: VBA Namensmanager Einträge verfassen und auslesen
22.05.2019 17:54:28
Nepumuk
Hallo David,
nochmal, was steht in A?
Gruß
Nepumuk
AW: VBA Namensmanager Einträge verfassen und auslesen
22.05.2019 17:37:49
onur
Wenn der Bereich doch A heisst, wieso gibst du nicht statt
Worksheets("Tabelle1").Names(A)
das hier
Worksheets("Tabelle1").Names("A")
ein?
AW: VBA Namensmanager Einträge verfassen und auslesen
22.05.2019 17:49:45
David
Hallo Onur,
A ist bei mir einfach nur ein Platzhalter für eine Variable des Typs String.
Es ist kontraproduktiv, Namen zu wählen, ...
22.05.2019 17:53:11
Luc:-?
…die nur aus einem Buchstaben bestehen, David,
denn die stimmen beim Standard-AnzeigeModus ja mit einem SpaltenBezeichner überein (auch 3 Buchstaben können ab Xl12/2007 damit übereinstimmen). Außerdem ist ein Name für VBA Text. Besser wäre also … = "A_" gewesen.
Desweiteren gibt es auch versteckte Namen, die also nicht im Manager angezeigt wdn. Standardmäßig fallen die Namen aller ab Xl12/2007 neuen Funktionen (Fktt) darunter, zu denen ein solcher Name bei Verwendung im Blatt automatisch angelegt wird (_xlFct… o.s.ä.). Sonst kann/muss man das auswählen/einstellen.
Desweiteren können nicht nur für Bereiche Namen definiert wdn, sondern auch für Konstanten und Formeln (Fml). Auch eine Bereichs­angabe ist letztlich eine Fml, denn sie beginnt auch mit =. Außerdem gibt's für Bereiche noch die objektbildende Eigenschaft .RefersToRange, der direkt ein Range-Objekt zugeordnet wdn kann.
Gruß, Luc :-?
Anzeige
Du hättest gleich schreiben sollen, dass A ...
22.05.2019 17:55:37
Luc:-?
…eine String-Variable ist! :-|
Luc :-?
kauf dir eine Brille
22.05.2019 17:58:28
Nepumuk
denn im Eröffnungsthread steht deutlich:
dim A as String
Gruß
Nepumuk
Habe ich, muss ich nur absetzen, wenn ich lesen …
22.05.2019 18:19:16
Luc:-?
…will. Passt wohl nicht zu deinen Stereotypen…‽
Hast wohl noch nie was übersehen… :->
Luc :-?
naja, und das nirgendwo im Code um
22.05.2019 18:26:18
Daniel
das A herum Anführungszeichen auftauchen, ist dir auch nicht aufgefallen.
Dein Problem ist, dass du nicht wirklich die Beiträge der anderen liest, sondern meinstens nur ein paar Stichworte aufnimmst und dann darauf antwortest, was du zu diesen Stichworten selber assoziierst.
Gruß Daniel
..und das nirgendwo...
22.05.2019 18:35:11
robert
..gut Deutsch..
Hauptsache quengeln....
Anzeige
Ah, sieh mal an, da fühlt sich jemand in seinem …
22.05.2019 19:07:58
Luc:-?
…Motzen unterstützt. Soll ich oder sollen wir das jetzt auch bei jedem Lapsus von dir machen‽ Und du weißt ja, da hätte man viel zu tun, wenn man Orthografie einbezieht… :->
Deine weitergehenden Schlussfolgerungen sind unterirdisch, denn das ist mir schon aufgefallen, nur pflege ich weder Variablen noch Namen so zu bezeichnen. Texte definierter Xl-Namen (Titel) haben sogar meist eine eigene Variable, damit sie leicht geändert wdn kön­nen. Habe ich bei dir noch nie gesehen!
Luc :-?
AW: Ah, sieh mal an, da fühlt sich jemand in seinem …
23.05.2019 00:53:54
Daniel
Hinzu kommt deine Attitüde, bei deinen Eigenen Fehlern trotzdem immer noch zu versuchen, irgendwie diem anderen die Schuld dafür unterzuschieben.
Sieht man deutlich an deiner zweiten nachgeschobenen Antwort.
die Kennzeichnung von A als Variable ist deutlich genug.
Anzeige
Inzwischen gibt's hier viele 'nachgeschobene' …
23.05.2019 01:29:51
Luc:-?
…AWen, auch von mir. Aber eigentlich ist es ja dein Prinzip, was du hier monierst, weshalb Diskussionen mit dir oft elend lang wdn können und doch fruchtlos bleiben.
Außerdem wurde hier inzwischen eine Lösung gefunden, an der du höchstens mit einem einzigen BT beteiligt bist. Und du beißt dich nun aus lauter Frust an einer kleinen Unaufmerksamkeit fest, die längst geklärt ist.
Wärst du ein Hund, müsste man für deine Haltung wohl eine Sondererlaubnis u/o einen Waffenschein beantragen… :-))
Luc :-?
AW: Inzwischen gibt's hier viele 'nachgeschobene' …
23.05.2019 01:42:15
Daniel
ja, und die Lösung ist von mir und dazu reicht ein einziger Beitrag, wenn man sich den Code genauer anschaut und die Fehlerursache findet, anstatt einfach mal mit den Standardempfehlungen loszuschwadronieren, wie ein schlechter überbezahlter Berater.
Anzeige
Ach Gottchen! Was willst du hören: …
23.05.2019 15:16:08
Luc:-?
Gelobt sei unser allwissender Xl- und VBA-Gott, Daniel, der Unfehlbare…‽ :-]]
Luc :-?
AW: Ach Gottchen! Was willst du hören: …
23.05.2019 16:05:14
Daniel
ich will damit aufzeigen, wie bescheuert, unsinnig und an den Haaren herbeigezogen dein letzter Vorwurf an mich war.
DIR geht's dir hier doch noch darum, mich zu diffamieren.
AW: Es ist kontraproduktiv, Namen zu wählen, ...
22.05.2019 18:04:10
David
Hallo Luc:-? ,
Danke für den Hinweis zu Variablen. Das A ist in diesem Fall nur ein Platzhalter. In meinem Code haben die erstellten Variablen alle mindestens 3 Buchstaben und nicht mit Befehlen verwechselbare Namen.
Ändere ich RefersToR1C1:= zu RefersToRange:= in meinem Programmcode, gibt mir Excel den Laufzeitfehler 448: Benanntes Argument nicht gefunden.
Ich hoffe ich hatte das so richtig verstanden was du meintest. Sonst vielleicht nochmal für Laien :D
Anzeige
AW: Es ist kontraproduktiv, Namen zu wählen, ...
22.05.2019 18:09:18
onur
z.B. so:
RefersToR1C1:="=Tabelle1!R1C1:Z3S1"
AW: VBA Namensmanager Einträge verfassen und auslesen
22.05.2019 18:10:58
David
Sorry liebe Community,
vielen Dank schon einmal für die Antworten.
Ich glaube allerdings mein Problem ist leider nicht ganz klar geworden.
Ich schreibe es mal in einer Excel Datei als Beispiel zusammen und lade sie hoch.
Sollte denke ich helfen es besser zu verstehen.
Gruß,
David
AW: VBA Namensmanager Einträge verfassen und auslesen
22.05.2019 18:49:05
David
Also nachdem ich die Excel Datei nicht komplett hochladen kann dann einfach hier der komplette Quellcode:
Versuch 1 sieht wie folgt aus:
Option Explicit
Public StrName As String
Public IstInNamensmanager As Boolean
Sub VersuchA()
StrName = "Hallo"
'Erstellen von StrName im Namensmanager
Worksheets("Tabelle1").Names.Add Name:=StrName, RefersToR1C1:=Range(Cells(1, 1), Cells(1, 5))
'Schreiben von Kommentar zu StrName im Namensmanager
Worksheets("Tabelle1").Names(StrName).Comment = "Enthält alle vorhandenen StrName"
End Sub
Sub LoescheVersuchA()
'Löscht Eintrag im Namensmanager vorausgesetzt Eintrag ist vorhanden
Worksheets("Tabelle1").Names(StrName).Delete
End Sub
Sub EintaegeNamensmanager()
StrName = "Hallo"
IstInNamensmanager = Modul1.InNamensmanager("Tabelle1", StrName)
MsgBox (IstInNamensmanager)
End Sub
'Funktion zum Suchen von Name im Namensmanager:
Public Function InNamensmanager(Blatt As String, SName As String) As Boolean
' Prüft, ob Eintrag in Namensmanager vorhanden
Dim i As Integer
Dim NManager As Variant
Dim XName As String
Set NManager = Worksheets(Blatt).Names
For i = 1 To NManager.Count
XName = Right(NManager(i).Name, Len(NManager(i).Name) - InStr(NManager(i).Name, "!" _
))
If XName = SName Then
InNamensmanager = True
End If
Next i
End Function

'------------------------------------------------------------------------------------------------------
Versuch 2 schaut wie folgt aus:
Option Explicit
Public StrNameB As String
Public IstInNamensmanagerB As Boolean
Sub VersuchB()
StrNameB = "HalloB"
Worksheets("Tabelle1").Range(Cells(1, 1), Cells(1, 5)).Name = StrNameB
'Die Nächste Zeile gibt schon einen Fehler, da er StrNameB nicht im Namensmanager findet.
'Worksheets("Tabelle1").Names(StrNameB).Comment = "Enthält alle vorhandenen StrName"
End Sub
Nach ausführen des Makro Sub VersuchA () und Sub VersuchB () bekomme ich im Namensmanager das Ergebnis im Screenshot. Also die Range wird bei VersuchA () Nicht richtig definiert. Sobald ich den Kommentar im Sub VersuchB() auskommentiere erhalte ich den Fehler, dass der Name HalloB nicht gefunden wird im Namensmanager. Ich hoffe mein Problem wurde jetzt etwas anschaulicher.
Vielen Dank für die Hilfe!
Hier der Link zum Screenshot: Userbild
Anzeige
AW: VBA Namensmanager Einträge verfassen und auslesen
22.05.2019 18:54:50
onur
Wieso steht die Range von Hallo in Z1S1-Format und der von HalloB in A1-Format?
Einer von beiden ist falsch, je nachdem welches Format du z.Zt. aktiviert hast.
Ich vermute, die von "Hallo", da Z1S1:.... in Gänsefüsschen steht.
Du musst schon das Format nehmen, das bei dir aktiviert ist.
AW: VBA Namensmanager Einträge verfassen und auslesen
22.05.2019 19:03:20
David
Hallo Onur,
das ist ja genau meine Frage, was ich eben auch nicht verstehe.
Bei Versuch1 und 2 verwende ich ja Range(Cells(1, 1), Cells(1, 5)) nur bei Versuch1 versteht er die Range nicht...
Das Format das ich verwende ist ja in Versuch 1 und 2 mit Range(Cells(1, 1), Cells(1, 5)) gleich. Oder muss ich da aufpassen wie ich die Range übergebe?
Anzeige
AW: VBA Namensmanager Einträge verfassen und auslesen
22.05.2019 19:09:52
onur
DATEI-OPTIONEN-FORMELN-ARBEITEN MIT FORMELN - wenn da ein Haken gesetzt ist, hast du für die Datei Z1S1-Format eingestellt, sonst A1.
Da auf dem Screenshot die Spalten mit Buchstaben benannt sind, hast du auch keinen Haken gesetzt, also funktioniert auch Z1S1-Adressierung nicht.
Wenn du den Haken setzt und das Makro laufen lässt, ist es wahrscheinlich genau umgekehrt und das 1. ist richtig und das 2.falsch.
Du musst schon für beide Namen die gleiche Adressierung nehmen, und zar die, die du unter Optionen aktiviert hast.
AW: VBA Namensmanager Einträge verfassen und auslesen
22.05.2019 19:13:44
David
Hallo Onur,
danke dir für die Antwort, versuche ich gleich mal aus. Darauf bin ich leider nicht gekommen, dass es an den allgemeinen Einstellungen von meinem Excel liegen kann.
Sobald ich es versucht habe geb ich dir bescheid ob es jetzt klappt.
Danke für die Hilfe!
Anzeige
ZellFmln u.Namensbezüge sind vom eingestellten ...
22.05.2019 19:15:43
Luc:-?
…Xl-Darstellungsmodus unabhängig, Onur,
idR im Ggsatz zu BedingtFormat- und DatenGültigkeitsregeln, denn es gibt für jede Variante eine automatische Umwandlungsform.
.RefersToRange verlangt übrigens ein Objekt, David.
Gruß, Luc :-?
Das gilt aber nur, wenn man die Fmln auch der ...
22.05.2019 19:20:18
Luc:-?
…richtigen Form zuordnet.
Luc :-?
AW: Das gilt aber nur, wenn man die Fmln auch der ...
22.05.2019 19:28:52
David
Hallo Luc:-? ,
wie würde das für RefersToR1C1:= denn dann richtigerweise lauten? Also wenn ich dabei eine Variable Range übergeben will.
Kenne zwar aus Java ein bisschen Objektorientierte Programmierung, steige bei VBA da aktuell leider noch nicht so ganz durch.
Hallo Onur, das mit dem umstellen bei den Optionen hat mich bei dem Problem nicht weiter gebracht. War aber sehr interessant zu wissen, dass man das umstellen kann. Hatte ich noch nicht gewusst.
Anzeige
AW: Das gilt aber nur, wenn man die Fmln auch der ...
22.05.2019 19:31:47
onur
Versuche (z.B.) sowas:
RefersToR1C1:="=Tabelle1!Z1S1:Z3S1" - Also so, wie du in Excel-Formeln schreiben würdest.
Das ist falsch, onur! Siehe unten! owT
22.05.2019 19:40:31
Luc:-?
:-?
AW: Das ist falsch, onur! Siehe unten! owT
22.05.2019 19:44:18
onur
Habe ich schon bemerkt ! :(
AW: Das ist falsch, onur! Siehe unten! owT
22.05.2019 19:53:03
David
Hallo Onur,
damit könnte ich das allerdings, so wie ich es sehe nicht variabel gestalten. Oder sehe ich das falsch?
AW: VBA Namensmanager Einträge verfassen und auslesen
22.05.2019 18:20:58
Daniel
HI
du musst da aufpassen.
es gibt zwei unterschiedliche Typen von Namen:
1. Blattspezifische Namen, welche nur auf dem Tabellenblatt gültig sind
2. Dateispezifsche Namen, welche in der ganzen Datei gelten.
mit Worksheets("Tabelle1").Names.Add erstellst du einen blattspezifischen Namen
mit ActiveWorkbook.Names.Add oder mit der von dir gezeigten 2. Methode Range(...).Name = "..."
erstellst du einen Dateispezifischen Namen.
unterschied ist, dass blattspezifische Namen innerhalb der Datei mehrfach verwendet werden können (pro Blatt 1x), will man auf von einen anderen Tabellenblatt aus zugreifen, muss man den Blattnamen voranstellen.
Dateispezifische Namen gelten in der ganzen Datei und können dort auch nur 1x vorkommen.
auch bei VBA musst du darauf achten, ob du die Worksheets(..).Names oder die Worbook.Names verwendest.
wenn du einen Namen für das Blatt erstellt hast, findest du ihn natürlich nicht in der Auflistung der Workbook-Namen.
Gruß Daniel
AW: VBA Namensmanager Einträge verfassen und auslesen
22.05.2019 18:58:18
David
Hallo Daniel,
super vielen Dank dir! Habe meinen Fehler bei Versuch 2 jetzt verstanden.
Und mit ActiveWorkbook.Names(StrNameB).Comment = "Enthält alle vorhandenen StrNameB" klappt es dann auch wie ich es mir vorgestellt hatte.
Kannst du mir vielleicht noch erklären wieso er bei Versuch 1 die Range nicht richtig setzt? Bzw. wieso das:
RefersToR1C1:=Range(Cells(2, 10), Cells(2, 20)
nicht erkannt wird?
Seltsamerweise trägt excel bei der Range sogar Sachen ein, allerdings sieht das dann im Namensmanager so aus: =Tabelle1!'Z1S1':'Z1S5' und nimmt leider nicht das Feld in die Definition im Namensmanager auf.
AW: VBA Namensmanager Einträge verfassen und auslesen
22.05.2019 19:01:18
onur
IGNORIERE RUHIG AUCH MEINE 2. ANTWORT.
ICH kann damit leben, denn DU willst Hilfe, nicht ich.
AW: VBA Namensmanager Einträge verfassen und auslesen
22.05.2019 19:04:41
David
Ich habe dir gerade geantwortet. Ein paar Minuten musst du mir schon zum Antworten geben. Versuche ja auch erst mal die Antwort zu verstehen, soweit es mir möglich ist ;)
RefersToRange = Range(Cells(2, 10), Cells(2, 20) …
22.05.2019 19:38:26
Luc:-?
…wäre wohl richtiger, David,
wenn es tatsächlich um diesen Bereich geht. Ansonsten benutzt du das Original-US-RefersToR1C1, dann müssen dort auch Adressen in dieser Schreibweise eingetragen wdn, als Formel mit Verweis: …RefersToR1C1 = "=R2C10:R2C20" Das wäre dann absolut.
Lokal (deutsch) hieße das so: …RefersToR1C1Local = "=Z2S10:Z2S20" Ebenfalls absolut.
Das gibt's auch als …RefersTo = "=$J$2:$T$2" und RefersToLocal (hier dito), absolut.
Luc :-?
Im Betreff fehlt die letzte )! owT
22.05.2019 19:41:51
Luc:-?
:-?
AW: RefersToRange = Range(Cells(2, 10), Cells(2, 20) …
22.05.2019 19:43:33
onur
Luc hat Recht, das "Local" fehlt noch!
AW: RefersToRange = Range(Cells(2, 10), Cells(2, 20) …
22.05.2019 19:51:08
David
RefersToR1C1Local führt leider nicht zum gewünschten Ergebnis.
Wenn ich Luc richtig verstanden habe, dann kann man mit RefersToR1C1 nur eine absolute Adresse übergeben.
AW: RefersToRange = Range(Cells(2, 10), Cells(2, 20) …
22.05.2019 19:54:22
onur
Wie Luc schon schrieb, geht auch:
RefersToRange = Range(Cells(2, 10), Cells(2, 20)
wo du auch statt Zahlen Variablen nehmen könntest:
RefersToRange = Range(Cells(zvon, svon), Cells(zbis, sbis)
AW: RefersToRange = Range(Cells(2, 10), Cells(2, 20) …
22.05.2019 19:59:39
onur
Oder so:
dim ref as string
ref="=Tabelle1!Z"&zvon&S"&svon"&":Z"&zbis&"S"&sbis"
RefersToR1C1Local:=ref
AW: RefersToRange = Range(Cells(2, 10), Cells(2, 20) …
22.05.2019 20:15:35
David
Also das ref="=Tabelle1!Z"&zvon&S"&svon"&":Z"&zbis&"S"&sbis" mit Local am Ende führt leider auch nicht dazu, dass es der Bezug richtig angelegt wird.
Schreibe ich es zu RefersToRange:=Range(Cells(1, 1), Cells(1, 5)) gibt mir Excel den Laufzeitfehler 448: Benanntes Argument nicht gefunden aus :/
AW: RefersToRange = Range(Cells(2, 10), Cells(2, 20) …
22.05.2019 20:16:56
onur
Dann poste doch mal die Datei, damit ich es auch mal testen kann.
AW: RefersToRange = Range(Cells(2, 10), Cells(2, 20) …
22.05.2019 20:29:05
David
Die Datei hatte ich bereits als Text hier gepostet:
Antwort auf: AW: VBA Namensmanager Einträge verfassen und auslesen von David vom 22.05.2019 18:10:58
Die Datei selbst lässt er mich leider hier unter dem File-Upload nicht hochladen. Sonst hätte ich sie euch ja schon längst zu Verfügung gestellt ;)
Copy paste mit dem Code den ich im Beitrag oben gepostet hatte, führt aber genau zur selben Datei, die ich vor mir habe.
Ist bei dem RefersToRange:=Range(Cells(1, 1), Cells(1, 5)) ein fehler drin? Oder habe ich das von Luc dann falsch verstanden?
AW: RefersToRange = Range(Cells(2, 10), Cells(2, 20) …
22.05.2019 20:49:19
David
Vielen Dank dir!
Habe zwar noch nicht verstanden wieso man zvon =Cells(1,2) schreiben muss, also dem Cells 2 andere Cells Werte übergeben muss, aber werde ich mir dann auf jedenfall mal nochmal genauer anschauen was es damit auf sich hat.
Dein Beispiel funktioniert auf jeden Fall und hilft mir sehr weiter.
Vielen Dank euch 3 für eure Geduld und Hilfe!!
Wieder definitiv einiges dazu gelernt !
AW: RefersToRange = Range(Cells(2, 10), Cells(2, 20) …
22.05.2019 20:55:56
onur
Das ist nur eine Demo, bei dem die Variablen aus dem Blatt entnommen werden können (und NICHT "also dem Cells 2 andere Cells Werte übergeben muss").
zvon =Cells(1,2)

ist das Gleiche wie:
zvon =Range("B1")

und bedeutet, dass die Variable zvon (steht für: Zeile von) den Wert von B1 (also die Zahl 1) übernimmt.
AW: RefersToRange = Range(Cells(2, 10), Cells(2, 20) …
22.05.2019 23:17:53
David
Ok super ich schaue es mir die Tage dann mal in Ruhe an.
Danke dir nochmal für die Hilfe und Geduld!
Deine Schreibweise ist falsch, ...
22.05.2019 20:31:37
Luc:-?
…David,
denn die ist tatsächlich für benannte Argumente von Methoden reserviert. RefersToRange ist aber ebenso wie die anderen RefersTo~ eine Eigenschaft des Name-Objekts, der mit dem vbZuweisungsoperator = ObjektBezüge bzw Werte zugewiesen wdn (Kurzschreibung für Let … = …). Also den : weglassen!
Luc :-?
AW: Deine Schreibweise ist falsch, ...
22.05.2019 20:40:27
David
Also wenn ich in dem Programm-Code:
Worksheets("Tabelle1").Names.Add Name:=StrName, RefersToRange=Range(Cells(1, 1), Cells(1, 5))
schreibe, dann gibt mir Excel direkt bevor ich irgendwas ausführe den Fehler: Fehler beim Kompilieren: Erwartet: Benannter Parameter
Muss ich für den Bereich vorher irgendwie anderweitig Speichern um ihn dann bei mir mit = zuzuweisen?
Oder muss ich an die Sache ganz anders herangehen und der Programm-Code den ich gepostet hatte kann man in die Tonne kloppen?
Ei-jeh, hätte noch mal nachsehen sollen, ...
22.05.2019 22:59:47
Luc:-?
…David;
hier willst du ja RefersToRange tatsächlich als benanntes Argument verwenden. Das gibt es aber so nicht, da diese Eigenschaft schreibgeschützt ist. Du kannst sie also nur zum Auslesen von Namensbezügen (auf Bereiche!) verwenden, nicht zum Anlegen. Folglich musst du auf eine der anderen 4 RefersTo~-Varianten ausweichen, die auch als benannte Argumente verwendbar sind. Bei denen kommt es dann natürlich darauf an, dass du den jeweiligen Text der richtigen Eigenschaft zuordnest. Wie der zusammenzusetzen ist, hatten wir dir ja gezeigt.
Luc :-?
Allerdings hat Daniel recht, ...
23.05.2019 00:16:54
Luc:-?
…David,
und man kann entgegen der VBE-Hilfe durch Weglassen der Namen der benannten Argumente (inkl :=) tatsächlich auch Objekte wie bei RefersToRange verwenden. Das könnte ursprünglich nicht beabsichtigt worden sein, fktioniert aber mit der Methode .Add (nur) auf diese Weise.
Morhn, Luc :-?
AW: Allerdings hat Daniel recht, ...
23.05.2019 13:35:15
David
Hallo Luc:-?,
danke für die Hilfe!
Wieder einiges gelernt :)
Ich habe mein Problem jetzt mit eurer Hilfe lösen können und denke auch verstanden.
Immer super Hilfe hier im Forum!
Gruß,
David
Bitte sehr, gern geschehen! ;-) owT
23.05.2019 14:08:46
Luc:-?
:-?
Und ja, die Automatik wird bei Weglassen ...
23.05.2019 14:26:42
Luc:-?
…der Namen der benannten Argumente eher auf RefersTo setzen als auf RefersToRange, David;
die Fml mit AdressText wird dann automatisch richtig erzeugt. Das sieht dann nur so aus wie bei RefersToRange, weil ebenfalls ein Objekt verwendet wird, hier aber nicht dessen Wert(e) standardmäßig genutzt wdn (wie sonst), sondern die Adresse(n). Insofern wäre das dann auch kein Widerspruch zur VBE-Hilfe. Das Besondere an RefersToRange wäre dann nur, dass in diesen Fällen ein benannter Bereich gleich als ObjektReferenz bereitgestellt wird und man sie nicht erst aus .RefersTo~ (oder .Value) erzeugen muss.
Luc :-?
AW: RefersToRange = Range(Cells(2, 10), Cells(2, 20) …
22.05.2019 19:47:06
David
Hallo Luc:-? ,
und gibt es eine Möglichkeit diese Adressen NICHT absolut einzutragen?
Also damit ich den Bereich jeweils über Variablen definieren kann?
Oder kannst du mir eine einfachere Lösung verraten, mit der ich eine dynamische Liste per Makro als Name im NamensManager definieren kann, um diese dann letztendlich als Drop-Down nutzen zu können?
Ja, je nach Variante, …
22.05.2019 20:22:41
Luc:-?
…David;
aber du meinst sicher nicht relative statt absoluter Adressen, denn das wäre wahrscheinlich kontraproduktiv, sondern dynamisch zusammengesetzte statt statischer Adressen bzw Bereiche.
Eine Möglichkeit hat dir ja schon Onur genannt. Eine andere wäre diese:
…RefersTo = "=" & Range(Cells(r, c), Cells(z, s)).Address für r,z = Zeilen- und c,s = SpaltenVariablen. Aber dann kannst du auch gleich RefersToRange nehmen, das genau für Bereichsnamen gedacht ist und eine Referenz auf das angegebene Range-Objekt beinhaltet.
Ansonsten gibt's zu dynamischen Listen und ihren Bezügen inkl Namen auch etliches im Archiv (RECHERCHE-Button drücken und los!).
Luc :-?
AW: Ja, je nach Variante, …
22.05.2019 20:34:24
David
genau ich meine dynamisch zusammengesetzte statt statische Adressen bzw. Bereiche.
Nehme ich die RefersToRange Lösung von dir (Wenn ich das so richtig verstanden habe):
Worksheets("Tabelle1").Names.Add Name:=StrName, RefersToRange:=Range(Cells(1, 1), Cells(1, 5))
Dann gibt mir Excel Leider den Fehler 448: Benanntes Argument nicht gefunden aus.
Stimmt da bei dem Programm-Code noch etwas nicht?
AW: VBA Namensmanager Einträge verfassen und auslesen
22.05.2019 23:21:05
Daniel
Hi
wenn du das Zellbereichsobjekt direkt für die Namensdeklaration verwenden willst, nimmst du einfach RefersTo, hier mal vereinfacht für einen Zellbereich auf dem aktiven Tabellenblatt
...Names.Add Name:="xxx", RefersTo:=Range(Cells(a, b), Cells(x, y))

gehst du über RefersToR1C1 musst du den Zellbezug als Text in form der Zelladresse in R1C1-Schreibweise inklusive des Tabellenblattnamens angeben, was aber etwas kompliziert ist, wenn man die Zeilen- und Spaltennummern in Variablen hat.
der Weg über das Zellobjekt hat auch den Vorteil, dass die Parameter so in der richtigen Reihenfolge stehen und man die Parameterbenennung auch weglassen darf.
...Names.Add "xxx", Range(Cells(a, b), Cells(x, y))

Gruß Daniel
AW: VBA Namensmanager Einträge verfassen und auslesen
23.05.2019 13:38:09
David
Hallo Daniel,
danke für die Hilfe und super Erklärung.
Konnte mit eurer Hilfe mein Problem jetzt lösen und habe einiges neues über VBA dazugelernt :)
Gruß,
David

26 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige