Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
980to984
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
980to984
980to984
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Variablenname

Variablenname
05.06.2008 09:04:55
Specke
Hallo Experten,
ich habe viele String-Arrays der Form
ABC_A (1 to 10)
ABC_B (1 to 10)
XYZ_A(1 to 10)
Der Wert hinter dem Unterstrich steht dabei für die Sprache, die ganz am Anfang festgelegt wird.
Kann ich die Variablen zusammenbauen, damit ich nicht immer mit select case die Sprache abfragen muss?
Bisher habe ich es so:
For i=1 to 10
Select case Sprache
Case A
Übergabe1=ABC_A(i)
Übergabe2=XYZ_A(i)
Case B
Übergabe1=ABC_B(i)
Übergabe2=XYZ_B(i)
usw.
Verarbeitung

Next i
Mir schwebt vor
For i=1 to 10
Übergabe1=ABC_ & Sprache & (i)
Übergabe2=XYZ_ & Sprache & (i)
Verarbeitung
Next i
Leider funtkioniert das nicht :-(
Kann mir jemand weiterhelfen?
Gruß
Specke

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

Betreff
Datum
Anwender
Anzeige
100mal gefragt, 100mal NEIN !
05.06.2008 09:10:13
Renee
Hi Specke,
Variablenamen können nicht dynamisch angesprochen werden!
Mach aus deinen (eindimensionalen) Arrays, mehrdimensionale. Nämlich soviele Dimensionen, wie du Sprachen hast, dann kannst du mit ABC(Index-Ausdruck, Index-Sprache) die Elemente ansprechen.
GreetZ Renée

danke!
05.06.2008 09:18:22
Specke
Hallo Renee,
die Idee ist gut.
Ich war wohl zu sehr auf die bestehenden Variablennamen fixiert, als das ich die Lösung selbst gesehen hätte.
Danke und Gruß
Specke

@Renée : kleine Korrektur Deines Vorschlags
05.06.2008 09:37:44
NoNet
Hallo Renée,
Dein Vorschlag ist grundsätzlich richtig, enthält aber einen kleinen Fehler :
Man benötigt dazu nur 2-dimensionale ARRAY-Variablen und NICHT "...soviele Dimensionen, wie du Sprachen hast..." .
In der 2.Dimension wird dann jeweils nur die Nummer der Sprache gespeichert und DIESE kann "beliebig" hoch sein (tyischerweise bis zur Anzahl der verwendeten Sprachen).
Zumal : Die Anzahl der Dimensionen einer ARRAY-Variablen hängt vom verfügbaren Arbeitsspeicher ab und da ist z.B. auf meinem Notebook mit gerade 512 MB RAM bei 15 Dimensionen "Schluss" ;-)
Hier ein kleines Beispiel :
Sub ArrayDimensionen()
    Dim intArrVar1(1 To 100) As Integer 'EIN-dimensionale ARRAY-Variable
    Dim intArrVar2(1 To 100, 1 To 5) As Integer 'ZWEI-dimensionale ARRAY-Variable
    Dim intArrVar3(1 To 100, 1 To 5, 2000 To 2020) As Integer 'DREI-dimensionale ARRAY-Variable
    Dim intArrVar4(1 To 100, 1 To 5, 2000 To 2020, 1 To 12) As Integer 'VIER-dimensionale ARRAY-Variable
    Dim intArrVar5(1 To 100, 1 To 5, 2000 To 2020, 1 To 12, 1 To 3) As Integer 'etc.
    Dim intArrVarX(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2) 'Hier ist auf meinem Notebook "Schluss" ;-)
    MsgBox intArrVarX(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
End Sub

Gruß, NoNet

Anzeige
Da hast du auch wieder Recht ;-) (owT)
05.06.2008 09:41:34
Renee

AW: Da hast du auch wieder Recht ;-) (owT)
05.06.2008 11:43:00
Nepumuk
Hallo NoNet,
die 15 Dimensionen haben nichts mit deinem Arbeitsspeicher zu tun, sondern mit dem Stackframe. Der hat pro Mappe 512 MB, egal wie groß dein Arbeitsspeicher ist.
Aber, deine 15 Dimensionen benötigen:
3 Einträge pro Dimension ^ 15 Dimensionen = 14.348.907 Einträge
14.348.907 Einträge * 22 Byte pro Eintrag = 315.675.954 Byte
315.675.954 Byte + 20 Byte für die Verwaltung eines Arrays + 4 Byte für jede Dimension * 15 Dimensionen + 12 Byte weil es ein Variantarrray ist = 315.676.046 Byte ~ 301 MB
Bei 16 Dimensionen ist das
3^16*22+20+4*16+12=947.027.958 Byte ~ 903 MB und das ist über dem Limit von 512 MB.
Gruß
Nepumuk

Anzeige
DANKE für diese Erläuterung, Nepumuk
05.06.2008 12:40:54
NoNet
Hallo Nepumuk,
vielen Dank für Deine ausführliche Erläuterung dieser Grenze. Das kann man doch als reiner Excel- und VBA-Anwender gar nicht alles wissen
Selbst auf den XLIMITS habe ich dazu keine ausführlicheren Hinweise gefunden.
Danke, Gruß NoNet

AW: 100mal gefragt, 100mal NEIN !
05.06.2008 10:07:33
Tobias
Wer keine Indizes 1...3 für die Länder verwenden möchte kann auch eine Collection verwenden. Das ganz funktioniert dann etwa so:

Sub CollectionMitArrays()
Dim i As Integer
Dim col As Collection
Dim Deutschland(10) As Double
Dim Oesterreich(10) As Double
Dim Schweiz(10) As Double
Set col = New Collection
For i = 1 To 10
Deutschland(i) = 3 * i
Oesterreich(i) = 2 * i
Schweiz(i) = 1 * i
Next
Call col.Add(Deutschland, "BRD")
Call col.Add(Oesterreich, "A")
Call col.Add(Schweiz, "CH")
Debug.Print col.Item("BRD")(5)
Debug.Print col.Item("A")(4)
Debug.Print col.Item("CH")(3)
End Sub


Schönen Gruß, Tobi
http://tobiasschmid.de/

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige