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

Array mit Variablen-Namen

Forumthread: Array mit Variablen-Namen

Array mit Variablen-Namen
10.07.2018 15:17:02
Hannes
Hallo zusammen,
ich habe etliche Arrays in denen ich Zeilennumern speichere die ich hinterher brauche um dort Daten auszulesen. Diese Arrays haben alle unterschiedliche und sprechende Namen. Die Arrays definiere ich wie folgt:

Dim master_array() as variant
Dim zeile_fahrzeug1
dim zeile_fahrzeug2
dim zeile_fahrzeug3

Ich habe aber auch ein "Master"-Array in welchen ich alle Namen der anderen Arrays eingetragen habe.

master_array=array("zeile_fahrzeug1,"zeile_fahrzeug2",...)

Nun möchte ich innerhalb einer Schleife die einzelnen Arrays abarbeiten. Dazu muss ich allerdings die maximale Anzahl an Elementen im Array bestimmen.
Dies versuche ich innerhalb einer Schleife mit der Funktion
max_zeile_array=ubound(master_array(i))

zu erreichen. Jedoch kommt dann die Fehlermeldung "Laufzeitfehler 13: Typen unverträglich".
Kann mir bitte jemand helfen und sagen woran das liegt?
Vielen Dank für Eure Hilfe.
Gruß
Hannes
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array mit Variablen-Namen
10.07.2018 15:32:46
Daniel
Hi
wenn man das zugrunde legt was du hier zeigst, dann liegst an den Anführungzeichen.
die sorgen dafür, dass du nicht die Variablen ins MasterArray übernimmst, sondern nur die Texte
master_array=array(zeile_fahrzeug1, zeile_fahrzeug2,...)
Gruß Daniel
AW: Array mit Variablen-Namen
10.07.2018 15:45:14
Hannes
Hallo Daniel,
danke für das schnelle Feedback. Ich habe nun nochmal ein wenig rumprobiert. Mein Master-Array heisst jetzt "array_namen". Wenn ich das - nachdem ich alle anderen Arrays vorher gefüllt habe - fülle, dann erscheinen die Inhalte der einzelnen Arrays. Ich will jedoch nur deren Namen in das Namens Array schreiben, damit ich dir Arrays mit Namen ansprechen kann.
Wie kann ich das machen, dass die Namen der Arrays aufgenommen werden und nicht deren Werte?
Danke.
Gruß
Hannes
Anzeige
AW: Array mit Variablen-Namen
10.07.2018 16:21:01
Daniel
Hi
wenn du Arrays mit Namen ansprechen willst (und diese Namen selbst aus Variablen erzeugen willst)
dann musst du Dictionarys verwenden.
Ein Dictionary ist im Prinzip ein eindimensionales Array, welches einen Freitext-Index hat.
dh du kannst einen beliebigen Text als Index verwenden und über diesen Text auf den gespeicherten Wert zugreifen (diese wert kann auch ein weiteres Array sein).
mal ein Beispiel:
Sub test()
Dim Master As Object
Dim txt As String
Dim i As Long
Set Master = CreateObject("Scripting.Dictionary")
Master("Fahrzeug1") = Array(1, 2)
Master("Fahrzeug2") = Array(3, 4, 5)
Master("Fahrzeug3") = Array(6, 7, 8, 9)
txt = "Fahrzeug"
For i = 1 To 3
Debug.Print txt & i, "Anzahl:"; UBound(Master(txt & i)) + 1, "erster Wert:"; Master(txt & i)(0)
Next
End Sub
Gruß Daniel
Anzeige
ich weiß nicht, wie es geht
10.07.2018 18:48:45
Oberschlumpf
Hi Daniel,
trotzdem glaub ich, Hannes will was anderes.
Bsp-Code

Dim strAuto As String, strMofa As String, strVarNamen(1) As String
strVarNamen(0) = strAuto 'NICHT den Inhalt von strAuto, sondern den VarNamen selbst!!!
strVarNamen(1) = strMofa 'NICHT den Inhalt von strMofa, sondern den VarNamen selbst!!!
Ich versteh den Sinn nicht, aber ok, ich hab ja auch nicht alle Hintergrundinfos, die dazu nötig sind.
Und ich weiß auch nicht, ob und wenn, wie das lösbar sein soll.
Ciao
Thorsten
Anzeige
vergiss meinen Beitrag
10.07.2018 18:56:59
Oberschlumpf
Hi Daniel,
sorry, hab deine - richtige - Lösung ein 2. Mal gelesen, getestet + auch endlich verstanden...yeah
Ja, du machst es ja genau so, wie Hannes es wollte.
Ich find das aber so sehr umständlich.
Nein, nicht falsch verstehen!
Ich find nicht deinen Code umständlich, sondern den Gedanken von Hannes, die Namen von Variablen selbst zu "sammeln", um sie dann mit einer Schleife abzuarbeiten.
Aber ok. Wie schon mal bemerkt: Ich hab wahrsch. zu wenig Hintergrundinfos, um zu verstehen, warum so zu programmieren, vorteilhaft(er) ist.
Ciao
Thorsten
Anzeige
AW: vergiss meinen Beitrag
16.07.2018 12:43:08
Hannes
Hallo Thorsten,
ich habe unterschiedliche Namen für meine Fahrzeuge, beispielsweise Ford Focus, Audi A1, BMW 3er, etc. Diese Namen will ich in ein "Inhaltsverzeichnis" schreiben um nur einmal dieses "Inhaltsverzeichnis" ändern zu müssen, wenn neue Namen hinzukommen. Ich habe dann auch entsprechend benannte Arrays in denen Zeilennummern mit einzelnen Infos zu den jeweiligen Fahrzeugen aufgeführt sind. Ich will dann innerhalb einer Schleife alle relevanten Informationen zu den einzelnen Fahrzeugen abfragen, ausgeben und weiterverarbeiten.
Wie kann ich die verschiedenen Namen in das Dictionary eintragen?
Vielen Dank.
Gruß
Hannes
Anzeige
AW: am besten...
16.07.2018 13:03:26
Oberschlumpf
Hi Hannes,
zeig uns bitte per Upload eine Bsp-Datei mit Bsp-Daten.
Mit Hilfe der Datei sollte dein Problem/deine Frage zu erkennen sein.
Am besten in Tabelle1 alles so, wie es ist, in Tabelle2 so, wie es sein soll.
Denn auch deine erneuten Beschreibungen verwirren mich nur wieder aufs Neue.
Na ja, wie gesagt, das gilt für mich. Andere verstehen vllt, was du möchtest. Aber ohne eine Datei weiß ich nicht weiter.
Was deine Dictionary-Frage betrifft:
Hast du denn die Antwort, bzw den Code von Daniel ausprobiert?
Ciao
Thorsten
Anzeige
AW: Array mit Variablen-Namen
10.07.2018 15:43:25
mmat
Hallo Hannes,
hier ist ein i zuviel, das muß heissen:
max_zeile_array=ubound(master_array())
;
Anzeige

Infobox / Tutorial

Array mit Variablen-Namen in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Definiere deine Arrays: Zuerst musst du die Arrays definieren, in denen du deine Zeilennummern speicherst. Das kannst du wie folgt tun:

    Dim master_array() As Variant
    Dim zeile_fahrzeug1 As Variant
    Dim zeile_fahrzeug2 As Variant
    Dim zeile_fahrzeug3 As Variant
  2. Erstelle ein Master-Array: Fülle dein Master-Array mit den Namen der anderen Arrays. Achte darauf, dass du die Anführungszeichen richtig setzt, um die Variablen aufzunehmen:

    master_array = Array("zeile_fahrzeug1", "zeile_fahrzeug2", "zeile_fahrzeug3")
  3. Bestimme die maximale Anzahl an Elementen: Um die Anzahl der Elemente in einem Array zu bestimmen, benutze die UBound-Funktion. Stelle sicher, dass du den richtigen Index verwendest:

    For i = LBound(master_array) To UBound(master_array)
       max_zeile_array = UBound(Eval(master_array(i)))
    Next i
  4. Verwende ein Dictionary: Wenn du die Namen der Arrays dynamisch ansprechen möchtest, verwende ein Dictionary:

    Dim Master As Object
    Set Master = CreateObject("Scripting.Dictionary")
    Master("Fahrzeug1") = Array(1, 2)
    Master("Fahrzeug2") = Array(3, 4, 5)

Häufige Fehler und Lösungen

  • Laufzeitfehler 13: Typen unverträglich: Dieser Fehler tritt auf, wenn du versuchst, einen Typ zu verwenden, der nicht kompatibel ist. Überprüfe, ob du die Anführungszeichen um die Variablen im Master-Array korrekt gesetzt hast. Entferne sie, um die Variablen selbst zu referenzieren:

    master_array = Array(zeile_fahrzeug1, zeile_fahrzeug2, zeile_fahrzeug3)
  • Falsche Verwendung von UBound: Stelle sicher, dass du UBound auf das Array anwendest, nicht auf den Namen des Arrays als String. Der richtige Aufruf wäre:

    max_zeile_array = UBound(Eval(master_array(i)))

Alternative Methoden

  • Nutzung von Eval: Mit der Eval-Funktion kannst du den Namen eines Arrays als String verwenden, um darauf zuzugreifen. Dies ist besonders nützlich, wenn du dynamisch auf Arrays zugreifen möchtest.

  • Einsatz von Dictionary: Ein Dictionary ermöglicht es dir, Arrays mit benutzerdefinierten Schlüsseln zu verknüpfen, wodurch du flexibler in der Handhabung der Daten bist. Diese Methode ist oft einfacher und übersichtlicher.


Praktische Beispiele

Hier ist ein Beispiel, das zeigt, wie du verschiedene Fahrzeugnamen in ein Dictionary eintragen kannst:

Sub FahrzeugVerwaltung()
    Dim Master As Object
    Set Master = CreateObject("Scripting.Dictionary")

    Master("Ford Focus") = Array(1, 2, 3)
    Master("Audi A1") = Array(4, 5)
    Master("BMW 3er") = Array(6, 7, 8)

    Dim i As Long
    For i = 0 To Master.Count - 1
        Debug.Print Master.Keys()(i), "Anzahl:"; UBound(Master.Items()(i)) + 1
    Next i
End Sub

Tipps für Profis

  • Excel-Matrix benennen: Wenn du eine Excel-Matrix benennen möchtest, kannst du dies über die Namensverwalter-Funktion tun, um die Lesbarkeit und Wartbarkeit deines Codes zu verbessern.

  • Vermeide globale Variablen: Verwende lokale Variablen so oft wie möglich, um den Scope deiner Variablen zu minimieren und um zukünftige Fehler zu vermeiden.


FAQ: Häufige Fragen

1. Wie kann ich die Namen meiner Arrays in ein Dictionary eintragen? Du kannst ein Dictionary verwenden, um die Namen der Arrays als Schlüssel zu speichern und die Arrays selbst als Werte. Nutze Master("Name") = Array(...), um dies zu tun.

2. Was ist der Unterschied zwischen einem Array und einem Dictionary in VBA? Ein Array verwendet numerische Indizes, während ein Dictionary benutzerdefinierte Schlüssel (z.B. Strings) verwendet, um auf Werte zuzugreifen. Ein Dictionary ist flexibler und ermöglicht dynamisches Hinzufügen und Entfernen von Daten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige