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

"Variable" Variablennamen [VBA]

Forumthread: "Variable" Variablennamen [VBA]

"Variable" Variablennamen [VBA]
22.09.2016 13:41:40
André
Hallo zusammen,
ich habe eine For Schleife in der eine Variable hochgezählt wird ich möchte die aktuelle Nummer in den Variablennamen integrieren und verwenden.
Beispiel:
Public TEST As String
SHEET_1 = "TEST1"
SHEET_2 = "TEST2"
SHEET_3 = "TEST3"
SHEET_4 = "TEST4"
For j = 1 To 4
TEST = SHEET_j
Next j

Ich will also das "j" unterbringen. (PS: Das Programm hat in diesem Fall natürlich noch keinen Sinn da die Variable eh überschrieben wird. Soll nur ein Beispiel darstellen!
Freue mich über eure Kommentare!
Gruß
André
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: "Variable" Variablennamen [VBA]
22.09.2016 13:53:50
UweD
Hallo André
so?

Dim StrSheet(1 To 4) As String, Test As String
Dim i As Integer
For i = 1 To 4
Test = StrSheet(i)
Next i
LG UweD
AW: "Variable" Variablennamen [VBA]
22.09.2016 15:48:33
André
Hallo,
das ist nicht das, wonach ich gesucht habe. Es funktioniert dennoch. Arrays sind hier natürlich die schönere Lösung ;-). Es funktioniert so! Auch wenn es sinnlos erscheint ... aus Interesse: Geht das dann tatsächlich auch ohne ein Array zu verwenden? So dass ich dann tatsächlich den Namen der Variable beeinflussen kann und nicht die "Position" in der der Wert sitzt?
Danke :)
Gruß
André
Anzeige
Datenfeld!
22.09.2016 13:55:24
Rudi
Hallo,
SHEET(1) = "TEST1"
SHEET(2) = "TEST2"
SHEET(3) = "TEST3"
SHEET(4) = "TEST4"
For j = 1 To 4
TEST = SHEET(j)
Next j
Gruß
Rudi
AW: Datenfeld!
22.09.2016 15:48:48
André
Hallo,
das ist nicht das, wonach ich gesucht habe. Es funktioniert dennoch. Arrays sind hier natürlich die schönere Lösung ;-). Es funktioniert so! Auch wenn es sinnlos erscheint ... aus Interesse: Geht das dann tatsächlich auch ohne ein Array zu verwenden? So dass ich dann tatsächlich den Namen der Variable beeinflussen kann und nicht die "Position" in der der Wert sitzt?
Danke :)
Gruß
André
Anzeige
AW: Datenfeld!
22.09.2016 18:27:06
Nepumuk
Hallo,
eine andere Möglichkeit per Collection:
Option Explicit

Public TEST As String

Public Sub Beispiel()
    
    Dim j As Long
    Dim objCollection As Collection
    Set objCollection = New Collection
    
    Call objCollection.Add(Item:="TEST1", Key:="SHEET_1")
    Call objCollection.Add(Item:="TEST2", Key:="SHEET_2")
    Call objCollection.Add(Item:="TEST3", Key:="SHEET_3")
    Call objCollection.Add(Item:="TEST4", Key:="SHEET_4")
    
    For j = 1 To 4
        TEST = objCollection("SHEET_" & CStr(j))
    Next j
    
    Set objCollection = Nothing
End Sub

Gruß
Nepumuk
Anzeige
AW: "Variable" Variablennamen [VBA]
22.09.2016 22:21:29
Zwenn
Hallo André,
dynamische Variablennamen, wie Du sie möchtest, werden von VBA nicht unterstützt. Ich wüßte ehrlich gesagt auch nicht, wozu man so ein unübersichtliches Konstrukt verwenden sollte. Geht das in anderen Sprachen? Denn ich habe das noch nie gesehen. Trotz Kenntnissen in C, Java, (Turbo) Pascal, PHP, Javascript und noch ein paar anderen.
Die Lösung mit Arrays wurde Dir ja bereits präsentiert.
Viele Grüße,
Zwenn
Anzeige
Wenn's mal sein MUSS, kann man das bspw ...
23.09.2016 01:50:52
Luc:-?
…so machen, André:
Dokument-Klassenmodul DieseArbeitsmappe:
Option Explicit
Public XSheet1 As Worksheet, XSheet2 As Worksheet, XSheet3 As Worksheet
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Set XSheet1 = Nothing: Set XSheet2 = Nothing: Set XSheet3 = Nothing
End Sub
Private Sub Workbook_Open()
Set XSheet1 = Tabelle1: Set XSheet2 = Tabelle2: Set XSheet3 = Tabelle3
End Sub
Normales Modul:
Option Explicit
Sub varVarTest()
Dim i As Integer, Sh As Worksheet
For i = 1 To 3
Set Sh = CallByName(ThisWorkbook, "XSheet" & CStr(i), VbGet)
MsgBox Sh.Name
Next i
End Sub
Dazu müssen die BasisVariablen der namensvariablen Variable aber zwingend in einem Klassenmodul angelegt wdn, sonst können sie so nicht angesprochen wdn.
Morrn, Luc :-?
Besser informiert mit …
Anzeige
AW: Wenn's mal sein MUSS, kann man das bspw ...
23.09.2016 08:58:20
André
Danke ;-). Das schaut gut aus!
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Dynamische Variablennamen in Excel VBA nutzen


