Excel VBA检查是否设置了命名范围

我试图确定是否通过VBA设置了命名范围。 命名的范围被称为LoadedToken ,当用户点击一个特定的button时,本质上被加载。 我用这个作为初始化已经发生的证据。

我有一个函数来检查这是否发生:

 Function ToolIsEnabled() ' We check if the R2A add-in has been loaded by detecting the named range If ActiveWorkbook.Names("LoadedToken") Is Nothing Then ToolIsEnabled = False Else ToolIsEnabled = True End If End Function 

我得到一个应用程序错误。 当然,VBA是不正确的。 但是,我怎么能真正做到这一点?

 Sub Test() Debug.Print IsNamedRange("Bumsti") End Sub Function IsNamedRange(RName As String) As Boolean Dim N As Name IsNamedRange = False For Each N In ActiveWorkbook.Names If N.Name = RName Then IsNamedRange = True Exit For End If Next End Function 

在OP上下文中的用法可能是

 ' ... If IsNamedRange("LoadedToken") Then ' ... End If ' ... 

或者 – 如果需要设置程序特定的Bool

 ' ... Dim IsTokenLoaded as Boolean IsTokenLoaded = IsNamedRange("LoadedToken") ' ... 

这两个构造在源代码中都很清楚你的目标是什么。

这将检查在ThisWorkbook或命名工作簿并返回TRUE / FALSE。

 Sub Test() MsgBox NamedRangeExists("SomeName") MsgBox NamedRangeExists("SomeOtherName", Workbooks("Book1.xls")) End Sub Public Function NamedRangeExists(sName As String, Optional Book As Workbook) As Boolean On Error Resume Next If Book Is Nothing Then Set Book = ThisWorkbook End If NamedRangeExists = Book.Names(sName).Index <> (Err.Number = 0) On Error GoTo 0 End Function 

编辑:一个较短的版本,如果它只是看在ThisWorkbook

 Public Function NamedRangeExists(sName As String) As Boolean On Error Resume Next NamedRangeExists = ThisWorkbook.Names(sName).Index <> (Err.Number = 0) On Error GoTo 0 End Function 

对于activeworkbook,您也可以调用旧的XLM NAMES()函数:

 Function IsNameInActiveWorkbook(sName As String) As Boolean IsNameInActiveWorkbook = Not IsError(Application.ExecuteExcel4Macro("MATCH(""" & sName & """,NAMES(),0)")) End Function 

你可以通过使用error handling来实现这一点:

 Function ToolIsEnabled() As Boolean Dim rng As Range On Error Resume Next Set rng = ActiveWorkbook.Range("LoadedToken") On Error GoTo 0 ToolIsEnabled = Not rng is Nothing End Function