Forum des Access-Tutorials

In Modul Zugriff auf Array von Klasse (VBA)

Faber, Donnerstag, 23. Februar 2017, 10:27 (vor 155 Tagen)

Hi Leute,

ich bin mittlerweile dabei ein größeres Programm zu schreiben. Dieses funtkioniert, ist aber, da es komplett in einem Modul steht mittlerweile etwas unübersichtlich. Entsprechend möchte ich es gerne in eine "Main" Datei mit "Unterprogrammen" unterteilen und da liegt mein Problem. Hier erstmal der Code vom Modul Main:

 
Option Explicit
Public Zeit(81) As Vekt_Zeit    'Array-Variable für Modul, aber = time

Public Function Test()
    Zeit = Zeit.time
    Debug.Print Zeit(5).time(5)
End Function

Hier der Code vom Klassenmodul Vekt_Zeit:

Option Explicit
 
Public time(81) As Double     'Array-Variable in Funktion

Public Function Vekt_Zeit()
    Dim i_time As Integer
    time(1) = 0         'Startwert
    For i_time = 2 To 81        'von ... bis
        time(i_time) = time(i_time - 1) + 0.0025    'Inkrementbefehl in jedem Schleifendurchlauf
'        Workbooks("Test_Optimierung.xlsm").Worksheets("DYN_ZYK").Range("G1:G82").Cells(i_time) = T90_60Nm(i_time - 1) 'Zwischenspeichern des Arrays in Excel, nur zur Kontrolle
    Next
End Function

Was ich also will ist in der Main das Unterprogramm Vekt_Zeit starten und von dort das Array "time" in "Zeit" speichern bzw. den 5. Wert ausgeben. Hierbei kommt die Fehlermeldung: "Fehler beim Kompilieren: Konstanten, Zeichenfolgen fester Länge, benutzerdefinierte Datenfelder und Declare-Anweisungen sind als Public-Elemente von Objektmodulen nicht zugelassen."
Hieraus wird mir offensichtlich klar, dass ich Arrays nicht so einfach in Verbindung mit Klassen nutzen kann. Auf die Lösung bin ich auch in anderen Foren leider nicht gestoßen.

In Modul Zugriff auf Array von Klasse

Martin Asal, Donnerstag, 23. Februar 2017, 11:28 (vor 155 Tagen) @ Faber

Array ist nicht das Problem, sondern es muss Private heißen.

Wenn ich dich richtig verstanden habe, soll time eine Eigenschaft des Objekts sein? So funktioniert das innerhalb des Klassenmoduls aber nicht. Schau dir mal das Kapitel zu Eigenschaften im Tutorial an.

Martin

In Modul Zugriff auf Array von Klasse

Faber, Donnerstag, 23. Februar 2017, 12:18 (vor 155 Tagen) @ Martin Asal

Offensichtlich unterliege ich hier einem grundlegenden Denkfehler denn in Verbindung mit dem Tutorial, was leider kein Array/Vektor in einer Klasse bedient, werde ich nicht schlauer. Vielleicht ist ja auch meine grundlegende Vorgehensweise zu einfach gedacht. Also was ich vor habe:

Ich will mir einen Vektor bauen und diesen später weiter nutzen. Ich betrachte vergleichsweise wie in Matlab o.ä. das Modul als meine Main-Datei (korrekt?), von hier wird das gesamte Programm abgelaufen. Damit nicht alles im Mainmodul stattfindet (Übersichtlichkeit etc.) will ich den Vektor in ein Klassenmodul auslagern. Heißt der Vektor wird im Klassenmodul per Dauerschleife geschrieben. Anschließend will ich ihn im Modul "Main" weiter nutzen.

quasi so die Main:
'Starte Programm
'Starte Prozedur1
'gebe Vektor aus Prozedur1 in der Main aus

Klassenmodul:
'Public Function Prozedur1()
' Erzeuge Vektor mit Dauerschleife
'End Function

Ist mein grundlegendes Problem klar geworden? Es geht auch wirklich um ein Array bei dem ich dieses Problem habe. Der Aufruf mit nur einem Wert hat funktioniert. Array ist aber mein Problem...

Vielen Dank für jede Hilfe schon einmal...

In Modul Zugriff auf Array von Klasse

Martin Asal, Donnerstag, 23. Februar 2017, 14:30 (vor 155 Tagen) @ Faber

Ist mein grundlegendes Problem klar geworden?

Offen gestanden, nein.

Wenn ich dich richtig verstanden habe, hast du einen Vektor, und der soll durch eine Klasse dargestellt werden. Aber welche Eigenschaften hat ein Vektor? 81 Dimensionen?

Ach ja, auch wenn es nicht so wichtig ist; ich würde die Zeit nicht als Double, sondern Date speichern. Nicht weil es besser wäre, sondern weil Date nun mal dafür da ist.

Martin

RSS-Feed dieser Diskussion
RSS Einträge  RSS Threads   Kontakt
powered by my little forum