1.4k Aufrufe
Gefragt in Tabellenkalkulation von ahorn38 Experte (3.2k Punkte)
Hallo,

in einem Modul1 erzeuge ich ein zweidimensionales Array.
Dieses Modul1 rufe ich aus einem Modul2 mittels "cal modul1" auf.
Ich möchte dieses Array (die darin enthaltenen Daten) jetzt aber im weiteren Verlauf des Modul2 nutzen nachdem der code des Modul1 abgearbeitet wurde.
Ich habe versucht das Array über public arrSpeicher() as variant zu definieren, was aber nicht erfolgreich war. weiß jemand (bestimmt..) wie es richtig geht? Danke für jeden Tipp!
Gruß Andreas

9 Antworten

0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi Andreas

die Definierung einer globalen variablen erfolgt ausserhalb eines moduls ^^

gruss nighty
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi Andreas ^^

call wird nur füer eventuelle parameterübergaben benötigt
ohne Parameter reicht der Name des makros

gruss nighty
0 Punkte
Beantwortet von
Hallo nighty,

das sind zwei falsche Aussagen. AW 1 müsste richtig lauten: "die Definierung einer globalen variablen erfolgt auf Modulebene"

Call wird überhaupt nicht benötigt. Es reicht immer der Name des Makros. Die Parameter können nach einem Leerzeichen folgen. Die Verwendung von Call ist nur eine Schönheitsfrage, damit man weiß, dass man auf ein eigenes Makro verweist.

Hallo Andreas.
Dein Code "public arrSpeicher() as variant " ist schon richtig. Diese Zeile muss in Modul1 noch vor der ersten Sub stehen. Zwischen die Klammern kannst du auch deine zwei Dimensionen setzen, sofern es sich dabei um feste Zahlen handelt. Wenn du die Dimensionen über Variablen zuweisen willst. Nutze innerhalb deines Codes an beliebiger Stelle die Zeile "ReDim Preserve arrSpeicher(zeile, spalte)" Das Schlüsselwort Preserve brauchst du nur dann, wenn du ein bestehendes Datenfeld um zusätzliche Zeilen erweitern willst, ohne den bisherigen Inhalt zu verlieren.

Mr. K.
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

preserve geht nur bei eibdimensionalen Feldern

gruss nighty
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi Ahorn ^^

redemensionierung hat auch keinen bezug zu deiner frage
lass dich nicht verwirren

gruss nighty
0 Punkte
Beantwortet von
Hi nighty,

preserve geht nur bei eibdimensionalen Feldern


Auch das ist nicht ganz richtig. Mit Preserve kann immer nur die letzte Dimension erweitert werden.

hier ein Auszug aus deinem zweiten Link.

Wenn Variablen als Array deklariert wurden, z.B. Dim MitgliedsNr() As Long können sie entweder mit der Deklaration dimensioniert werden (Dim MitgliedsNr(1001) As Long oder Dim MitgliedsNr(1 To 1000) As Long oder nachträglich mit der ReDim-Anweisung


Wenn man das Array wie in der Frage beschrieben anlegt, muss halt spätestens bei Redim die Dimensionierung erfolgen.

Mr. K.
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo, danke zusammen für die interessanten Kommentare!! In meinem zweidimensionalen Array erweitere ich in jedem Schritt der Schleife die Dimension der zweiten Variable mit ReDim.... Da geht es ohne Preserve nicht, sonst sind die vorher zugewiesenen Inhalte weg.

Leider bin ich bei der Deklarierung des Array noch nicht zum Erfolg gekommen. Habe das Modul1 jetzt so:
Public arrSpeicher() As Variant
Public lngAnz As Long
Sub FamilieVerschNamen()

'Dim arrSpeicher()
Dim lngAnz As Long, strText As String


Aber wenn ich dann im Modul2 auf das Array zugreifen will erscheint "indes außerhalb des gültigen Bereiches"..??
Gruß Andreas
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi andres ^^

du hast post :-)

gruss nighty
...