我正在开发一个项目,使用rule-triggered VBA代码处理一些传入的Outlook消息。
但是,我不希望在代码需要更改时手动更新每个用户的收件箱的代码。所以我的想法是将一个文本文件放在一个共享驱动器上,然后让VBA将该文本文件拉下来并将其视为代码。从本质上讲,我想将该文本文件用作一个小代码库。
我能够找到让我非常接近目标的this link。但是,我遇到了一些问题。
这是我放在一起的代码。它附加到我插入Excel文件的Rectangle形状的click事件。最后,我将把它移到Outlook,但我只是先用Excel VBA进行基本测试。
Sub Rectangle1_Click()
On Error GoTo Err_Handler
Dim enviro As String
Dim myFile As String
'Pull code "library" from text file on user's desktop
'This will eventually be changed to reside on a shared drive
enviro = CStr(Environ("USERPROFILE"))
myFile = enviro & "\Desktop\hello_vba.txt"
'If the "Library" module already exists, delete it
For Each a In Modules
If a.Name = "Library" Then
a.Delete
Exit For
End If
Next
'Add a new module
Set m = Application.Modules.Add
'Rename it to "Library"
m.Name = "Library"
'Insert the text from the other file to this new module
m.InsertFile myFile
'Call the hello() subroutine from the retrieved text file
Library.Hello
Exit_Here:
'Cleanup code goes here
Exit Sub
Err_Handler:
MsgBox Err.Description
Resume Exit_Here
Exit Sub
以下是名为“hello_vba.txt”的外部文本文件的内容:
Sub Hello()
MsgBox "Hello"
End Sub
我第一次运行它时,使用调试器我可以看到它创建了新模块,然后进入说明的行:
m.Name = "Library"
然后在调试器中弹出一个窗口,显示:
此时无法进入休息模式
当我点击该消息的继续时,我得到一个
需要对象
错误消息。如果再次运行它,那么我会收到更多错误消息,但我最终会弹出一个成功的“Hello”消息框。
我想知道我是否可能没有“昏暗”地修改“a”或“m”变量,或者如果在尝试拉入文本文件并立即将其视为代码时出现问题?
有什么想法吗?
答案 0 :(得分:1)
要运行新代码,请尝试使用Application.Run而不是Library.Hello
将写成:
Application.Run("Hello")
这有用吗?