使用VBA从文本文件中检索和调用VBA代码

3
我正在处理一项项目,使用 规则触发的VBA代码来处理一些进入Outlook的邮件。
然而,我不想每次代码需要更改时都手动更新每个用户收件箱的代码。因此,我的想法是将一个文本文件放在共享驱动器上,并让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”处理,或者尝试拉入一个文本文件并立即将其视为代码存在问题?

有什么想法吗?

1个回答

1

要运行您的新代码,请尝试使用Application.Run而不是Library.Hello

它应该写成:

Application.Run("Hello")

这个可以吗?


是的!那解决了主要问题。谢谢。当我第二次运行程序时,我有一个次要问题。当程序运行到 a.Delete 那一行时,在主要电子表格中会出现一条消息,提示“工作表中可能存在数据,以进行删除,请按删除键永久删除数据。”不确定如何绕过这个问题。 - user2363207
好的,这只是一个小修复。我在子程序开头添加了“Application.DisplayAlerts = False”,问题就解决了。再次感谢! - user2363207

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接