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

==标题==

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

==正文==

|---------------------------------------------------------------------------------------------------------------------------------------------|
| 解决问题 |
| 1.我们在用程序循环打开xlsx文件后,很多时候要进入某个工作表进行操作时,有可能进入指定工作表名不存在时,程序会出错,这时程序就没法再进行下去,所以设计这样一个函数, 2.主要参数是:是精确还是模糊匹配,以上不存在是否返回第1个工作表。 3.分别用VBA代码和VB.net代码 |

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

语法:

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

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

(一)函数代码:

sql 复制代码
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

(二)使用示例:

sql 复制代码
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函数代码及使用方法

(一)函数代码:

sql 复制代码
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避免类型转换异常

    (三)使用示例:

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

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

    ==正文结束==

    ==更多合集==

    |-----------------------------|
    | Excel VBA学习系列汇总20241205 |

    ===***===

    |----|----------------------------------------------------------------------------------|----|
    | 关注 | | 转发 |
    | 点赞 | | 在看 |

相关推荐
我的小月月2 分钟前
基于Canvas实现的网页取色器功能解析
前端
十八旬10 分钟前
苍穹外卖项目实战(日记十)-记录实战教程及问题的解决方法-(day3-2)新增菜品功能完整版
java·开发语言·spring boot·mysql·idea·苍穹外卖
芝士加15 分钟前
还在用html2canvas?介绍一个比它快100倍的截图神器!
前端·javascript·开源
阿虎儿16 分钟前
React 引用(Ref)完全指南
前端·javascript·react.js
鞋尖的灰尘25 分钟前
springboot-事务
java·后端
银迢迢31 分钟前
SpringCloud微服务技术自用笔记
java·spring cloud·微服务·gateway·sentinel
Ratten33 分钟前
解决 error when starting dev server TypeError crypto$2.getRandomValues
前端
coding随想35 分钟前
深入浅出DOM3合成事件(Composition Events):如何处理输入法编辑器(IME)的复杂输入流程
前端
六月的雨在掘金36 分钟前
狼人杀法官版,EdgeOne 带你轻松上手狼人杀
前端·后端
用户03321266636738 分钟前
Java 将 CSV 转换为 Excel:告别繁琐,拥抱高效数据处理
java·excel