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

    ===***===

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

相关推荐
tedcloud1231 小时前
UI-TARS-desktop部署教程:构建AI桌面自动化系统
服务器·前端·人工智能·ui·自动化·github
贫民窟的勇敢爷们4 小时前
SpringBoot整合AOP切面编程实战,实现日志统一记录+接口权限校验
java·spring boot·spring
jerryinwuhan4 小时前
基于各城市站点流量的复合功能比较
开发语言·php
UXbot4 小时前
AI原型设计工具如何支持团队协作与快速迭代
前端·交互·个人开发·ai编程·原型模式
AC赳赳老秦4 小时前
供应链专员提效:OpenClaw自动跟踪物流信息、更新库存数据,异常自动提醒
java·大数据·服务器·数据库·人工智能·自动化·openclaw
迈巴赫车主4 小时前
Java基础:list、set、map一遍过
java·开发语言
灵犀学长5 小时前
基于 Spring ThreadPoolTaskScheduler + CronTrigger 实现的动态定时任务调度系统
java·数据库·spring
ZC跨境爬虫5 小时前
跟着MDN学HTML_day_48:(Node接口)
前端·javascript·ui·html·音视频
南 阳6 小时前
Python从入门到精通day66
开发语言·python
好家伙VCC6 小时前
【无标题】
java