有人知道如何在外部文件中编写VBA代码,每次在Excel中运行此宏时都会将其“导入”到Excel 2003 VBA宏中 - 就像自我更新代码一样?
我的想法是在外部编辑器(VIm)中编写代码,每次启动Excel宏时,宏都会检查更新的数据,必要时将代码导入其中然后运行它(可能是一个或多个函数/ subs)
步骤是:打开Excel,打开XLS文件,单击按钮,宏启动,检查更新的外部数据(我在外部编辑器中编写的代码),如果数据是新的,删除旧代码,导入外部代码然后实际上运行宏本身。
任何?
答案 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
但是如何检查外部代码是否发生了变化?