在VB.net和VBA中,自定义函数GetTargetSheet()返回工作表对象

发布于:2025-05-01 ⋅ 阅读:(13) ⋅ 点赞:(0)

==标题==

在VB.net和VBA中,自定义函数GetTargetSheet()返回工作表对象

==正文==

解决问题

1.我们在用程序循环打开xlsx文件后,很多时候要进入某个工作表进行操作时,有可能进入指定工作表名不存在时,程序会出错,这时程序就没法再进行下去,所以设计这样一个函数,

2.主要参数是:是精确还是模糊匹配,以上不存在是否返回第1个工作表。

3.分别用VBA代码和VB.net代码

一、自定义函数GetTargetSheet()解析

语法:

Function GetTargetSheet( _workbook As Workbook, _                        sheetName As String, _                        exactMatch As Boolean, _                        returnFirstIfNotFound As Boolean) As Worksheet
中文语法Function GetTargetSheet(工作簿,工作名称,精确匹配或模糊匹配,是否匹配第1个工作表 ) As Worksheet

二、VBA函数代码及使用方法

(一)函数代码:

Function GetTargetSheet(workbook As Workbook, _                        sheetName As String, _                        exactMatch As Boolean, _                        returnFirstIfNotFound As Boolean) As Worksheet     ' 参数校验     If workbook Is Nothing Then Set workbook = ActiveWorkbook     If workbook.Worksheets.Count = 0 Then Exit Function 
    Dim ws As Worksheet     For Each ws In workbook.Worksheets         ' 精确匹配逻辑         If exactMatch Then             If StrComp(ws.Name, sheetName, vbTextCompare) = 0 Then                 Set GetTargetSheet = ws                 Exit Function             End If         ' 模糊匹配逻辑         Else             If InStr(1, ws.Name, sheetName, vbTextCompare) > 0 Then                 Set GetTargetSheet = ws                 Exit Function             End If         End If     Next 
    ' 未找到时的处理     If returnFirstIfNotFound Then         Set GetTargetSheet = workbook.Worksheets(1)    Else         Set GetTargetSheet = Nothing     End If End Function

(二)使用示例:

Sub Test()    Dim targetSheet As Worksheet     Set targetSheet = GetTargetSheet(workbook:=ThisWorkbook, _                                   sheetName:="report", _                                   exactMatch:=False, _                                   returnFirstIfNotFound:=True)
    If Not targetSheet Is Nothing Then         targetSheet.Activate     Else         MsgBox "工作表不存在"    End If End Sub

三、VB.net函数代码及使用方法

(一)函数代码:

Imports Excel = Microsoft.Office.Interop.Excel 
Public Class WorksheetHelper     Public Shared Function GetTargetSheet(ByVal workbook As Excel.Workbook,                                          ByVal sheetName As String,                                          ByVal exactMatch As Boolean,                                          ByVal returnFirstIfNotFound As Boolean) As Excel.Worksheet 
        ' 参数校验         If workbook Is Nothing Then Throw New ArgumentNullException("workbook")        If workbook.Worksheets.Count = 0 Then Return Nothing 
        ' 遍历所有工作表         For Each sheet As Excel.Worksheet In workbook.Worksheets             ' 精确匹配逻辑             If exactMatch Then                 If String.Equals(sheet.Name, sheetName, StringComparison.OrdinalIgnoreCase) Then                     Return sheet                 End If             ' 模糊匹配逻辑             Else                 If sheet.Name.IndexOf(sheetName, StringComparison.OrdinalIgnoreCase) >= 0 Then                     Return sheet                 End If             End If         Next 
        ' 未找到时的处理         If returnFirstIfNotFound Then             Return TryCast(workbook.Worksheets(1), Excel.Worksheet)        End If 
        Return Nothing     End Function End Class

(二)功能特点说明:

  1. 参数校验机制
  • 检查空工作簿引用和工作表数量,避免空引用异常

  • 双模式匹配
    • 精确匹配:使用String.Equals忽略大小写对比

    • 模糊匹配:采用IndexOf方法实现部分匹配,支持大小写不敏感

  • 容错处理
    • returnFirstIfNotFound

      参数控制是否返回第一个工作表

    • 使用TryCast避免类型转换异常

    (三)使用示例:

    Dim targetSheet As Excel.Worksheet = WorksheetHelper.GetTargetSheet(    workbook:=Globals.ThisAddIn.Application.ActiveWorkbook,    sheetName:="report",    exactMatch:=False,    returnFirstIfNotFound:=True)

    以上函数是否对你有用,请点赞、转发给朋友哦

    ==正文结束==

    ==更多合集==

    Excel VBA学习系列汇总20241205

    ===***===

    关注

    转发
    点赞 在看

网站公告

今日签到

点亮在社区的每一天
去签到