我想在打开新工作簿时立即注册我的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?
答案 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