Guten Morgen,
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.
Hier etwas Code:
'Modul "Projektinitialisierung"
'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!
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 Variant
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
|