excel - 使用类的文本名称创建一个新对象

标签 excel vba

有没有办法通过使用类的文本名称将对象设置为类的新实例?

我将有一个类库,并且根据其他一些变量,我想在运行时获取这些类之一。

例如我有“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/

相关文章:

excel - VBA 错误函数 InstrRev = Instr

vba - 日期格式VBA-Excel的问题

vba - 使用 VBA 在单元格中分组

vba - 使用 Excel VBA 发送带有附件的 Outlook 电子邮件

Excel VBA 代码(目标搜索)代码简化

excel - 自动打开 Excel 工作簿,但前提是它尚未打开

mysql - 从 Magento 数据库获取所有可能的可配置产品 SKU 和选项 SKU

excel - 组合公式

C# EPPlus 数据栏条件格式与纯色填充

excel - VBA无法打开文件时的备用消息