VBA-动态创建公共类型变量?

VBA-动态创建公共类型变量?,vba,types,constructor,ms-word,Vba,Types,Constructor,Ms Word,快速提问,我的宏代码中有所有这些静态设置的Public Type变量。这些应该表示INI文件的值。我希望代码是动态的,基于INI文件中的内容。因此,我不需要手动更新INI文件和代码 这是一个代码的输出,它现在的样子。这在它自己的模块中: Public Type Fields Firstname as String Lastname as String Username as String End Type 我想用ReadIniSection读取INI文件的整个部分

快速提问,我的宏代码中有所有这些静态设置的
Public Type
变量。这些应该表示INI文件的值。我希望代码是动态的,基于INI文件中的内容。因此,我不需要手动更新INI文件和代码

这是一个代码的输出,它现在的样子。这在它自己的模块中:

Public Type Fields
     Firstname as String
     Lastname as String
     Username as String
End Type

我想用
ReadIniSection
读取INI文件的整个部分,但在
公共类型中似乎不可能这样做。我说得对吗?是否有可能以某种方式绕过此问题?

使用Scripting.Dictionary对象(设置对Scripting.Runtime库的引用)

储存:

oDict.Add keyName, keyValue
回顾:

oDict(keyName)
这是假设您具有唯一的键名和单个值

Tim

也可以(但可能不建议)通过编程方式向模块添加代码。由于VBA不支持反射,这是该语言中唯一的“动态”编码类型。这在紧要关头很有用

请参阅下面的代码片段。
addCode
子模块采用标准模块名称、类型名称和包含字段定义的数组

它首先尝试删除具有相同名称的现有类型,然后在中添加新的类型定义

Sub TestAdd()
    Dim FieldArray()

    FieldArray = Array( _
     "Firstname As String", _
     "Lastname As String", _
     "Username As String" _
    )


    AddCode "Module2", "Fields", FieldArray
End Sub

Sub AddCode(ModuleName As String, TypeName As String, FieldArray())
    Dim StartLine As Long, EndLine As Long, StartColumn As Long, EndColumn As Long, _
        CodeToInsert As String

    StartLine = 1: StartColumn = -1
    EndLine = -1: EndColumn = -1

    'Find the old type definition and remove it.
    With Application.VBE.ActiveVBProject.VBComponents(ModuleName).CodeModule

        'Search for the start of the type definition
        If .Find("Public Type " & TypeName, StartLine, StartColumn, EndLine, EndColumn, True) Then
            EndLine = EndLine + 1: StartColumn = -1: EndLine = -1: EndColumn = -1

            'Found the start, now find the end of the type definition
            If .Find("End Type", EndLine, StartColumn, EndLine, EndColumn, True) Then
                .DeleteLines StartLine, (EndLine - StartLine) + 1
            End If
        End If

        CodeToInsert = _
            "Public Type " & TypeName & vbCrLf & _
            Join(FieldArray, vbCrLf) & vbCrLf & _
            "End Type"

        .InsertLines StartLine, CodeToInsert
    End With

End Sub

这听起来很有希望!:)不过,你有没有一个我将如何做到这一点的例子。像是一个小代码片段还是什么?编辑:你是说使用脚本字典而不是公共类型?我认为这是“你应该在代码块之前和之后使用:”,尤其是在注释中。但是,在回答中,您可以选择一个代码段,并使用编辑器中的工具栏格式化整个内容。计算机没有安装scripting.RunTime库的可能性有多大?我可能不得不改用VBA集合。如果可能的话。@JFC-修复了代码格式@肯尼:我从来没有遇到过没有运行时的电脑,但是我在一个只有windows的环境中工作。如果您需要支持Mac Excel,那么这种方法可能会让您走运。。。