我正在处理一项项目,使用 规则触发的VBA代码来处理一些进入Outlook的邮件。
然而,我不想每次代码需要更改时都手动更新每个用户收件箱的代码。因此,我的想法是将一个文本文件放在共享驱动器上,并让VBA拉下该文本文件并像代码一样处理它。实质上,我想使用那个文本文件就像一个小型代码库一样。
我能够找到这个链接,它让我非常接近我的目标。但是,我遇到了一些问题。
这是我编写的代码。它附加到我插入到Excel文件中的矩形形状的单击事件。最终,我会将其移到Outlook中,但我现在只是用Excel VBA进行基本测试。
这是名为“hello_vba.txt”的外部文本文件的内容:
第一次运行时,使用调试器我可以看到它创建了新模块,然后到达了这一行代码:“”。
然后调试器中弹出一个窗口,上面写着:
然而,我不想每次代码需要更改时都手动更新每个用户收件箱的代码。因此,我的想法是将一个文本文件放在共享驱动器上,并让VBA拉下该文本文件并像代码一样处理它。实质上,我想使用那个文本文件就像一个小型代码库一样。
我能够找到这个链接,它让我非常接近我的目标。但是,我遇到了一些问题。
这是我编写的代码。它附加到我插入到Excel文件中的矩形形状的单击事件。最终,我会将其移到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”变量进行“Dim”处理,或者尝试拉入一个文本文件并立即将其视为代码存在问题?
有什么想法吗?