Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1624to1628
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Befüllte Arrays an neue Prozedur weitergeben

Befüllte Arrays an neue Prozedur weitergeben
29.05.2018 13:30:01
Lutz
Hallo,
ich erhalte die Meldung, daß meine Prozedur zu groß ist.
Also muß ich die Prozudur in kleinere Prozeduren aufteilen.
Nun möchte ich zuvor definierte Arrays aber nicht in jeder
"Teilprozedur" wieder neu definieren. Wie kann ich das ganze
Befüllte Array (und auch Variable) an Prozeduren weitergeben?
Aktuell sieht mein Code so aus:
Option Explicit
Function test()
Dim a As Long
Dim b As Long
Dim c As Long
Dim i As Long
Dim k As Long
Dim y As Long
Dim z As Long
Dim NFR As Long
Dim gefunden As Boolean
'#  Befüllung der Arrays  #'
' Variable für Array '
Dim ARR01DAT As Variant
Dim ARR01ZMAX As Long
Dim ARR01SMAX As Long
' maximale Anzahl Spalten '
ARR01SMAX = 9
' Ermittlung Anzahl Zeilen '
tbl02.Activate
Range("A1").End(xlDown).Activate
ARR01ZMAX = ActiveCell.Row
' Array befüllen '
With tbl02
ARR01DAT = .Range(.Cells(1, 1), .Cells(ARR01ZMAX, ARR01SMAX))
End With
End Function
Wie kann ich jetzt ARR01DAT (mit den Daten) und ARR01ZMAX an eine andere Prozedur weitergeben?
Danke und Gruß vom Lutz

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Befüllte Arrays an neue Prozedur weitergeben
29.05.2018 13:38:43
Peter(silie)
Hallo,
so sieht eine Prozedur mit übergabe Parameter aus:

Public Sub Test(ByRef sourceArray As Variant)
oder mit bestimmtem Datentyp
Public Sub Test(ByRef sourceArray() As String)
Du willst ersteres.
Die Prozedur musst du dann so aufrufen:

... Code
Test ARR01DAT, ARR01ZMAX
... Code

Durch das ByRef statement, wird dein Array verändert.
Es wird also keine kopie weitergegeben, welche dann bearbeitet wird von deinem Sub,
sondern es wird ein verweis auf den Speicherort des exakten Arrays gesetzt.
Du kannst also ein Array, welches du einmal erstellt hast,
so oft wie du willst weitergeben und verändern.
Wenn du ein neues Array haben willst, dann solltest du dir eine Funktion machen.
Also:

Public Function NewArray(ByRef oldArray As Variant) As Variant
oder mit bestimmtem Datentyp
Public Function NewArray(ByRef oldArray As Variant) As String()
Diese ruft man dann z.B. so auf:

Dim oldArray As Variant
Dim targetArray As Variant
targetArray = NewArray(oldArray)

Anzeige
AW: Befüllte Arrays an neue Prozedur weitergeben
29.05.2018 13:44:06
Lutz
Urg...
in der weiteren Verarbeitung greife ich dann auf die Daten aus dem Array zu:
...
tbl09.Cells(NFR, 1).Value = ARR01DAT(i, 1)
tbl09.Cells(NFR, 2).Value = ARR01DAT(i, 2)
tbl09.Cells(NFR, 3).Value = ARR01DAT(i, 3)
tbl09.Cells(NFR, 4).Value = ARR01DAT(i, 4)
tbl09.Cells(NFR, 5).Value = ARR01DAT(i, 5)
tbl09.Cells(NFR, 6).Value = ARR01DAT(i, 6)
tbl09.Cells(NFR, 7).Value = ARR01DAT(i, 7)
...
wie mache ich das dann?
tbl09.Cells(NFR, 1).Value = Test ARR01DAT(i, 1)
?
AW: Befüllte Arrays an neue Prozedur weitergeben
29.05.2018 13:47:34
Daniel
Hi
"Prozedur zu groß" sollte eigentlich nicht vorkommen.
das passiert normalerweise nur, wenn man den Code unnötig aufbläht (in dem man z.B. Recorderaufzeichnugen unbearbeitet übernimmt anstatt das unnötig aufgezeichnete zu löschen) oder wenn Codeblöcke kopiert und immer wieder einfügt anstatt Schleifen zu verwenden.
ansonsten: Variablen die von mehreren Makros schreibend und lesend verwendet werden sollen, würde ich nicht übergeben, sondern als "Prozedurweit gültig" deklarieren.
hierzu deklariert man sie in einem allgemeinen Modul oberhalb der Codes (direkt unter Option Explicit) mit dem Vorsatz Public
Option Explicit
Public x as Variant

dann könnten alle Makros diese Variable normal verwenden, dh lesen und schreiben.
in den einzelnen Makros selbst darf diese Variable dann nicht mehr deklariert werden.
Das ist zwar möglich, aber dann entsteht eine neue variable, die zwar genauso heißt, aber eigenständig ist und nur in diese Prozedur gilt.
die andere Variante wäre, dass du das Array der Funktion oder Prozedur normal als Parameter übergibst:
übergebne Parameter gelten in der Funktion wie Variablen:
übergibst du die Variable als byRef (was Standard ist wenn nichts angegeben wurde) dann wirken sich Änderungen in der Funktion an der Variablen auch direkt auf die Variable in der aufrufenden Sub auf.
(und das, obwohl unterschiedliche Namen verwendet werden können).
daher würde ich die erste Variante mit den projektweit gültigen Variablen bevorzugen.
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige