1

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

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

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

任何人?

4

2 回答 2

0

Found solution (partly from 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

But how to check if the outside code changed or not?

于 2012-05-29T16:57:50.610 回答
0

假设您使用此 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

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

于 2012-05-29T14:35:43.500 回答