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

    ===***===

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

相关推荐
Evand J10 分钟前
MATLAB技巧——平滑滤波,给出一定的例程和输出参考
开发语言·matlab
妙极矣12 分钟前
JAVAEE初阶01
java·学习·java-ee
DC...14 分钟前
vue滑块组件设计与实现
前端·javascript·vue.js
Mars狐狸22 分钟前
AI项目改用服务端组件实现对话?包体积减小50%!
前端·react.js
碎叶城李白27 分钟前
NIO简单群聊
java·nio
H5开发新纪元31 分钟前
Vite 项目打包分析完整指南:从配置到优化
前端·vue.js
嘻嘻嘻嘻嘻嘻ys32 分钟前
《Vue 3.3响应式革新与TypeScript高效开发实战指南》
前端·后端
LCY13339 分钟前
python 与Redis操作整理
开发语言·redis·python
暮乘白帝过重山41 分钟前
路由逻辑由 Exchange 和 Binding(绑定) 决定” 的含义
开发语言·后端·中间件·路由流程