分享

常用VBA自定义函数合集2:判断工作表、文件、文件夹、订单号等是否存在

 冷茶视界 2024-06-23 发布于江苏

内容提要

  • 自定义函数判断工作表、文件、文件夹、订单号等是否存在
大家好,我是冷水泡茶。
我们在写代码的时候,把一些相对独立、可重复使用的代码块定义为函数,这是一个很好的习惯,这样不仅可以让我们的代码层次清晰,结构分明,便于修改维护,而且还可以提高我们写代码的效率,我们可以重复使用这些函数,而不必每次都重新写。
前段时间,我们在文章【我常用的自定义函数代码集合】中 享过一批,其实还有很多,有的可以通用,有的只适用于当前案例文件,但其中的编写方法也有可借鉴的地方。 

今天我们主要介绍判断某个对象、某个值是否存在的几个自定义函数。

我们在操作一些对象的时候,经常需要判断它是否存在,才好执行下一步操作,如果对象不存在,那肯定会报错,虽然我们可以用容错语句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查询,我们还可能通过循环数组、工作表单元格等方式来实现,也可以结合使用查找函数来判断。

典型应用:我们在录入出库单、销售单、会计凭证等数据的时候,会同时录入一个不重复的单号、凭证号,我们在向数据库表新增写入数据的时候,要确保当前写入的单号没有出现过。

后记

1、今天分享的自定义函数,均来自前期分享过的案例,具体用法可以参考相关案例。
2、对于判断文件、文件夹是否存在的自定义函数,如果我们在具体的代码中已经使用FileSystemObject,定义了一个对象FSO,那么我们可以直接使用该对象的FSO.FileExists、FSO.FolderExists方法,就没必要再使用自定函数了。
好,今天就到这里,我们下期再会!
~~~~~~End~~~~~~

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多