快速判断工作簿中是否存在指定工作表

使用VBA代码操作工作表时,如果工作表并不存在,那么将产生运行时错误。为了避免这种异常的发生,使用代码操作任何表(不止局限于工作表,也适用于宏表和图表)之前应检测该工作表是否存在。在代码中这样用到此功能,那么将可以将此功能封装为一个自定义函数,在代码中可以很方便的调用函数。


方法1:遍历表对象

Function blnSheetExist1(ByVal strSheetName As String) As Boolean
    Dim objSht
    For Each objSht In ThisWorkbook.Sheets
        If UCase$(objSht.Name) = UCase$(strSheetName) Then
            blnSheetExist1 = True
            Exit For
        End If
    Next
End Function

【代码解析】
第2行代码声明对象变量,由于该变量可能是工作表,也可以是宏表和图表,因此声明为变体变量。
第3~8行代码使用For ...Next循环结构变量工作簿中的表对象,其中Sheets是表对象的集合,包括工作表、宏表和图表。
第4行代码判断名称是否匹配。Excel工作表名称不区分大小写字符,也就是说在一个工作簿中不可能同时存在名称为“demo”和“DEMO”的工作表,所以此代码中使用UCase$函数将名称转换为大写字符,然后进行比较。
如果名称一致,那么第5行代码将函数返回值设置为True,第6行代码终止For ...Next循环。
如果循环结束,仍未找到指定的工作表,那么函数返回值为False


方法2:利用错误捕获
如果工作簿中工作表较多,那么每次调用函数将循环多次,影响代码的整体效率。利用错误捕获方法,可以更简洁的实现相同的功能。

Function blnSheetExist2(ByVal strSheetName As String) As Boolean
    On Error Resume Next
    Debug.Print Sheets(strSheetName).Name
    If Err.Number = 0 Then blnSheetExist2 = True
    On Error GoTo 0
End Function

【代码解析】
第2行代码设置忽略运行时错误继续执行代码。
第3行代码在立即窗口中输出表名称,此代码并无实际意义,只是为了调用指定对象,进而使用错误捕获。
第4行代码用于判断是否已经发生了运行时错误。如果Err.Number = 0,说明并未产生运行时错误,此时将函数返回值设置为True,否则返回值为False
第5行代码恢复系统的错误处理机制。

无论工作簿中有多少个工作表,此方法的运行时间都是相同的,起运行效率更高。

发布了107 篇原创文章 · 获赞 49 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/taller_2000/article/details/104111477