Schritt-für-Schritt-Anleitung

Um mit dynamischen Variablennamen in Excel VBA zu arbeiten, befolge diese Schritte:

  1. Erstelle ein neues Modul in deinem VBA-Editor.

  2. Definiere deine Variablen. Du kannst eine Array- oder Collection-basierte Lösung verwenden, um dynamische Variablennamen zu simulieren.

  3. Nutze eine Schleife, um durch deine Variablen zu iterieren. Hier ist ein Beispiel mit Arrays:

    Dim StrSheet(1 To 4) As String
    Dim i As Integer
    
    StrSheet(1) = "TEST1"
    StrSheet(2) = "TEST2"
    StrSheet(3) = "TEST3"
    StrSheet(4) = "TEST4"
    
    For i = 1 To 4
       MsgBox StrSheet(i)
    Next i
  4. Führe das Skript aus, um die Werte deiner „Variablen“ anzuzeigen.


Häufige Fehler und Lösungen

  • Fehler: „Variable nicht definiert“

    • Lösung: Stelle sicher, dass alle Variablen korrekt deklariert sind. Verwende Option Explicit, um sicherzustellen, dass alle Variablen im Code deklariert werden müssen.
  • Fehler: „Typ nicht definiert“

    • Lösung: Überprüfe, ob du die richtige Datenart für deine Variablen verwendet hast. Bei der Verwendung von Arrays oder Collections müssen die Datentypen konsistent sein.

Alternative Methoden

Wenn du dynamische Variablennamen in VBA benötigst, gibt es einige alternative Ansätze:

  1. Collection verwenden: Eine Collection ermöglicht es dir, Elemente mit Schlüsseln zu speichern, wodurch du den Namen der Variablen dynamisch gestalten kannst.

    Dim objCollection As Collection
    Set objCollection = New Collection
    objCollection.Add Item:="TEST1", Key:="SHEET_1"
    objCollection.Add Item:="TEST2", Key:="SHEET_2"
  2. CallByName verwenden: Damit kannst du auf Variablen in einem Klassenmodul zugreifen. Hier ist ein Beispiel:

    Set Sh = CallByName(ThisWorkbook, "XSheet" & CStr(i), VbGet)

Praktische Beispiele

Hier sind zwei praktische Beispiele, wie du dynamische Variablen in Excel VBA nutzen kannst:

  1. Mit Arrays:

    Dim Test(1 To 4) As String
    Dim j As Integer
    
    Test(1) = "TEST1"
    Test(2) = "TEST2"
    Test(3) = "TEST3"
    Test(4) = "TEST4"
    
    For j = 1 To 4
       Debug.Print Test(j)
    Next j
  2. Mit Collections:

    Dim myCollection As Collection
    Set myCollection = New Collection
    
    myCollection.Add Item:="TEST1", Key:="SHEET_1"
    myCollection.Add Item:="TEST2", Key:="SHEET_2"
    
    For j = 1 To 2
       Debug.Print myCollection("SHEET_" & j)
    Next j

Tipps für Profis

  • Verwende Option Explicit: Dies hilft dir, Tippfehler in deinen Variablennamen zu vermeiden und sorgt für mehr Klarheit.
  • Nutze Kommentare: Kommentiere deinen Code, um die Funktionsweise deiner dynamischen Variablen zu erklären.
  • Vermeide dynamische Variablennamen: In den meisten Fällen sind Arrays und Collections die bessere Wahl, da sie den Code leserlicher und wartbarer machen.

FAQ: Häufige Fragen

1. Kann ich dynamische Variablen in VBA erstellen? Nein, VBA unterstützt keine dynamischen Variablennamen. Stattdessen solltest du Arrays oder Collections verwenden.

2. Was ist der beste Weg, um Daten in VBA zu speichern? Arrays und Collections sind die besten Optionen, um mehrere Werte zu speichern. Sie bieten eine strukturierte und übersichtliche Möglichkeit, mit Daten zu arbeiten.

3. Wie kann ich auf Variablen in einem Klassenmodul zugreifen? Du kannst die CallByName-Funktion verwenden, um auf Variablen in Klassenmodulen dynamisch zuzugreifen. Achte darauf, dass die Variablen im richtigen Kontext deklariert sind.

4. Gibt es eine Möglichkeit, die Lesbarkeit des Codes zu erhöhen? Ja, indem du Option Explicit verwendest und deine Variablen gut benennst sowie Kommentare hinzufügst, kannst du die Lesbarkeit deines Codes erheblich verbessern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige