ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请老师帮忙修改代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-4-17 09:18 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
请老师帮助实现修改代码:
EXCEL表中数字求和和文件夹图片个数对比(如示例)


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


原代码limonet老师编写的,已解决上述问题
因所有的文件名中间空格改为中划线,程序执行不了。请老师帮助修改!
期待各位大神老师的回复!不甚感激!


原代码支持的文件名.png
现文件名格式.png

修改代码:表格数字和图片个数对比.rar

1.45 MB, 下载次数: 12

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-17 09:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
老师编写的原代码如下:
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

TA的精华主题

TA的得分主题

发表于 2024-4-17 09:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
是不是要这样的?请好评+2分,谢谢!

修改代码:表格数字和图片个数对比.rar

1.45 MB, 下载次数: 17

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-17 09:56 | 显示全部楼层
hlxue 发表于 2024-4-17 09:34
是不是要这样的?请好评+2分,谢谢!

完美解决,老师,我怎么看不出来哪里改动了呢

TA的精华主题

TA的得分主题

发表于 2024-4-17 09:59 | 显示全部楼层
tulip_ll 发表于 2024-4-17 09:56
完美解决,老师,我怎么看不出来哪里改动了呢

     以下代码将FileName中的“-”替换成“ ”就行了。
  If InStr(FileName, "-") > 0 Then
        Filename1 = Replace(FileName, "-", " ")
        Else
        Filename1 = FileName
        End If
        Arr(i, 1) = Split(Filename1)(0)
        Arr(i, 2) = Split(Split(Filename1)(1), ".xlsx")(0)

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-17 10:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 tulip_ll 于 2024-4-17 12:10 编辑

嗯看到区别了,谢谢大神老师们
如果文件夹和EXCEL不一致,能否实现,只写入其中一个。
因为现在测试过程发现EXCEL表有、文件夹没有的人员,小程序不执行。文件夹有、EXCEL表没有的人员,程序可执行人员直接不写入对比表
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 15:32 , Processed in 0.046483 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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