ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] EXCEL表中数字求和和文件夹图片个数对比

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-4-14 18:37 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
请老师帮助实现:
EXCEL表中数字求和和文件夹图片个数对比(如示例)

1.EXCEL表中的,档案号、姓名和对应的所有sheet表的F列页数求和显示在“对比表B列C列D列”
2.按姓名统计文件夹中的图片个数显示在“对比表E列”
3.文件夹会有几百人的EXCEL表和图片文件夹
4.如果目录更改,代码写入可以覆盖掉之前的。

期待各位大神老师的回复!不甚感激!


表格数字和图片个数对比.rar

1.44 MB, 下载次数: 4

TA的精华主题

TA的得分主题

发表于 2024-4-14 21:22 | 显示全部楼层
关键字:adox.catalog、POWERSHELL等
GIF 2024-04-14 21-20-42.gif

表格数字和图片个数对比.zip

1.46 MB, 下载次数: 9

TA的精华主题

TA的得分主题

发表于 2024-4-14 21:23 | 显示全部楼层
Sub Limonet()
    Dim Cat As Object, Cn As Object, ObjTable As Object
    Dim Path$, FileName$, StrCn$, StrSQL$, Arr As Variant, Brr As Variant, StrCommand$
    Set WshShell = CreateObject("WScript.Shell")
    ReDim Arr(1 To 3, 1 To 5)
    Set Cat = CreateObject("ADOX.Catalog")
    Set Cn = CreateObject("ADODB.Connection")
    Path = ThisWorkbook.Path & "\"
    FileName = Dir(Path & "*.xlsx")
    Do While FileName <> ""
        i = i + 1
        StrCn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & Path & FileName
        Cn.Open StrCn
        Cat.ActiveConnection = StrCn
        For Each ObjTable In Cat.Tables
            If Not ObjTable.Name Like "*FilterDatabase" And ObjTable.Type = "TABLE" And ObjTable.Name <> "报送单$" Then
                StrSQL = StrSQL & " Union All Select * From [Excel 12.0;DataBase=" & Path & FileName & "].[" & Replace(ObjTable.Name, "'", "") & "F3:F] Where 页数>0"
            End If
        Next ObjTable
        StrSQL = "Select Sum(页数) From (" & Mid(StrSQL, 12) & ")"
        Brr = Cn.Execute(StrSQL).Getrows
        Arr(i, 1) = Split(FileName)(0)
        Arr(i, 2) = Split(Split(FileName)(1), ".xlsx")(0)
        Arr(i, 3) = Brr(0, 0)
        StrCommand = "Powershell [System.IO.Directory]::GetFiles('" & Path & Split(FileName, ".xlsx")(0) & "').Count"
        Set WshShellExec = WshShell.Exec(StrCommand)
        Arr(i, 4) = Split(WshShellExec.StdOut.ReadAll, Chr(13))(0)
        Arr(i, 5) = Arr(i, 3) - Arr(i, 4)
        StrSQL = ""
        Cn.Close
        FileName = Dir
    Loop
    Range("B2").Resize(UBound(Arr), UBound(Arr, 2)) = Arr
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-14 21:35 | 显示全部楼层
limonet 发表于 2024-4-14 21:23
Sub Limonet()
    Dim Cat As Object, Cn As Object, ObjTable As Object
    Dim Path$, FileName$, St ...

感谢老师,马上去学习

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-14 21:39 | 显示全部楼层
本帖最后由 tulip_ll 于 2024-4-15 12:06 编辑
limonet 发表于 2024-4-14 21:23
Sub Limonet()
    Dim Cat As Object, Cn As Object, ObjTable As Object
    Dim Path$, FileName$, St ...

为什么还会闪烁几下再出结果

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-16 10:27 | 显示全部楼层
tulip_ll 发表于 2024-4-14 21:35
感谢老师,马上去学习

老师,文件名的格式稍加变化,程序不会改,麻烦老师看看文件夹中空格变成中划线这个代码怎么改动一下
Sub xmbd()
    Dim Cat As Object, Cn As Object, ObjTable As Object
    Dim Path$, FileName$, StrCn$, StrSQL$, Arr As Variant, Brr As Variant, StrCommand$
    Set WshShell = CreateObject("WScript.Shell")
    ReDim Arr(1 To 1000, 1 To 5)
    Set Cat = CreateObject("ADOX.Catalog")
    Set Cn = CreateObject("ADODB.Connection")
    Path = ThisWorkbook.Path & "\"
    FileName = Dir(Path & "*.xlsx")
    Do While FileName <> ""
        i = i + 1
        StrCn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & Path & FileName
        Cn.Open StrCn
        Cat.ActiveConnection = StrCn
        For Each ObjTable In Cat.Tables
            If Not ObjTable.Name Like "*FilterDatabase" And ObjTable.Type = "TABLE" And ObjTable.Name <> "报送单$" Then
                StrSQL = StrSQL & " Union All Select * From [Excel 12.0;DataBase=" & Path & FileName & "].[" & Replace(ObjTable.Name, "'", "") & "F3:F] Where 页数>0"
            End If
        Next ObjTable
        StrSQL = "Select Sum(页数) From (" & Mid(StrSQL, 12) & ")"
        Brr = Cn.Execute(StrSQL).Getrows
        Arr(i, 1) = Split(FileName)(0)
        Arr(i, 2) = Split(Split(FileName)(1), ".xlsx")(0)
        Arr(i, 3) = Brr(0, 0)
        StrCommand = "Powershell [System.IO.Directory]::GetFiles('" & Path & Split(FileName, ".xlsx")(0) & "').Count"
        Set WshShellExec = WshShell.Exec(StrCommand)
        Arr(i, 4) = Split(WshShellExec.StdOut.ReadAll, Chr(13))(0)
        Arr(i, 5) = Arr(i, 3) - Arr(i, 4)
        StrSQL = ""
        Cn.Close
        FileName = Dir
    Loop
    Range("B2").Resize(UBound(Arr), UBound(Arr, 2)) = Arr
    Range("A2:A65536").ClearContents
            For j = 1 To Cells(Rows.Count, 2).End(xlUp).Row - 1
            Cells(j + 1, 1) = j 'B列
             Next
End Sub

改后.png
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-10 19:43 , Processed in 0.040707 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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