启动时PERSONAL.XLSB MacroOptions

时间:2017-05-02 14:31:58

标签: excel vba excel-vba user-defined-functions

我想在打开新工作簿时立即注册我的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的模块中

在打开新工作簿时,似乎有些内容正在运行,因为我收到错误消息:https://docs.python.org/3/library/stdtypes.html#truth

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

2 个答案:

答案 0 :(得分:0)

在工作簿完全加载之前运行RegisterUDF时可能会导致这种情况。尝试在<{1>}事件之前添加以下内容,然后调用Workbook_Open

RegisterUDF

如果上述解决方案不起作用以下可能是另一种方式:

尝试在Do Until Application.Ready = True DoEvents: Loop 之后发生的Workbook_Activate事件。 否则,如果有必要造成延迟,您可以在Workbook_Open事件中使用OnTime方法:

Workbook_Open

这将在延迟2秒后运行Application.OnTime Now + TimeValue("00:00:02"), "RegisterUDF" 程序。

答案 1 :(得分:0)

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

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