Я довольно привык к VBA, не очень к объектам, и сейчас я упираюсь в стену...
Мой класс конфигурации имеет почти 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