3.9k Aufrufe
Gefragt in Tabellenkalkulation von rudi4ad Mitglied (167 Punkte)
Hallo,

ich möchte gern einer Liste mit Strings einen Namen geben, ohne diese Liste irgendwo im Tabellenblatt speichern zu müssen.

Dazu habe ich den Name-Manager geöffnet,
einen neuen Namen eingetragen : _BNummern
und folgende Matrix zugewiesen:
={"86"."20"."19"."21"."30"."32A"."32B"."52A"."53A"."57A"."58A"."72"}

Der Sinn der Übung ist, diese Liste dann in VBA abrufen zu können.
mein Versuch:
Dim sID
For each sid in Nemes(_BNummern)

Next


Es gelingt mir aber nicht. Weiß jemand, wo der Fehler liegt?

Gruß Rudi

17 Antworten

0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

ein Beispiel :-)

gruss nighty

Sub MeinArray()
Dim BeispielArray As Variant
Dim ArrayIndex As Integer
BeispielArray = Array("Mo", "Di", "Mi", "Do", "Fr", "Sa", "So")
For ArrayIndex = 0 To UBound(BeispielArray)
Cells(ArrayIndex + 1, 1) = BeispielArray(ArrayIndex)
Next ArrayIndex
End Sub
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Rudi,

weshalb willst du das Array nicht im Code definieren?



Dim sID As Byte
Dim arrNummern()
arrNummern = Array("86", "20", "19", "21", "30", "32A", "32B", "52A", "53A", "57A", "58A", "72")
For sID = 0 To UBound(arrNummern)
MsgBox arrNummern(sID)
Next


Bis später,
Karin
0 Punkte
Beantwortet von rudi4ad Mitglied (167 Punkte)
Hi all

erstmal Dank für euer Interesse.
Aber eben da war ich schon.

Der User soll nicht in die VBA-Umgebung, wenn sich an der Liste ausnahmeweise mal etwas ändern sollte. Er soll dann über Excel die Liste korrigieren. Deshalb hatte ich die Liste als Namen definiert, bin mir aber auch nicht sicher, ob die Schreibweise richtig ist.

Gruß Rudi
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Rudi,

dann musst du den Umweg über "Bezieht sich auf" gehen und das in ein Array schreiben:

Dim sID As Byte
Dim strWerte As String
Dim arrNummern
strWerte = Application.Substitute(Application.Substitute(Application.Substitute(ThisWorkbook.Names("_BNummern").RefersTo, "={", ""), "}", ""), """", "")
arrNummern = Split(strWerte, ",")
For sID = 0 To UBound(arrNummern)
MsgBox arrNummern(sID)
Next


Bis später,
Karin
0 Punkte
Beantwortet von rudi4ad Mitglied (167 Punkte)
Hallo Karin,

man, ist das kompiliinszeniert!

Dankeschön, so geht's.
Was ich nicht verstehe, wenn
"={" durch ""
"}" durch ""
"""" durch ""
ersetzt wurde, wo kommt das Komma her nach dem gesplittet wird.
Ah, ich denke, VBA(engl.) liest die Punkte als Komma's.

Ich frag mal einfach noch was:
Die Liste einem Namen zuzuweisen war meine Idee.
Gibt's denn noch 'ne andere (für den User einfache) Möglichkeit, die Liste verfügbar zu machen,
ohne sie in ein Blatt schreiben zu müssen?

Gruß Rudi
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Rudi,

eine andere Lösung als die bisher genannten fällt mir nicht ein.

Es stellt sich aber die Frage, weshalb du die Daten nicht ins Tabellenblatt schreiben willst. Für den Zellbereich kannst du ja einen dynamisch sich an die Anzahl an Werten anpassenden Namen definieren, sodass du dann den Zellbereich völlig problemlos durchlaufen kannst:

Dim rngZelle As Range
For Each rngZelle In Range("_BNummern")
MsgBox rngZelle.Value
Next rngZelle



Bis später,
Karin
0 Punkte
Beantwortet von rudi4ad Mitglied (167 Punkte)
Hallo Karin,

auf den beiden vorhandenen Tabellenblättern ist einfach kein Platz,
und nur dafür wollte ich kein extra Blatt anlegen und evtl. verstzecken.

Dann werd' ich mal über den Namen gehen.

Dir noch ein schönen WE

Gruß
Rudi
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi :-)

dann schau dir diese Methode an

gruß nighty

OpenAsTextStream-Methode
0 Punkte
Beantwortet von rudi4ad Mitglied (167 Punkte)
Hi nighty,
danke für die Idee.

Das heißt, die Liste in einer externe Datei ablegen?
Das wäre zu umständlich.

Gruß Rudi
0 Punkte
Beantwortet von rudi4ad Mitglied (167 Punkte)
Hi nochmal

eben fällt mir noch ein,
wenn man eine aktiveX-Schaltfläche auf dem Tabellenblatt hat
hat diese eine Tag-Eigenschaft(?), darin kann man doch einen String speichern.
Ist bloß die Frage, ob sie diesen String auch behält, wenn die Datei geschlossen wird.
Da muss ich doch gleich mal nachsehen.

Dann schreibe ich dazu ein kleines Hilfsprogramm,
mit dem der User diesen String verändern kann.

Gruß Rudi
...