导入代码行
我们可以在vba中读取脚本或代码行吗? 就像我们在php中包含函数一样。
例如:
我们把它存储在Excel的某个地方,并把范围称为xyz
line 1 of code line 2 of code line 3 of code
然后在运行一个macros时,我们就这样称呼它
Sub my_macro() xyz End Sub
基本上我想重复运行几行代码,但不想创build另一个macros并传递参数。
这可以使用Microsoft Visual Basic for Applications Extensibility 5.3(VBIDE)库完成。 CPearson.com有一些很好的例子 。 我通常用这个插入代码片段,而我正在开发。 我个人会不习惯执行存储在Excel表格中的代码,但我testing了这个,它确实工作。
我的工作表:
A 1 MsgBox "I'm a test." 2 MsgBox "So am I."
我设置了一个空的子程序,然后我们将从Excel表格中插入。
Private Sub ProcToModify() End Sub
而实际上将代码插入ProcToModify
的子例程:
Sub ModifyProcedure() Dim VBProj As VBIDE.VBProject Dim VBComp As VBIDE.VBComponent Dim CodeMod As VBIDE.CodeModule Dim StartLine As Long Dim NumLines As Long Dim ProcName As String Set VBProj = ActiveWorkbook.VBProject Set VBComp = VBProj.VBComponents("Module1") ' specify module to modify Set CodeMod = VBComp.CodeModule Dim ws As Worksheet Dim rng As Range Dim cell As Range Set ws = ThisWorkbook.ActiveSheet 'change this accordingly Set rng = ws.Range("A1:A2") 'and this For Each cell In rng ProcName = "ProcToModify" With CodeMod StartLine = .ProcStartLine(ProcName, vbext_pk_Proc) NumLines = .ProcCountLines(ProcName, vbext_pk_Proc) .InsertLines StartLine + NumLines - 2, cell.Value 'insert each line at the end of the procedure to get them in the correct order. End With Next cell End Sub
像这样在运行时调用:
Public Sub main() ModifyProcedure ProcToModify End Sub
One Big Gotchya:运行此代码之前,需要转到Excel >>文件>>选项>>信任中心>>信任中心设置>>macros设置,然后选中“信任访问VBA项目对象模型”。
我想这是因为允许访问项目对象是一个相当安全的风险。
从我之前链接到的cpearson.com网站:
小心:许多基于VBA的计算机病毒通过创build和/或修改VBA代码来传播。 因此,许多病毒扫描程序可能会自动和没有警告或确认删除引用VBProject对象的模块,导致永久和不可挽回的代码丢失。 有关详细信息,请参阅防病毒软件的文档。