内容提要
今天我们主要介绍判断某个对象、某个值是否存在的几个自定义函数。 我们在操作一些对象的时候,经常需要判断它是否存在,才好执行下一步操作,如果对象不存在,那肯定会报错,虽然我们可以用容错语句On Error Resume Next,但不建议笼统地使用,这样不仅会掩盖其他错误,而且,如果对象不存在,我们还要采取另外的操作。 下面,我们就一起来了解一下这些自定义函数: 1、IsWorksheetExists,判断工作簿中是否包含指定名称的工作表,我们循环工作簿中的所有工作表,把每个工作表的Name与指定的工作表名称进行比较,如果有相等则表示存在指定名称的工作表。 Function IsWorksheetExists(wsName As String, wb As Workbook) As Boolean '//判断是否存在指定名称的工作表,循环比对工作表名称 Dim ws As Worksheet IsWorksheetExists = False For Each ws In wb.Sheets If ws.Name = wsName Then IsWorksheetExists = True Exit Function End If NextEnd Function 我们还可以利用容错语句来编写这个函数,我们把指定名称的工作表赋值给Worksheet对象,如果存在这个工作表,则程序不会报错,否则会报错。 Function IsSheetExists(wsName As String, wb As Workbook) As Boolean '//判断是否存在指定名称的工作表,采用赋值及容错语句 Dim ws As Worksheet On Error Resume Next Set ws = wb.Sheets(wsName) On Error GoTo 0 If ws Is Nothing Then IsSheetExists = False Else IsSheetExists = True Set ws = Nothing End IfEnd Function 典型应用:当我们要向一个工作表写入数据时,通常需要判断一下该工作表是否存在,以防出错,如果不存在,我们还可以直接添加指定名称的工作表,具体我们可以参考案例【循环读取文件夹下所有xlsb文件,隔行提取数据】 2、IsFolderExists,判断指定名称文件夹是否存在,我们可以使用文件系统对象FileSystemObject: Function IsFolderExists(currPath As String) As Boolean '//判断文件夹是否存在,利用FSO对象 Dim FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject") IsFolderExists = FSO.folderexists(currPath)End Function 还可以使用Dir函数来实现: Function IsFolderExists(currPath As String) As Boolean'//判断文件夹是否存在,利用Dir函数 If Dir(currPath, vbDirectory) <> "" Then IsFolderExists = True Else IsFolderExists = False End IfEnd Function 典型应用:当我们要把一个文件保存到指定文件夹时,我们可以先检查一下该文件夹是否存在,如果不存在,我们可以添加,参考【印章使用登记系统设计与使用说明(1):基础设置】。 3、IsFileExists,判断指定名称文件是否存在,我们可以使用文件系统对象FileSystemObject: Function IsFileExists(currFile As String) As Boolean '//判断文件是否存在 Dim FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject") IsFileExists = FSO.FileExists(currFile)End Function 也可以使用Dir函数: Function IsFileExists(currFile As String) As Boolean '//判断文件是否存在,利用Dir函数 If Dir(currFile) <> "" Then IsFileExists = True Else IsFileExists = False End IfEnd Function 典型应用:当我们要Copy或Delete一个文件时,我们最好先判断一下这个文件是否存在,如果存在再执行操作,参考【批量插入图片:批量插入与工作表同名的图片文件】 4、还有一些判断某个值是否存在的自定义函数,由于不是通用型的,我们不好一一列举,看一个例子吧,模式都差不多。来自【送货单、销售单:分享一个功能强大的纯EXCEL版数据录入、保存、修改、打印模板!】 Function IsDeliverNumberExists(DeliverNumber As String) As Boolean '//判断送货单号是否存在于“数据” Dim tbl As String, sql As String Dim arr() tbl = "[数据$]" sql = "select count(*) from " & tbl & " where 送货单号='" & DeliverNumber & "'" arr = getData(sql) If arr(0, 0) > 0 Then IsDeliverNumberExists = True Else IsDeliverNumberExists = False End IfEnd Function 核心方法是通过SQL的计数查询,查询某一个值在某一个数据表字段中有几个,如果查询结果是0,则表示这个值不存在。 如果不用SQL查询,我们还可能通过循环数组、工作表单元格等方式来实现,也可以结合使用查找函数来判断。 典型应用:我们在录入出库单、销售单、会计凭证等数据的时候,会同时录入一个不重复的单号、凭证号,我们在向数据库表新增写入数据的时候,要确保当前写入的单号没有出现过。 后记 |
|