PERSONAL.XLSB 启动时的宏选项

PERSONAL.XLSB MacroOptions on startup

我想在打开新工作簿后立即注册我的 PERSONAL.XLSB UDF。我有一个 Workbook_Open() 事件调用如下:

Sub RegisterUDF()
    Dim s As String
    s = "Enter 0 for x resolution" & vbLf _
    & "1 for y resolution"

    Application.MacroOptions Macro:="GetSystemMetrics", Description:=s, Category:=9, HelpFile:="https://msdn.microsoft.com/en-us/library/windows/desktop/ms724385(v=vs.85).aspx"
End Sub

其中 GetSystemMetrics 是我的 UDF,代码放在工作簿对象和我的 Personal.xlsb

的一个模块中

打开新的工作簿后,运行 出现了某些内容,因为我收到错误消息:

我应该如何修复我的代码以在每个新工作簿上注册 UDF?

这可能是在工作簿完全加载之前 RegisterUDF 为 运行 时造成的。尝试在调用 RegisterUDF.

Workbook_Open 事件 before 中添加以下内容
Do Until Application.Ready = True
DoEvents: Loop

如果上述解决方案不起作用以下可能是替代方法:

尝试在 Workbook_Open 之后发生的 Workbook_Activate 事件。 否则如果需要造成延迟,可以在Workbook_Open事件中使用OnTime方法:

Application.OnTime Now + TimeValue("00:00:02"), "RegisterUDF"

这将在 2 秒延迟后 运行 RegisterUDF 程序。

在尝试@Peh 的方法并阅读错误消息后,我发现这个方法有效:

Private Sub Workbook_Activate()
Dim t As String
t = ActiveWorkbook.Name
Application.ScreenUpdating = False
Windows("PERSONAL.XLSB").Visible = True
Call RegisterUDF
Windows("PERSONAL.XLSB").Visible = False
Windows(t).Visible = True
Application.ScreenUpdating = True
End Sub