出于学习和工作目的,我需要创建一个消息框,该消息框仅在第一次打开工作簿时弹出。对于该任务,我在旧的胎面(old thread)中找到了一种优雅的解决方案。
对于我来说,Sugest代码的工作原理或多或少很清楚,那部分是使用Application.Names.Add创建的?我在Forlulas->名称管理器下进行了检查,但未找到创建的名称,我猜它是否在其他地方?
使用的代码:
Sub RunOnce()
Dim Flag As Boolean: Flag = False
For Each Item In Application.Names
If Item.Name = "FunctionHasRun" Then Flag = True
Next
If Flag = False Then
Call Application.Names.Add("FunctionHasRun", True, False)
Application.DisplayAlerts = False
ActiveWorkbook.Save
Application.DisplayAlerts = True
Call RunOnceFunction
End If
End Sub
答案 0 :(得分:1)
如果您要打开工作簿时弹出一个消息框,则下面的代码将为您完成此操作,只需将其放在ThisWorkbook
下即可。
我也很确定代码中的语法不正确,如果您要添加命名范围,则可以按以下步骤进行操作:Sheet1.Range("A1:Z10").Name = "MyNamedRange"
无需调用,因为它没有调用另一个子例程/函数:
Private Sub Workbook_Open()
MsgBox "This will pop up when the Workbook is opened!", vbInformation, "My MessageBox Title"
End Sub
更新:
如果只希望它在第一次打开工作簿时运行,然后再也不会再次运行,则以下内容将为您实现:
Sub RunOnce()
Dim Flag As Boolean: Flag = False
For Each Item In Application.Names
If Item.Name = "FunctionHasRun" Then Flag = True
Next
If Flag = False Then
Sheet1.Range("$A$1:$A$1").Name = "FunctionHasRun"
Application.DisplayAlerts = False
ActiveWorkbook.Save
Application.DisplayAlerts = True
Call RunOnceFunction
End If
End Sub
答案 1 :(得分:1)
Formulas -> Names
仅向您显示ThisWorkbook.Names
和Worksheet.Names
(取决于您Name
的范围)。
如果您插入断点并查看View > Locals Window
,则可以在Application.Names
中找到Me > Application > Names
。
我添加“ opened”标志的首选方法是将其添加到CustomDocumentProperties
中。我从未见过有人为此使用Application.Names
。
答案 2 :(得分:0)
您无法在名称管理器中看到它,因为您的第三个参数Visible:= False设置为False。
Visible-True指定将名称定义为可见。 False指定将名称定义为隐藏。隐藏的名称不会出现在“定义名称”,“粘贴名称”或“转到”对话框中。默认值为True。
有关更多信息,请参见Names.Add Method。