Seite 1 von 1
global const array [gibt's nicht!]
Verfasst: Do, 20.11.2008 15:56
von steffn
ich möchte die inhalte für ein datenfeld unter option explicit festlegen um die werte außerhalb meiner subs und ganz oben in meinem modul bei den einfachen konstanten variablen zu haben
- funktioniert das?
- schreibweise?
wie ich es auch schreibe, ich bekomme immer eine fehlermeldung
mein letzter versuch war:
Code: Alles auswählen
option explicit
dim array(1 to 8) as integer
array(1) = 10
...

dabei markiert er netterweise "integer"
Re: global const array
Verfasst: Do, 20.11.2008 21:05
von hawe
Im Deklarationsteil eines Moduls gibt es keine Wertzuweisungen ausser bei Konstanten
Const
Re: global const array
Verfasst: Sa, 22.11.2008 00:15
von steffn
ja und ich möchte gerne ein datenfeld voll von konstanten
daher meine fragen:
- funktioniert so etwas?
- und wie ist die schreibweise?
Re: global const array
Verfasst: Sa, 22.11.2008 09:19
von hawe
Nein, es gibt keine Const Arrays...
Re: global const array [gibt's nicht!]
Verfasst: So, 14.12.2008 18:47
von steffn
Damit hat meine Suche ein Ende - danke.
...
Ich hätte allerdings immer noch gerne Datenfelder voller Konstanten.
Daher benutze ich jetzt globale Datenfelder und fülle diese einmal.
Problem ist, dass diese später überraschenderweise leer sind und somit Fehler hervorrufen, obwohl die Datei durchgängig geöffnet ist und ich den Inhalt ganz sicher nur an einer Stelle im Code ändere.
Welche Ereignisse können so etwas auslösen

Re: global const array [gibt's nicht!]
Verfasst: So, 14.12.2008 19:54
von komma4
steffn hat geschrieben:Problem ist, dass diese später überraschenderweise leer sind
F1 Online Hilfe Basic: Global-Anweisung [Laufzeit] hat geschrieben:Dimensioniert eine Variable oder ein Array auf globaler Ebene (also nicht innerhalb eine Subroutine oder Funktion), sodass die Variable bzw. das Array in allen Bibliotheken und Modulen für die Dauer der aktuellen Sitzung gültig ist.
Du definierst sie ausserhalb - und rufst die
SUB, vor der sie stehen auf, vor der Anweisung auf, die sie ändern? Sie stehen im gleichen Modul der selben Bibliothek?
Beispiel:
Code: Alles auswählen
Global meineVar as String
Sub Main1
meineVar = "erster Inhalt"
print meineVar
' irgendwas
' ...
' Aufruf der SUB zum Ändern
Main2
'...
print meineVar
' weiter im Text
'...
print meineVar ' hier leer?
End Sub
Sub Main2
meineVar = "neuer Inhalt"
End Sub
Verwendest Du
Option Explicit?
Re: global const array [gibt's nicht!]
Verfasst: So, 14.12.2008 20:44
von steffn
Verstehe ich nicht.^^ Ja.
Ja.
In meinem Fall würde ich das anhand von Code mit deinen Begriffen so beschreiben:
Code: Alles auswählen
Option Explicit
Global meinArr() as String
Sub Main1
meinArr() = "Inhalt" ' einmaliges Füllen
End Sub
' ...
' andere Subs, eventuelle Fehlermeldungen, eventuelle Code Änderungen
'...
Sub Main2
print meinArr() ' hier mal gefüllt, mal leer, noch kein System erkannt
End Sub
Re: global const array [gibt's nicht!]
Verfasst: Mo, 15.12.2008 06:14
von komma4
Hallo steffn,
Du verwendest ein ARRAY - und das benötigt eine Positionsangabe...
F1 Online Hilfe,Basic, ARRAY-Funktion [Laufzeit] hat geschrieben:Dim A As Variant
A = Array("Fred","Tom","Bill")
Msgbox A(2)
Dein Beispiel kann nicht laufen.
Code: Alles auswählen
Option Explicit
' definiert ein nicht-deminsioniertes Array
Global meinArr() as String
Sub Main1
meinArr() = "Inhalt" ' einmaliges Füllen
' ergibt Fehler: Objektvariable nicht belegt
End Sub
' ...
' andere Subs, eventuelle Fehlermeldungen, eventuelle Code Änderungen
'...
Sub Main2
print meinArr() ' hier mal gefüllt, mal leer, noch kein System erkannt
End Sub
Richtig wäre: 1. definiere, 2. dimensioniere und setze:
Code: Alles auswählen
Global asMeineStrings(3) as String
' ergibt: 4 strings
Sub testStringArray
asMeineStrings(3) = "Inhalt"
End Sub
Werde Licht?
Tipp: ich verwende eine (eigene!)
Ungarische_Notation
- a = array
s = string
i = integer
l = long
v = variant
o = object
Damit ist im Code immer klar, um was es sich handelt. Dient der Übersichtlichkeit bei grösseren Codestücken.
Re: global const array [gibt's nicht!]
Verfasst: Mo, 15.12.2008 08:49
von steffn
Tag Winfried,
nein, irgendwie ... absolut nicht.
Ich habe das Gefühl, dass Du meine Beiträge zu schnell liest und dabei leider nicht verstehst, welche Informationen ich eigentlich gerne hätte.
Es kann genauso gut an meiner Formulierung liegen ... aber ein bisschen subjektiv darf ich hoffentlich sein.
komma4 hat geschrieben:...
Du verwendest ein ARRAY - und das benötigt eine Positionsangabe...
...
Dein Beispiel kann nicht laufen.
...
Ich habe aber doch nicht meinen Code hier rein kopiert sondern lediglich, im Irrglauben, dass dies zur Klärung hilft, Dein Beispiel so geändert, dass die Zeilen mit Datenfeld in einer Folge stehen, die der in meinem Code sehr ähnelt. Und da Du keine verwendet hast, ...
Glaub mir, soweit ich das überblicken kann, funktionieren meine Prozeduren bestens, es entstehen nur Fehler, wenn das oder die Datenfelder manchmal "auf einmal" wieder leer sind.
Ich möchte auch gar keinen Code als Antwort sondern "nur" die Frage, wie oben beschrieben, beantwortet bekommen:
Welche Ereignisse können das Löschen von befüllten globalen Datenfeldern auslösen?
Ich denke nun mal, dass diese solange erhalten bleiben müssten, wie die Datei geöffnet ist.
FALSE ?
Re: global const array [gibt's nicht!]
Verfasst: Mo, 15.12.2008 10:51
von komma4
Ich habe das Gefühl, dass Du meine Beiträge nicht richtig liesst.
Aus der Hilfe habe ich zitiert: die Dauer der Gültigkeit der GLOBAL-Varibalen ist sitzungslang. Bedeutet: auch wenn die Datei, welcher den Code enthält, geschlossen wird, sind diese noch vorhanden.
Deren Inhalt änderst Du alleine durch neues Setzen.
P.S.: von mir geposteter Code ist [bei mir: meiner OOo-Betriebssystem-Kombination] lauffähig. Wenn ich etwas "aus dem Kopf" entwerfe, schreibe ich das dazu.
Re: global const array [gibt's nicht!]
Verfasst: Mo, 15.12.2008 11:30
von steffn
Dass eine Sitzung sich auf das Laufen des Betriebsystems bezieht, wusste ich nicht, ich dachte dabei ginge es um das Offenhalten der Datei in der sich der Code befindet.
Dass Deine Codebeispiele lauffähig sind und meins nicht, ist mir nicht aufgefallen.
Aber wieso meine Datenfelder manchmal so leer wie "" sind, weiß ich leider immer noch nicht.
Ich denke immer noch, dass das mit Debuggen, Fehlermeldungen, Codeänderungen zu tun hat.