Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

ARRAY als Konstante, geht das?

Betrifft: ARRAY als Konstante, geht das? von: Frank
Geschrieben am: 15.09.2004 12:44:13

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

  


Betrifft: AW: ARRAY als Konstante, geht das? von: nighty
Geschrieben am: 15.09.2004 12:55:55

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


  


Betrifft: AW: ARRAY als Konstante, geht das? von: Frank
Geschrieben am: 15.09.2004 13:03:31

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


  


Betrifft: AW: ARRAY als Konstante, geht das? von: nighty
Geschrieben am: 15.09.2004 13:35:26

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


  


Betrifft: AW: ARRAY als Konstante, geht das? von: Frank
Geschrieben am: 15.09.2004 13:47:56

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


  


Betrifft: AW: ARRAY als Konstante, geht das? von: Stephan
Geschrieben am: 15.09.2004 13:48:35

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.


  


Betrifft: AW: ARRAY als Konstante, geht das? von: Frank
Geschrieben am: 15.09.2004 14:06:31

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


  


Betrifft: AW: ARRAY als Konstante, geht das? von: ANdreas
Geschrieben am: 15.09.2004 13:51:28

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


  


Betrifft: AW: ARRAY als Konstante, geht das? von: Frank
Geschrieben am: 15.09.2004 14:12:40

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


  


Betrifft: AW: ARRAY als Konstante, geht das? von: nighty
Geschrieben am: 17.09.2004 20:01:18

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