Excel VBA-Programmierung mit Arrays: Übergeben oder nicht?

Frage: Ich frage mich, welche die optimale Lösung für den Umgang mit Arrays in Excel 2003 VBA ist

Hintergrund: Ich habe ein Makro in Excel 2003, das über 5000 Zeilen ist. Ich habe es in den letzten 2 Jahren entwickelt und neue Funktionen als neue Prozeduren hinzugefügt, mit deren Hilfe Sie den Code segmentieren und diese Funktion debuggen, ändern oder ergänzen können. Der Nachteil ist, dass ich einen Großteil der gleichen Basisinformationen in mehreren Prozeduren verwende, sodass ich sie mit geringfügigen Unterschieden mehrmals in Arrays laden muss. Ich habe jetzt Probleme mit der Länge der Laufzeit, sodass ich jetzt in der Lage bin, eine vollständige Umschreibung durchzuführen.
Diese Datei wird verwendet, um mehrere Produktionsabläufe zu erfassen (bis zu 4 verschiedene Konfigurationen mit insgesamt bis zu 10 unterschiedlichen Abläufen mit jeweils bis zu 1000 Schritten), wobei die Informationen flussspezifisch und für die Gruppierung / Sortierung unterflussspezifisch sind Zwecke und Daten (wie Bewegungen, Inventar, CT, ...)
Anschließend werden die Daten auf mehrere Blätter geklebt, die zum Verwalten des Prozesses verwendet werden. Dabei werden Datenblätter, Diagramme und die Zellenformatierung verwendet, um die Prozessflussfähigkeit / -historie zu kennzeichnen.
Der Flow befindet sich in der Excel-Datei, während die Fertigungsdaten mit 7 verschiedenen OO4O-Oracle-SQL-Pulls eingelesen werden, von denen einige mehrfach wiederverwendet werden

Die Arrays sind:
arrrFlow (1 bis 1000, 1 bis 4) als Record Type mit 4 Strings
arrrSubFlow (1 bis 1000, 1 bis 10) als Datensatztyp mit 4 Zeichenfolgen, 2 Ganzzahlen und 1 Einzelzahl
arrrData (1 bis 1000, 1 bis 10) als Datensatztyp mit 1 String, 4 Ganzzahlen, 12 Longs und 1 Single
arriSort (1 bis 1000, 1 bis 4) als Ganzzahl (Wird als Zeigerarray verwendet, um den Fluss, den Unterfluss und die Daten in einer Gruppe, einer Untergruppe und einer Schrittreihenfolge zu sortieren, während die ursprünglichen Arrays in der Schrittreihenfolge belassen werden)

Möglichkeiten:
1) Schreiben Sie das Makro in eine große Prozedur um, die die Daten einmal in Master-Arrays lädt, die in der Prozedur dimensioniert sind
Pro: Wird in der Prozedur dimensioniert und nicht als öffentliche Variable im Modul übergeben.
Con: Schwieriger mit einem Mega-Verfahren zu debuggen als mit mehreren kleineren.

2) Halten Sie das Makro mit mehreren Prozeduren, aber übergeben Sie die Arrays
Pro: Einfacheres Debuggen von Code mit mehreren kleineren Prozeduren.
Con: Arrays übergeben (teuer?)

3) Halten Sie das Makro mit mehreren Prozeduren, aber mit den Arrays als Public Dimed-Variablen im Modul
Pro: Einfacheres Debuggen von Code mit mehreren kleineren Prozeduren.
Con: Öffentliche Arrays (teuer?)

Wie lautet das Urteil der Community? Kennt jemand die Kosten für die Verwendung von öffentlichen Arrays im Vergleich zu übergebenen Arrays? Lohnt es sich, die Kosten für eines dieser Verfahren so gering wie möglich zu halten, dass sich meine Verfahren auf eine Funktion konzentrieren?

