使用“ Application.Names.Add”创建的名称在哪里?

时间:2018-08-30 07:52:09

标签: excel vba excel-vba

出于学习和工作目的,我需要创建一个消息框,该消息框仅在第一次打开工作簿时弹出。对于该任务,我在旧的胎面(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

3 个答案:

答案 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.NamesWorksheet.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

相关问题