Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

ARRAY als Konstante, geht das?

Forumthread: ARRAY als Konstante, geht das?

ARRAY als Konstante, geht das?
15.09.2004 12:44:13
Frank
Hallo an Alle,
ich benötige eine Liste von String-Ausdrücken immer wieder. Am elegantesten lässt sich das über ein Datenfeld (Array) realisieren. Z.B. so:
Option Base 1
Sub(Irgendwas)
Dim i as Integer
dim VName as Variant
VName = Array("Frank","Wiebke","Andrea")
For i = 1 to 3
MsgBox(Vname(i))
Next i
End Sub
So weit, so gut. Das funktioniert. Die Liste mit den Namen ändert sich nicht. Immer die gleichen Namen. Aber diese Namen brauche ich in mehreren Prozeduren (SUBs). Diese Prozeduren stehen alle im gleichen Modul. Deshalb möchte ich gerne dieses Array als PUBLIC CONST ..... am Anfang des Moduls definieren, um dann in allen Prozeduren darauf zugreifen zu können. Mit einem einzelnen Namen geht das so:
Public Const Name as String = "Frank"
Nur mit einem Array will mir das nicht gelingen. Geht das vieleicht gar nicht? Oder weiss da jemand einen Rat?
Ich freue mich, wenn ihr mir einen Vorschlag machen könnt.
Viele Grüße
Frank
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ARRAY als Konstante, geht das?
nighty
hi frank :)
vielleicht so :)
gruss nighty
einzufuegen in einem allgemeinen modul,redim /preserv waere noch dazu zu erwaehnen :)
public Vname as string/variant/integer/long/boolean
oder nach dimensionswuenschen :))
public Vname(5,5,5,5) as string/variant/integer/long/boolean
Anzeige
AW: ARRAY als Konstante, geht das?
Frank
Hallo nighty
vielen Dank für die schnelle Antwort, mit der ich aber leider nicht sehr viel anfangen kann. Redim nützt hier wohl nichts. Und den Ausdruck "preserv" kenne ich und auch die Excel-Hilfe nicht. Der Code steht übrigens, wie von Dir vorgeschlagen, in einem allgemeinen Modul.
Viele Grüße
Frank
Anzeige
AW: ARRAY als Konstante, geht das?
nighty
hi frank :)
wenn die deklarierung ueber public in einem allgemeinen modul erfolgt stehen dessen inhalte solange zur verfuegung wie die mappe geoeffnet ist,als global,die deinen sind local.
gruss nighty
AW: ARRAY als Konstante, geht das?
Frank
Hallo nighty,
es bleibt leider dabei: ich deklariere wie folgt in einem allgemeinen Modul:
Public Const VName as Variant = Array("Text","Text1","usw")
und bekomme die Fehlermeldung: "Fehler beim Kompilieren. Konstanter Ausdruck erforderlich". Nun bin ich also genauso schlau wie zuvor.
Viele Grüße
Frank
Anzeige
AW: ARRAY als Konstante, geht das?
15.09.2004 13:48:35
Stephan
Lieber Frank,
meines Wissens geht es nicht, ein Array als const zu deklarieren. Habe mich auch mit diesem Problem herumgeaergert und bin fuer mich auf folgenden Notbehelf gekommen: ich habe die Definition des Arrays in eine Funktion gesteckt, die mir dann den gewuenschten Eintrag ausliest. Also etwa wie folgt:
public

Function Vorname(index as integer) as string
dim names
names = Array("Anton", "Berta", "Charlie")
Vorname = names(index)
End Function

Jetzt habe ich die Namen an einer einzigen Stelle aufgelistet, und kann trotzdem von ueberall her mit Vorname(i) darauf zugreifen. In meiner Funktion habe ich sogar noch eine Fehlerbehandlung drin, falls i zu gross ist...
Herzlichst,
Stephan.
Anzeige
AW: ARRAY als Konstante, geht das?
Frank
Hallo Stephan,
vielen Dank für die Antwort. Auf die Idee mit der Funktion bin ich nicht gekommen. Gefällt mit aber. Das ist sicher nicht nur ein Notbehelf. Mein Problem kann ich mit Deinem Vorschlag bestens lösen.
Gaaaaanz herzlichen Dank und viele Güße aus dem Norden (Hamburg)
Frank
Anzeige
AW: ARRAY als Konstante, geht das?
15.09.2004 13:51:28
ANdreas
Hallo Frank,
Arrays können keine Konstanten sein.
Wenn Du das Array als globale Variable deklarierst, fehlt ja noch die Initialisierung der Werte. Dies müßte vor der ersten Abfrage der Werte aus dem Array passieren, am besten gleich beim Öffnen der Mappe.
Variante 1:
'Klassenmodul "DieseArbeitsmappe"
Option Explicit
Option Base 1

Private Sub Workbook_Open()
VName = Array("Frank", "Wiebke", "Andrea")
End Sub

