3

我正在尝试检查工作簿中是否存在命名范围,因为我编写的宏会遍历一个充满文件的文件夹。我在下面编写的宏适用于“正常”命名范围,但是当我将表名作为命名范围传递给函数时失败。

我在互联网上和其他地方搜索过为什么会出现这种情况,有人能指出我(可能很明显)做错了什么吗?

任何帮助,将不胜感激!

谢谢,

亚当

Public Function DoesNamedRangeExistInWorkbook(ByVal wb As Workbook, ByVal rangeName As String) As Boolean

Const FN_NAME As String = "DoesNamedRangeExistInWorkbook"
On Error GoTo catch

    Dim rng As Range
    Dim cellCount As Integer

    Set rng = wb.Names(rangeName).RefersToRange
    cellCount = rng.Cells.Count
    DoesNamedRangeExistInWorkbook = True

finally:
    Set rng = Nothing
    Exit Function

catch:
    Call ErrorReport(FN_NAME, False, Err.Number, Err.Description, rangeName & " could not be found in workbook: " & wb.Name)
    DoesNamedRangeExistInWorkbook = False
    Resume finally

End Function
4

1 回答 1

3

试试这个(未经测试

我假设表名也是该表的命名范围,否则您将不得不遍历表名来检查它。让我知道是否是这种情况,我将为此更新代码。

Public Function DoesNamedRangeExistInWorkbook(ByVal wb As Workbook, _
ByVal rangeName As String) As Boolean
    On Error GoTo catch

    Dim rng As Range

    On Error Resume Next
    Set rng = wb.Names(rangeName)
    On Error GoTo 0

    If Not rng is Nothing Then
        DoesNamedRangeExistInWorkbook = True
        Set rng = Nothing
    Else
        DoesNamedRangeExistInWorkbook = False
    End If

    Exit Function
catch:
    DoesNamedRangeExistInWorkbook = False
End Function

编辑

这是用于检查工作簿中是否存在特定表的代码。我们正在使用表名来检查它的存在。同样,此代码未经测试。

Public Function DoesTableExist(ByVal wb As Workbook, _
ByVal tblName As String) As Boolean
    On Error GoTo catch

    DoesTableExist = False

    Dim lstobj As ListObject, ws As Worksheet

    For Each ws In wb.Worksheets
        For Each lstobj In ws.ListObjects
            If lstobj.Name = tblName Then
                DoesTableExist = True
                Exit Function
            End If
        Next
    Next

    Exit Function
catch:
    DoesTableExist = False
End Function
于 2013-04-18T11:22:45.687 回答