我们可以在vba中向模块读取脚本或代码行吗?就像我们在php中有include函数一样。
例如:
我们将它存储在某个地方的Excel中,并将范围称为xyz
line 1 of code
line 2 of code
line 3 of code
然后在运行宏时我们将其称为
Sub my_macro()
xyz
End Sub
基本上我想重复运行几行代码,但不想创建另一个宏并传递参数。
答案 0 :(得分:4)
这可以使用Microsoft Visual Basic for Applications Extensibility 5.3(VBIDE)库来完成。有一些great examples at CPearson.com。我通常在开发时使用它来插入代码片段。我个人会在执行存储在Excel工作表中的代码时感到不舒服,但我测试了它并确实有效。
我的工作表:
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>>文件>>选项>>信任中心>>信任中心设置>>宏设置,然后选中“信任对VBA项目对象模型的访问权限”。 / p>
我想这是因为允许访问项目对象是一个相当大的安全风险。
来自我之前链接的cpearson.com网站:
注意:许多基于VBA的计算机病毒都会自行传播 创建和/或修改VBA代码。因此,许多病毒扫描仪可能会 自动而无需警告或确认删除模块 引用VBProject对象,导致永久性和无法恢复 丢失代码。请参阅防病毒软件的文档 详情。