'Standardmodul
Option Explicit
Option Base 1
Public VName As Variant
Sub Irgendwas()
Dim i As Integer, s$
For i = 1 To 3
s = s & VName(i) & vbCr
Next i
MsgBox s
End Sub
Oder die zweite Variante Lösung mithilfe einer Funktion (ohne Workbook_Open)
'Standardmodul
Option Explicit
Option Base 1
Public Function VName(intParam%) As String
Dim arrName As Variant
arrName = Array("Frank", "Wiebke", "Andrea")
On Error Resume Next
VName = arrName(intParam)
On Error GoTo 0
End Function
Sub Irgendwas()
Dim i As Integer, s$
For i = 1 To 3
s = s & VName(i) & vbCr
Next i
MsgBox s
End Sub
Hoffe das hilft weiter,
Andreas
Anzeige
AW: ARRAY als Konstante, geht das?
Frank
Hallo Andreas,
Vielen Dank für Deine Antwort. Geholfen hat mir das schon. Das Thema mit dem Klassenmodul ist aber noch ein wenig zu hoch für mich, bin erst Anfänger in VBA. Aber den Vorschlag mit der Funktion habe ich (glaube ich) verstanden. Und mein Problem lässt sich darüber ganz sicherlich lösen. Du hast mir sehr geholfen: Danke schön.
Viele Grüße
Frank
Anzeige
AW: ARRAY als Konstante, geht das?
nighty
hi alle :)
ich lag wohl ein wenig falsch,doch nach der alten arraybildung finde ich es leichter zu gestalten :)
gruss nighty
statt des indexes koennte man auch die var einer schleife einsetzen :)
Public DeineVar(1)

Sub makro01()
DeineVar(0) = "Dein Text"
DeineVar(1) = "Dein text"
End Sub

Anzeige
;
Anzeige

Infobox / Tutorial

ARRAY als Konstante in VBA nutzen


Schritt-für-Schritt-Anleitung

Um ein Array als Konstante in VBA zu verwenden, ist es wichtig zu verstehen, dass VBA keine Arrays als Konstanten unterstützt. Stattdessen kannst du ein Array als globale Variable definieren und es in verschiedenen Prozeduren verwenden. Hier ist eine Schritt-für-Schritt-Anleitung, wie du ein vba array definieren kannst:

  1. Öffne dein Excel VBA-Editor (ALT + F11).

  2. Erstelle ein neues Modul (Rechtsklick auf "VBAProject" > Einfügen > Modul).

  3. Deklariere das Array als globale Variable. Zum Beispiel:

    Public VName As Variant
  4. Initialisiere das Array im Workbook_Open-Ereignis oder in einer eigenen Funktion:

    Private Sub Workbook_Open()
        VName = Array("Frank", "Wiebke", "Andrea")
    End Sub
  5. Du kannst nun das Array in einer beliebigen Subroutine verwenden:

    Sub Irgendwas()
        Dim i As Integer
        Dim s As String
        For i = LBound(VName) To UBound(VName)
            s = s & VName(i) & vbCr
        Next i
        MsgBox s
    End Sub

Häufige Fehler und Lösungen

  • Fehlermeldung: "Konstanter Ausdruck erforderlich"
    Diese Fehlermeldung tritt auf, wenn du versuchst, ein Array als Public Const zu deklarieren. Arrays können keine Konstanten sein. Verwende stattdessen Public für globale Variablen.

  • Problem mit der Initialisierung
    Stelle sicher, dass du das Array vor der ersten Verwendung initialisierst. Dies kann im Workbook_Open-Ereignis geschehen.


Alternative Methoden

Wenn du das Array nicht als globale Variable definieren möchtest, kannst du auch eine Funktion verwenden, um auf die Werte zuzugreifen. Hier ist ein Beispiel:

Public Function Vorname(index As Integer) As String
    Dim names As Variant
    names = Array("Anton", "Berta", "Charlie")

    On Error Resume Next
    Vorname = names(index)
    On Error GoTo 0
End Function

Diese Funktion ermöglicht es dir, den gewünschten Namen über den Index abzurufen, ohne dass das Array direkt in jedem Modul verfügbar sein muss.


Praktische Beispiele

Hier sind zwei einfache Beispiele, wie du ein vba array definieren und verwenden kannst:

  1. Beispiel mit Workbook_Open:

    'In diesem Beispiel wird das Array beim Öffnen der Arbeitsmappe initialisiert.
    Private Sub Workbook_Open()
        VName = Array("Frank", "Wiebke", "Andrea")
    End Sub
  2. Funktion zur Rückgabe von Werten:

    Public Function GetName(index As Integer) As String
        Dim names As Variant
        names = Array("Frank", "Wiebke", "Andrea")
    
        If index >= LBound(names) And index <= UBound(names) Then
            GetName = names(index)
        Else
            GetName = "Index außerhalb des Bereichs"
        End If
    End Function

Tipps für Profis

  • Verwende Option Explicit am Anfang deiner Module, um sicherzustellen, dass alle Variablen deklariert sind. Das hilft, Tippfehler zu vermeiden.
  • Nutze On Error Resume Next vorsichtig, um Fehler zu behandeln, wenn du mit Arrays arbeitest. Stelle sicher, dass du nach der Fehlerbehandlung wieder zurück zu On Error GoTo 0 wechselst.
  • Bei der Verwendung von Public Variablen ist es ratsam, diese in einem allgemeinen Modul zu deklarieren, um die Sichtbarkeit in allen Modulen zu gewährleisten.

FAQ: Häufige Fragen

1. Kann ich ein Array in VBA als Konstante deklarieren?
Nein, in VBA ist es nicht möglich, ein Array als Konstante zu deklarieren. Arrays müssen als Variablen definiert werden.

2. Wie kann ich die Größe eines Arrays dynamisch ändern?
Verwende ReDim und ReDim Preserve, um die Größe eines Arrays zur Laufzeit zu ändern, während die vorhandenen Werte erhalten bleiben.

3. Was ist der Unterschied zwischen Public und Private Variablen?
Public Variablen sind in allen Modulen der Arbeitsmappe zugänglich, während Private Variablen nur im Modul, in dem sie deklariert wurden, sichtbar sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige