
==标题==
|-------------------------------------------|
| 在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
(二)功能特点说明:
- 参数校验机制
- 检查空工作簿引用和工作表数量,避免空引用异常
-
双模式匹配
-
-
精确匹配:使用
String.Equals
忽略大小写对比 -
模糊匹配:采用
IndexOf
方法实现部分匹配,支持大小写不敏感
-
-
容错处理
-
-
returnFirstIfNotFound
参数控制是否返回第一个工作表
-
使用
TryCast
避免类型转换异常
(三)使用示例:
phpDim targetSheet As Excel.Worksheet = WorksheetHelper.GetTargetSheet( workbook:=Globals.ThisAddIn.Application.ActiveWorkbook, sheetName:="report", exactMatch:=False, returnFirstIfNotFound:=True)
以上函数是否对你有用,请点赞、转发给朋友哦
==正文结束==
==更多合集==
|-----------------------------|
| Excel VBA学习系列汇总20241205 |===***===
|----|----------------------------------------------------------------------------------|----|
| 关注 || 转发 |
| 点赞 || 在看 |
-