导入代码行

时间:2014-05-19 11:24:01

标签: excel vba excel-vba vbide

我们可以在中向模块读取脚本或代码行吗?就像我们在中有include函数一样。

例如:

我们将它存储在某个地方的Excel中,并将范围称为xyz

line 1 of code
line 2 of code
line 3 of code

然后在运行宏时我们将其称为

Sub my_macro()
  xyz
End Sub

基本上我想重复运行几行代码,但不想创建另一个宏并传递参数。

1 个答案:

答案 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对象,导致永久性和无法恢复   丢失代码。请参阅防病毒软件的文档   详情。