有没有办法通过使用类的文本名称将对象设置为类的新实例?
我将有一个类库,并且根据其他一些变量,我想在运行时获取这些类之一。
例如我有“CTest1”、“CTest2”、“CTest3”
我会有类似于下面的功能
Function GetTestClass(lngClassNo as long) as Object
Dim strClassName as String
strClassName = "CTest" & CStr(lngClassNo)
Set GetTestClass = New instance of class(strClassName)
End Function
最佳答案
您可以使用元编程来做到这一点,尽管它看起来确实像是一个黑客。 下面是一个使用几个辅助函数的示例(为了简洁而省略):
Public Function CreateInstance(typeName As String) As Object
Dim module As VBComponent
Set module = LazilyCreateMPCache()
If Not FunctionExists(typeName, module) Then
Call AddInstanceCreationHelper(typeName, module)
End If
Dim instanceCreationHelperName As String
instanceCreationHelperName = module.name & ".GetInstanceOf" & typeName
Set CreateInstance = Application.Run(instanceCreationHelperName)
End Function
Sub AddInstanceCreationHelper(typeName As String, module As VBComponent)
Dim strCode As String
strCode = _
"Public Function GetInstanceOf" & typeName & "() As " & typeName & vbCrLf & _
"Set GetInstanceOf" & typeName & " = New " & typeName & vbCrLf & _
"End Function"
Call AddFunction(strCode, module)
End Sub
关于excel - 使用类的文本名称创建一个新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1057670/