精华内容
下载资源
问答
  • 某一个文件夹下存了许多文件,想知道某一文件是否存在,然后依据判断结果进行各样的操作。代码可以这么写: Sub test() Dim fileName As String fileName = ThisWorkbook.Path & "\机密文件.xlsx" If Len...

    某一个文件夹下存了许多文件,想知道某一文件是否存在,然后依据判断结果进行各样的操作。代码可以这么写:

    Sub test()
      Dim fileName As String
      fileName = ThisWorkbook.Path & "\机密文件.xlsx"
      If Len(Dir(fileName)) > 0 Then
        Debug.Print "Yes"
      Else
        Debug.Print "No"
      End If
    End Sub

    不过这样的代码只能判断本工作簿所在的文件夹中是否存在,我们可以输出fileName变量查看一下:

    C:\Users\Joshua\Desktop\测试\机密文件.xlsx

    vba就是用这个路径去查询机密文件.xlsx是否存在,如果机密文件存在文件夹就没办法找见了。

    假设如果想要查找本工作簿的上一级目录,即:

    C:\Users\Joshua\Desktop\机密文件.xlsx

    这个时候该如何写呢。

    Sub test()
      Dim fileName As String
      fileName = ThisWorkbook.Path
      fileName = Mid(fileName, 1, InStrRev(fileName, "\"))
      fileName = fileName & "机密文件.xlsx"
      Debug.Print fileName
    End Sub
    
    '输出 → C:\Users\Joshua\Desktop\机密文件.xlsx

    这边用到了Mid和InStrRev的用法。这两个函数的用法也是十分简单的。

    Mid函数是截取字符串的,而InStrRev函数返回一个字符串在另一个字符串中出现的位置,从字符串的末尾开始查询。这里就不详细展开记录了。

    展开全文
  • 开发VBA代码时,经常需要操作工作表对象,但是这个是否存在呢?各种奇葩的用户都会有,所以在代码中一定要先判断然后再进行后续操作,非常可惜的是VBA中并没有提供直接的方法来完成这个判断,只有写一个自定义函数了...

    开发VBA代码时,经常需要操作工作表对象,但是这个是否存在呢?各种奇葩的用户都会有,所以在代码中一定要先判断然后再进行后续操作,非常可惜的是VBA中并没有提供直接的方法来完成这个判断,只有写一个自定义函数了。

    Function udfSheetExists(strShtName As String, Optional strWbName As String) As Boolean
        On Error Resume Next
        If strWbName = "" Then
            Set objWb = ActiveWorkbook
        Else
            Set objWb = Workbooks(strWbName)
        End If
        udfSheetExists = CBool(Not objWb.Sheets(strShtName) Is Nothing)
        On Error GoTo 0
    End Function

    代码非常简单,函数有两个参数:

    参数名称含义说明
    strShtName指定工作表名称必选
    strWbName指定工作簿名称可选

    调用函数时,如果没有提供参数strWbName ,将使用活动工作簿做为目标工作簿。objWb.Sheets(strShtName) Is Nothing判断工作表是否存在,既然这句代码就可以判断工作表是否存在,为啥还要写这么多代码的一个自定义函数呢?如果工作表不存在,那么objWb.Sheets(strShtName)将产生运行时错误9(下标越界),这也是代码中需要使用On Error Resume Next忽略系统错误的原因。

    演示代码如下:

    Sub Demo()
        Debug.Print udfSheetExists("Sheet1")
        Debug.Print udfSheetExists("Sheet1", "MyData.xlsx")
    End Sub

    Debug.Print udfSheetExists("Sheet1")省略第二个参数,相当于检查活动工作簿中是否存在名称为Sheet1的工作表。
    自定义函数中,并没有检查名称为strWbName的工作簿是否存在,有兴趣的读者可以自行补充。

    展开全文
  • 使用VBA代码操作工作表时,如果工作表并不存在,那么将产生运行时错误。为了避免这种异常的发生,使用代码操作任何表(不止局限于工作表,也适用于宏表和图表)之前应检测该工作表是否存在。在代码中这样用到此功能...

    使用VBA代码操作工作表时,如果工作表并不存在,那么将产生运行时错误。为了避免这种异常的发生,使用代码操作任何表(不止局限于工作表,也适用于宏表和图表)之前应检测该工作表是否存在。在代码中这样用到此功能,那么将可以将此功能封装为一个自定义函数,在代码中可以很方便的调用函数。


    方法1:遍历表对象

    Function blnSheetExist1(ByVal strSheetName As String) As Boolean
        Dim objSht
        For Each objSht In ThisWorkbook.Sheets
            If UCase$(objSht.Name) = UCase$(strSheetName) Then
                blnSheetExist1 = True
                Exit For
            End If
        Next
    End Function
    

    【代码解析】
    第2行代码声明对象变量,由于该变量可能是工作表,也可以是宏表和图表,因此声明为变体变量。
    第3~8行代码使用For ...Next循环结构变量工作簿中的表对象,其中Sheets是表对象的集合,包括工作表、宏表和图表。
    第4行代码判断名称是否匹配。Excel工作表名称不区分大小写字符,也就是说在一个工作簿中不可能同时存在名称为“demo”和“DEMO”的工作表,所以此代码中使用UCase$函数将名称转换为大写字符,然后进行比较。
    如果名称一致,那么第5行代码将函数返回值设置为True,第6行代码终止For ...Next循环。
    如果循环结束,仍未找到指定的工作表,那么函数返回值为False


    方法2:利用错误捕获
    如果工作簿中工作表较多,那么每次调用函数将循环多次,影响代码的整体效率。利用错误捕获方法,可以更简洁的实现相同的功能。

    Function blnSheetExist2(ByVal strSheetName As String) As Boolean
        On Error Resume Next
        Debug.Print Sheets(strSheetName).Name
        If Err.Number = 0 Then blnSheetExist2 = True
        On Error GoTo 0
    End Function
    

    【代码解析】
    第2行代码设置忽略运行时错误继续执行代码。
    第3行代码在立即窗口中输出表名称,此代码并无实际意义,只是为了调用指定对象,进而使用错误捕获。
    第4行代码用于判断是否已经发生了运行时错误。如果Err.Number = 0,说明并未产生运行时错误,此时将函数返回值设置为True,否则返回值为False
    第5行代码恢复系统的错误处理机制。

    无论工作簿中有多少个工作表,此方法的运行时间都是相同的,起运行效率更高。

    展开全文
  • 方法一: 通过循环,判断目标表是否存在 Function searchTable(TableName As String) As Boolean searchTable = False '默认不存在 Dim tbl As DAO.TableDef For Each tbl In CurrentDb.TableDefs If tbl.Name =...

    方法一: 通过循环,判断目标表是否存在

    Function searchTable(TableName As String) As Boolean
        searchTable = False  '默认不存在
        Dim tbl As DAO.TableDef
        For Each tbl In CurrentDb.TableDefs
            If tbl.Name = TableName Then
                searchTable = True  '如果存在,返回 Ture,并退出循环
                Exit For
            End If
        Next
    End Function
    

    方法二: 通过系统的错误提示,判断表是否存在

    Function test()
        MsgBox TableIsIn("测试表")
    End Function
    
    
    Function TableIsIn(TableName As String)
    
        TableIsIn = True  '默认表存在
        On Error Resume Next   '如果报错,继续往下运行
        
        Dim strSQL As String
        '当表不存在时,系统会报错
        '错误代码为:3078
        '错误信息:Microsoft Access 数据库引擎找不到输入表或查询“表名”。请确定它存在且其名称拼写正确。
        strSQL = "select * from " & TableName
        CurrentDb.Execute strSQL  '执行 sql 
        
        If Err.Number = 3078 Then
            TableIsIn = False
        End If   
             
    End Function
    
    展开全文
  • 判断Sheet是否存在 Public Function IsSheetExists(sheetName As String) Dim ws As Worksheet On Error Resume Next Set ws = Worksheets(sheetName) IsSheetExists = IIf(ws Is Nothing, False, True) ...
  • 分享成果,随喜真能量。... 176:使用自定义MyExistSh函数判断工作簿是否存在指定名称的工作表NO. 177:使用Array函数创建一个数组用来保存数据并将其写入到工作表的单元格区域VBA过程代码176:使用自定义MyExi...
  • 使用VBA验证工作表是否存在 ============================================================= 代码区域 ============================================================= Sub 判断工作表是否存在() Dim wk As...
  • EXCEL-VBA:检测Sheet是否存在

    千次阅读 2019-12-09 13:22:50
    Sub test() MsgBox CheckIsExistsSheetName("Sheet1") End Sub Function CheckIsExistsSheetName(ByVal SheetName) As Boolean CheckIsExistsSheetName = False Dim sheet As Worksheet For Each ...
  • 为什么VBA这么灵活,一个问题,百度下有好多种答案! 虽然有些错的,大多数不同的方法还都能行,佩服! 这个出错语句判断这个真好 Sub t1() a = InputBox("请输入要查找的sheet名") On Error GoTo 100 ...
  • 分享成果,随喜真能量。... 176:使用自定义MyExistSh函数判断工作簿是否存在指定名称的工作表NO. 177:使用Array函数创建一个数组用来保存数据并将其写入到工作表的单元格区域VBA过程代码176:使用自定义MyExi...
  • 分享成果,随喜真能量。大家好,今日内容仍是和大家分享VBA编程中常用的简单“积木”过程代码,这些... 175:利用VBA的自定义函数,判断工作表是否存在VBA过程代码174:如何利用VBA代码,判断是否为空表,如果为空表...
  • 问题背景:很多时候想对工作... 问题提出:如何判断指定工作表是否存在 解决代码:函数判断是否存在,在过程中调用此函数,并做进一步操作,比如添加新表/删除此表等. Function ExistSheet(ShtName As String) As Boolean ...
  • VBA单元格、工作表工作簿

    千次阅读 2019-04-30 23:08:35
    详解VBA单元格、工作表工作簿各种表示、方法,注意事项。
  • Private Function FileExists(fname) As Boolean '当文件存在时返回true  Dim x As String  x = Dir(fname)  If x <> "" Then FileExists = True _  Else FileExists = False...
  • Excel VBA工作簿工作表的操作

    千次阅读 2017-05-13 00:46:53
    1.保存当前工作簿Public Sub保存当前工作簿() Dim wb As Workbook Set wb = ThisWorkbook '可指定任意工作簿 wb.Save Set wb = Nothing End Sub如果是第一次保存工作簿,请使用SaveAs方法为该文件指定文件名...
  • 其中有一个功能是需要查询某个(或查询)在数据库中是否存在,为此从网上搜索了很多文章,并在我的数据库中做了较多的测试,感觉不是很好,而且大多数文章中都只介绍了“是否存在,但对“查询”是否存在却介绍得...
  • Excel 文件操作 一、概述 本质就是操作 workbook window 文件窗口 一个 excel 文件对应一...1、判断文件是否存在和打开 是否存在:输出为 0 就是不存在 Debug.Print Len(Dir("d:\test.xlsx")) 是否打开 Dim...
  • VBA判断sheet页面是否为空,不为空则清空数据
  • EXCEL-VBA:Sheet是否存在、新建Sheet、Sheet改名
  • VBA中经常会有一个这样的需求,在执行运算之前需要先判断指定工作表名称是否存在,否则程序将会报“下标越界”的错误,给用户不好的体验 我所知晓的查询工作表名称通常有3种方法: 一、遍历所有工作表,如果工作表...
  • 比如工作表如果不存在,引用就会报错,所以没有办法判断。这儿我们有一个有意思的办法。就是先引用一下对象,如果对象存在,则不会发生错误,我们则对对象进行正常操作,反之亦然。例如: 假定我们要增加一个某月...
  • 如图所示,如何利用VBA将该工作簿中的各个工作表分别保存至单独的工作簿中,并将工作簿名称以工作表标签命名? 部门 市场部 员工编号 姓名 0215 林革壮 0233 李卫卿 0247 申玲 ...
  • 需求:判断一个已知名称的文件是否存在,我只知道它的详细路径,但只知道这个文件名称中包含“93阅兵”4字,请问如何判断这样的文件是否存在呢? 假如它保存的路径是:e:\93\  Sub ft()  If Len(Dir("e:\93\*...
  • VBA工作表的操作详解

    千次阅读 2017-12-08 17:30:22
    '1 判断A工作表文件是否存在 Sub s1() Dim X As Integer For X = 1 To Sheets.Count If Sheets(X).Name = "A" Then MsgBox "A工作表存在" Exit Sub End If Next MsgB
  • 存在多个工作簿,且需要转移第一个sheet中的数据(一般为辅导员数据收集的时候)。 多个工作簿的sheet均在相同的位置有数据,如图所示 打开给定工作簿,选择按钮,输入你需要在多个表格中复制的数据位置...
  • VBA 常用文件判断

    2021-04-08 10:20:24
    一、代码 '判断文件是否打开 Sub test() Dim i As Integer '定义循环变量 For i = 1 To Workbooks.Count '... If Workbooks(i).Name = "模拟工资.xlsx" Then '判断工作簿是否打开 MsgBox "文件已打开!" Exit Sub
  • 如图所示,该为某公司采购清单。由于在记录时并未标记供应商来源地,只能通过E列供应商名称中寻找。现需要筛选出所有上海的供应商采购记录,该如何用VBA实现? 商品编码 入库日期 部门 业务员 供应...
  • 代码准备放到关闭前,报错 这个代码还有点问题 Sub jackxxx1() '先撸有几张,表名存入数组中 Dim arr1() Dim arr2() Dim dic1 As Object k = 0 wkn1 = ThisWorkbook.Name Set dic1 = ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,880
精华内容 752
关键字:

vba判断工作簿是否存在