在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 |

    ===***===

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

相关推荐
qq_5470261792 小时前
Flowable 工作流引擎
java·服务器·前端
刘逸潇20052 小时前
CSS基础语法
前端·css
鼓掌MVP3 小时前
Java框架的发展历程体现了软件工程思想的持续进化
java·spring·架构
吃饺子不吃馅3 小时前
[开源] 从零到一打造在线 PPT 编辑器:React + Zustand + Zundo
前端·svg·图形学
编程爱好者熊浪3 小时前
两次连接池泄露的BUG
java·数据库
lllsure3 小时前
【Spring Cloud】Spring Cloud Config
java·spring·spring cloud
鬼火儿4 小时前
SpringBoot】Spring Boot 项目的打包配置
java·后端
NON-JUDGMENTAL4 小时前
Tomcat 新手避坑指南:环境配置 + 启动问题 + 乱码解决全流程
java·tomcat
小马哥编程4 小时前
【软考架构】案例分析-Web应用设计(应用服务器概念)
前端·架构
鱼与宇4 小时前
苍穹外卖-VUE
前端·javascript·vue.js