AKTUALISIEREN:
Ich lade Inventardaten auf einer diskreten Ebene (mehrere pro Schritt), verschiebe Daten auf einer aggregierten Ebene (eine pro Schritt) und den Beginn des Schichtinventars auf einer aggregierten Ebene. Ich aggregiere die Inventardaten durch schrittweises Platzieren in Arbeitsstatuskategorien (Ausführen, Warten, ...). Ich erstelle Ziele anhand von Daten, die sich bereits auf den Blättern befinden.

Ich habe ein Flussdiagramm, in dem die Workflows nach Typ aufgeführt sind. Derzeit haben 3 Produkte einen ähnlichen, aber nicht genau gleichen Fluss, und 2 Produkte sind unterschiedliche Flows, die ähnlich, aber nicht identisch sind. Ich habe jedem Satz von Schritten in den verschiedenen Abläufen eine Gruppe und eine Untergruppe zugewiesen.

Ich platziere diese Daten auf mehreren Blättern, einige in schrittweiser Reihenfolge, andere in Gruppen- / Untergruppenreihenfolge. Ich brauche auch die Daten, die nach Gruppe und Produkt, Gruppe / Untergruppe und Produkt, Teil der Linie und Produkt und Produkt zusammengefasst sind.

Ich verwende Record Types, damit ich tatsächlich ein lesbares dreidimensionales Array habe, arrSubFlow (1,1) .strStep (Schrittname des 1. Schritts des 1. Geräts), arrData (10,5) .lngYest (Bewegung von gestern für den 10. Schritt) des 5. Gerätes).

Mein Hauptoptimierungspunkt wird in dem Abschnitt liegen, in dem ich jedes Mal 10 Seiten von Grund auf neu erstelle. Mit dem Zusammenführen von Zellen, Rahmen, Überschriften, ... ist dies ein sehr zeitaufwändiger Vorgang. Ich werde einen Abschnitt hinzufügen, der meine Daten mit der Seite vergleicht, um festzustellen, ob sie geändert werden müssen. Wenn dies der Fall ist, erst dann neu erstellen, werden alle Datenabschnitte gelöscht und nur Daten geschrieben, die sich auf dem Blatt ändern. Das wird riesig sein, basierend auf meinen Zeitaufzeichnungsdaten. Wenn ich Code aktualisiere, versuche ich jedoch immer, auch andere Aspekte des Codes zu verbessern. Ich sehe das Laden der Daten in eine Struktur (Array, RecordSet, Collection)Einmal da beides ein wenig optimiert ist, aber eher für die datenintegrität, habe ich nicht die möglichkeit, es für verschiedene blätter unterschiedlich zu laden.

Die Hauptprobleme, die ich sehe, wenn ich mich gerade von Arrays verabschiede, sind:
* Bereits stark in sie investiert, aber dies ist kein guter Grund, sich nicht zu ändern
* Weiß nicht, ob die Weitergabe viel kostet, da dies von ByRef durchgeführt wird
* Ich verwende eine Sortierfunktion, um ein sortiertes "Zeiger" -Array zu erstellen, mit dem ich das Array in der Reihenfolge des schrittweisen Ablaufs belassen und es einfach nach Gruppen- / Untergruppenreihenfolge referenzieren kann.

Da ich immer versuche, meinen Code für jetzt und die Zukunft zu erstellen, bin ich nicht dagegen, die Arrays auf RecordSets oder Collections zu aktualisieren, sondern nur, um sie zu ändern, um etwas Cooles zu lernen. Meine Arrays arbeiten und meiner Forschung zufolge erhöhen sie die Laufzeit um Sekunden, nicht um wesentliche Beträge für diesen zweiminütigen Bericht. Wenn eine andere Struktur in Zukunft einfacher zu aktualisieren ist als zweidimensionale Arrays mit Datensatztypen, lassen Sie es mich bitte wissen. Kennt jemand die Kosten für die Übergabe eines Arrays an eine Prozedur, vorausgesetzt, Sie führen keinen ByVal-Durchlauf durch?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage