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