Handeln von Arrays als Rückgabewerte
22.12.2018 14:16:53
Arrays
ich bin Neuling in der VBA-Programmierung und scheitere gerade an Fragestellung, die nach eigener Google-Recherche ein häufigeres Problem zu sein scheint.
Ich habe eine Klasse mit verschiedenen String-Arrays als private Eigenschaften.
Diese String-Arrays sollen per Property-Let-Prozedur bei der Objektinitialisierung befüllt werden, und zwar anhand von Zellverbundadressen, die dem Objekt bei Initialisierung mitgegeben werden.
Da ich mehrere dieser Arrays habe und somit mehrere Let-Prozeduren, habe ich den Code zur Befüllung des Arrays anhand eines Adressenstrings in eine externe Funktion ausgelagert.
Modul "Projektinitialisierung"
Option Explicit
'Ein neues Objekt der Klasse "Profile" erzeugen und initialisieren
Set clsProfile = New Profile
clsProfile.Initialize strAddrA, strAddrB, strAddrC
Klassenmodul "Profile"
Option Explicit
Private bIsInitialized As Boolean
Private aMonthList(), aCurrencyList(), aDesignList() As String
Public Function Initialize(sTableMonthsAddr As String, sTableCurrenciesAddr As String, _
sTableDesignsAddr As String) As Integer
If bIsInitialized Then
Initialize = 1
Exit Function
End If
MonthList = sTableMonthsAddr
CurrencyList = sTableCurrenciesAddr
DesignList = sTableDesignsAddr
End Function
Public Property Let MonthList(sAddr As String)
If bIsInitialized = False Then
aMonthList = mArrayStrCreateFromAddr(sAddr, 1) 'hier wird der Fehler _
erzeugt! Es wird ein Array erstellt mit den Zellinhalten des Bezugs "sAddr" im _
Worksheet Nr. 1 ohne Angabe eines Upper-Limits. Dies funktioniert auch, aber die _
Rückgabe und Speicherung in "aMonthList" klappt nicht.
End If
End Property
Modul "Allgemeine Funktionen"
Option Explicit
Public Function mArrayStrCreateFromAddr(sAddr As String, iSheet As Integer, Optional iUBound As _
Integer = -1) As String()
Dim i As Integer
Dim rngList As Range
Set rngList = Worksheets(iSheet).Range(sAddr)
Dim aList() As String
If iUBound >= 0 Then
ReDim aList(iUBound) As String
Else
ReDim aList(rngList.Rows.Count - 1) As String
End If
For i = 1 To UBound(aList) + 1
aList(i - 1) = rngList.Cells(i, 1).Value
Next
mArrayStrCreateFromAddr = aList
End Function
Scheinbar ist es allgemein nicht gut, Arrays mittels Zuweisungsoperator "=" zu kopieren, aber laut Google-Recherche sollte dies so eigentlich funktionieren.Wenn ich alles, also jegliche String-Arrays in Variant-Arrays abändere und auch den Rückgabetyp der Funktionen auf Variant ändere, dann funktioniert alles bestens. Aber es stört mich, dass ich auf Variant zurückgreifen muss..
Gibt es eine bessere Möglichkeit? Ggf. mit einer korrekten "Array-Kopier-Schleifenfunktion"?
Merci und Lg
Binary