ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 7448|回复: 21

[求助] 如何判断多工作簿是否存在指定工作表,返回判断结果

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-7-31 09:52 | 显示全部楼层 |阅读模式
1、"TT-汇总"工作簿 “判断”工作表A列显示遍历当期文件夹所有工作簿名称
2、判断每个工作簿是否存在指定工作表名称“data”,有返回“存在”B列,无返回“不存在”在B列


汇总工作簿.zip

53.48 KB, 下载次数: 12

TA的精华主题

TA的得分主题

发表于 2018-7-31 10:19 | 显示全部楼层
  1. Sub test()
  2.     Dim arr(1 To 1000, 1 To 2)
  3.     Application.ScreenUpdating = False
  4.     Set fso = CreateObject("scripting.filesystemobject")
  5.     Set ff = fso.getfolder(ThisWorkbook.Path)
  6.     For Each f In ff.Files
  7.         If f.Name <> ThisWorkbook.Name Then
  8.             m = m + 1
  9.             arr(m, 1) = Split(f.Name, ".")(0)
  10.             Set wb = Workbooks.Open(f)
  11.             For Each sht In wb.Sheets
  12.                 If InStr(sht.Name, "data") Then
  13.                     arr(m, 2) = "存在"
  14.                 Else
  15.                     arr(m, 2) = "不存在"
  16.                 End If
  17.             Next
  18.             ActiveWorkbook.Close False
  19.         End If
  20.     Next
  21.     [a2].CurrentRegion.Offset(1).ClearContents
  22.     [a3].Resize(m, 2) = arr
  23.     Application.ScreenUpdating = True
  24. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-31 10:42 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-7-31 10:52 | 显示全部楼层
xyd617 发表于 2018-7-31 10:42
显示 无法打开汇总工作簿

你是不是装的64位office2016呀?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-31 11:41 | 显示全部楼层
本帖最后由 xyd617 于 2018-7-31 11:45 编辑
lsc900707 发表于 2018-7-31 10:52
你是不是装的64位office2016呀?

是32位的OFFICE 2016

TA的精华主题

TA的得分主题

发表于 2018-7-31 11:50 | 显示全部楼层
xyd617 发表于 2018-7-31 11:41
是32位的OFFICE 2016

我运行没问题啊!你是不是改了啥不该改的!

TA的精华主题

TA的得分主题

发表于 2018-7-31 11:56 | 显示全部楼层
Sub test()
Dim sh As Worksheet, ar(1 To 888, 1 To 2), f, k%, msg$, nm$
Application.ScreenUpdating = False
For Each f In CreateObject("Scripting.FileSystemObject").GetFolder(ThisWorkbook.Path).Files
    If f.Name <> ThisWorkbook.Name And InStr(f.Name, ".xls") Then
        k = k + 1
        With GetObject(f)
            nm = Split(.Name, ".")(0)
            Err.Clear
            On Error Resume Next
            Set sh = .Sheets("data")
            msg = IIf(Err.Number <> 0, "不存在", "存在")
            .Close 0
        End With
        ar(k, 1) = nm: ar(k, 2) = msg
    End If
Next
If k Then ThisWorkbook.Sheets("判断").[a3].Resize(k, 2) = ar
Application.ScreenUpdating = True
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-31 11:57 | 显示全部楼层
lsc900707 发表于 2018-7-31 10:52
你是不是装的64位office2016呀?

返回到 set wb = workbooks.open(f)  这里,显示找不到 放代码的  XLSM工作簿文件。

TA的精华主题

TA的得分主题

发表于 2018-7-31 12:02 | 显示全部楼层
xyd617 发表于 2018-7-31 11:57
返回到 set wb = workbooks.open(f)  这里,显示找不到 放代码的  XLSM工作簿文件。

上一帖大神有回复你的文件夹有隐藏的文件,看看是不是这个原因。
附件测试代码是没有问题的。

TA的精华主题

TA的得分主题

发表于 2018-7-31 14:08 | 显示全部楼层
在当前文件夹下新建一个工作簿,运行下面的语句后,再试一下:
  1. Sub del()
  2. Application.ScreenUpdating = False
  3. Dim fso, f
  4. Set fso = CreateObject("Scripting.FileSystemObject")
  5. For Each f In fso.GetFolder(ThisWorkbook.Path).Files
  6.     If Left(f.Name, 2) = "~$" And InStr(f.Name, ".xls") Then fso.Deletefile f, 1
  7. Next
  8. Set fso = Nothing
  9. Application.ScreenUpdating = True
  10. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-11 07:54 , Processed in 0.030705 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表