导入代码行

我们可以在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对象的模块,导致永久和不可挽回的代码丢失。 有关详细信息,请参阅防病毒软件的文档。