Excel 2003宏的外部代码

时间:2012-05-29 08:34:14

标签: excel-vba vba excel

有人知道如何在外部文件中编写VBA代码,每次在Excel中运行此宏时都会将其“导入”到Excel 2003 VBA宏中 - 就像自我更新代码一样?

我的想法是在外部编辑器(VIm)中编写代码,每次启动Excel宏时,宏都会检查更新的数据,必要时将代码导入其中然后运行它(可能是一个或多个函数/ subs)

步骤是:打开Excel,打开XLS文件,单击按钮,宏启动,检查更新的外部数据(我在外部编辑器中编写的代码),如果数据是新的,删除旧代码,导入外部代码然后实际上运行宏本身。

任何?

2 个答案:

答案 0 :(得分:0)

假设您使用this VIM(文本编辑器)编写.bas文件,您可以使用许多功能来覆盖此网站Programming the VBE中的模块或程序。

所以,你的结构会像这样:

Sub MyMacro()

Overwrite MyModule in this Workbook with MyModule in .bas file (you could do line count checks or something if you need to, or just overwrite each time to ensure latest code

Call MyModule

End Sub

我想,有一些显而易见的检查要确保您的最新代码始终与工作簿一起使用...  检查更新的外部数据(我在外部编辑器中编写的代码),如果数据是新的,删除旧代码,导入外部代码然后实际运行宏本身。

答案 1 :(得分:0)

找到解决方案(部分来自http://www.cpearson.com/excel/vbe.aspx)10x Scott:

Sub AddOutsideCode()
    Dim VBProjekt As VBIDE.VBProject
    Dim VBKomponenta As VBIDE.VBComponent
    Set VBProjekt = ThisWorkbook.VBProject
    Call DeleteAllButThis(ThisWorkbook, "Fixed")
    Set VBKomponenta = VBProjekt.VBComponents.Import(Filename:="C:\bat\bat.bas")
    VBKomponenta.Name = "OutsideCode"
End Sub

'Delete all modules but named
Private Sub DeleteAllButThis(ByVal wb As Workbook, ByVal CompName As String)
    Application.DisplayAlerts = False
    On Error Resume Next
    For Each komponenta In ThisWorkbook.VBProject.VBComponents
        If komponenta.Name <> CompName Then
            If komponenta.Type = vbext_ct_StdModule Then
                ThisWorkbook.VBProject.VBComponents.Remove komponenta
            End If
        End If
    Next komponenta
    On Error GoTo 0
    Application.DisplayAlerts = True
End Sub

但是如何检查外部代码是否发生了变化?