Excel VBA – 如何检查不同工作簿中表格的存在?

我正在尝试检查工作簿中是否存在已命名范围,因为我已经写了一个遍历文件夹的macros。 下面我写的macros适用于“普通”命名范围,但是当我将函数的表名称作为命名范围时失败。

我在这里和其他地方search了为什么这可能是这样,任何人都可以指出我(可能很明显)做错了什么?

任何帮助,将不胜感激!

谢谢,

亚当

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 

试试这个( UNTESTED

我假设表名也是该表的命名范围,否则你将不得不循环遍历表名来检查它。 让我知道如果是这样的话,我会更新代码。

 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 

编辑

这是用于检查工作簿中是否存在特定表的代码。 我们正在使用表名来检查它的存在。 这个代码再次未经testing。

 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