Доста съм свикнал с VBA, но не толкова с Objects, но в момента се сблъсквам със стената...
Моят конфигурационен клас има почти 100 свойства, така че няма да ги изпращам тук, тъй като подробностите нямат особено значение за моя въпрос.
Надявах се да кодирам дублираща се функция, да създам множество обекти от един и след това да присвоя различни стойности за конкретно свойство на всеки нов обект (добавете нови елементи към конфигурациите, така че той генерира нови конфигурации), които ще изглеждат така:
Public Function Duplicate(SrcCfg As Config, PropertyName As String, Properties As String) As Collection
Dim Cc As Collection, _
Cfg As Config, _
TotalNumber As Integer, _
A() As String
Set Cc = New Collection
A = Split(Properties, "/")
TotalNumber = UBound(A)
For i = 0 To TotalNumber
'Create a copy of the source object
Set Cfg = SrcCfg.Copy
'Set the property for that particular copy
Cfg.PropertyName = A(i)
'Add that copy to the collection
Cc.Add ByVal Cfg
Next i
Duplicate = Cc
End Function
Но не съм сигурен, че една колекция е най-добрият резултат (тъй като ще взема резултатите и ще ги включа в друга основна колекция), така че съм отворен за предложения.
И съм почти сигурен, че не можем да предадем собственост като аргумент (прекарах доста време в търсене на решение за това...) и не знам какво да правя тъй като това би било супер практично за мен. Така че, ако има решение или заобиколно решение, с удоволствие ще го опитам!
Ето и останалите ми методи:
Friend Sub SetConfig(SrcConfig As Config)
Config = SrcConfig
End Sub
Public Function Copy() As Config
Dim Result As Config
Set Result = New Config
Call Result.SetConfig(Config)
Set Copy = Result
End Function
Краен код за дублиране на обект:
Работи гладко:
Private Cfg As Config
Friend Sub SetConfig(SrcConfig As Config)
Set Cfg = SrcConfig
End Sub
Public Function Copy() As Config
Dim Result As Config
Set Result = New Config
Call Result.SetConfig(Cfg)
Set Copy = Result
End Function
Public Function Duplicate(PropertyName As String, Properties As String) As Collection
Dim Cc As Collection, _
Cfg As Config, _
TotalNumber As Integer, _
A() As String
Set Cc = New Collection
A = Split(Properties, "/")
TotalNumber = UBound(A)
For i = 0 To TotalNumber
'Create a copy of the source object
Set Cfg = Me.Copy
'Set the property for that particular copy
CallByName Cfg, PropertyName, VbLet, A(i)
'Add that copy to the collection
Cc.Add Cfg
Next i
Set Duplicate = Cc
End Function
.copy
и той наистина беше наистина полезен! - person R3uK   schedule 17.07.2015