也可以(但也许不是最好)将代码添加到一个模块编程。由于VBA不支持反射,因此这是语言中唯一的“动态”编码。这在捏中很有用。
请参见下面的代码片段。 addCode
sub采用标准模块的名称,Type
的名称以及包含字段定义的数组。
它首先删除现有的Type
具有相同的名称,然后添加新的类型定义英寸
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
这听起来有希望! :)你有没有一个我将如何做到这一点的例子。像一个小的代码片段或什么的?编辑:你的意思是使用脚本字典,而不是公共类型? – 2011-03-30 06:25:36
我认为这是你应该在代码块前后使用的:)特别是在注释中。但在答案中,您可以选择一个代码片段,并使用编辑器中的工具栏来格式化整个事物。 – 2011-03-30 08:03:29
未安装Cripting.RunTime库的计算机有什么可能?我可能不得不使用VBA集合。如果这甚至是可能的。 – 2011-03-30 09:02:50