Thema Datum  Von Nutzer Rating
Antwort
22.03.2008 17:55:32 Sven
NotSolved
23.03.2008 14:12:15 Holger
NotSolved
Rot Aw:Aw:Löschen von Arrays
24.03.2008 01:07:23 Sven
NotSolved
24.03.2008 09:56:48 Holger
NotSolved
24.03.2008 19:00:47 Sven
NotSolved

Ansicht des Beitrags:
Von:
Sven
Datum:
24.03.2008 01:07:23
Views:
1107
Rating: Antwort:
  Ja
Thema:
Aw:Aw:Löschen von Arrays
Hallo Holger,

danke für die ausführliche Antwort.
Das mit der Übergabe ist ja dann so, wie in vielen anderen Programmiersprachen, oder zumindest so ähnlich.
Wenn ich jetzt aber im Hauptprogramm mehrere Durchläufe habe, von Prozedur 2 und 3. Prozedur 1 (erstellt Arry), Prozedur 2(verändert Arry) und Prozedur 3(verändert Arry) muss ich doch Arry global deklarieren, da ich Arry von Prozedur 2 nicht in Prozedur 3 bekomme oder? Das gleiche Problem tritt ja schon bei der Übergabe von 1 nach 2 auf. Ich könnte 2 in 1 aufrufen und 3 in 2, aber bei der Rückgabe von 3 nach 2 kann ich bei einer Funktion nur ein Wert zurückgeben und bei eienr Prozedur gar nichts.

Wüsstest du da eine Möglichkeit?

Grüße,
Sven


Holger schrieb am 23.03.2008 14:12:15:

Hallo Sven,
sei Arry(i,j) dein Array. Du kannst mit Dim Arry() das Array deklarieren. Mit ReDim Array(0,0) werden die Werte zurückgesetzt. Mit ReDim Preserve Array(a,b) wird das array ggf. erweitert, ohne dass die bisher gespeicherten Werte verloren gehen, wobei nur der letzte Index verändert werden kann. Sieh auch in die VBA-Hilfe.
Ich habe kein grundsätzliches Problem mit globalen Variablen. Aber überlege, ob nicht eine Private-Deklaration ausreicht. Du solltest keinen Allerweltsnamen verwenden, weil du sonst in Deklarationskonflikte bei anderen Makros kommen kannst. Ich setze große Arrays am Ende des Programms mit ReDim Arry(0,0) oder Erase Arry zurück.
Du kannst natürlich auch die Variablen an andere Prozeduren übergeben. Bei Arrays kannst du optional leere Klammern setzen oder einfach den Arraynamen verwenden. Bei Funktionen macht es Sinn, wenn aus den Array-Werten ein neuer Wert berechnet werden soll. Die Übergabe als Argument erfolg genauso.
sub Name (a()) oder sub Name (a)
...
end Sub
Aufruf der Prozedur in einer anderen mit
Name Arry() oder Name Arry
Ober- und untere Grenzen des übergebenen Array stellst du mit LBound und UBound fest.
Ich hoffe, dir geholfen zu haben
Holger

Sven schrieb am 22.03.2008 17:55:32:

Hallo Makro-Experten,

hätte da mal eine Frage.
Ich habe eine Schleife in der ein zweidimensionales Array beschrieben wird. Ich weiss vorher nicht wieviel Zeilen es hat aber wieviele Splaten. Und in jeden Schleifendurchlauf soll es geändert werden, also neue Inhalte eingefügt werden.

Da ist nun meine Frage wie ich dieses Array am besten deklariere und wieder am Schleifenanfang die Inhalte lösche?
Ich hatte hier zuerst über die Nutzung von Redim nachgedacht, aber in der Hilfe dann gelesen, dass redim nicht zum deklarieren beutzt werden soll. Ebenso muss man ja bei redim die Größe des Array angegeben. Wie kann ich wenn ich freie Arrayplätze habe effizient nur auf die belegten Felder zugreifen, nur mit einer Überprüfung emptycell oder so was?

Eine zweite Frage: Ich habe ein großes "Hauptarray" was verschiedene Prozeduren durchläuft. Man soll ja eigentlich kaum globale Variablen benutzen und immer im Prozeduraufruf Variablen übergeben. Macht dies wenn ich in jedem Unterprogramm dieses Hauptarray z.B.Array(100,10) ändere überhaupt Sinn und ist es überhaupt möglich, da Funktionen ja nur ein Wert zurückgeben?

Grüße, Sven

Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
22.03.2008 17:55:32 Sven
NotSolved
23.03.2008 14:12:15 Holger
NotSolved
Rot Aw:Aw:Löschen von Arrays
24.03.2008 01:07:23 Sven
NotSolved
24.03.2008 09:56:48 Holger
NotSolved
24.03.2008 19:00:47 Sven
NotSolved