Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: gdxtx

[已解决]求助帮忙修改遍历同一文件夹所有文件(包含子文件夹)的代码

[复制链接]
 楼主| 发表于 2017-2-24 18:05 | 显示全部楼层
乐乐2006201506 发表于 2017-2-23 06:05
这个提速空间不大,不打开文件复制,应该可以快些。有空了给你看看。

非常感谢您的帮助!!
回复

使用道具 举报

 楼主| 发表于 2017-9-17 12:23 | 显示全部楼层
乐乐2006201506 发表于 2017-2-4 11:30
不客气,我刚刚开始学习VBA,只是善于保存而已。共同进步!

老师,您好!想请您帮我个忙。我附件里有个“现金账”表中,“B”列与“L”列有二个公式,我希望能用VBA写成二个宏来执行,即当C列有时期时执行B列公式的宏;当H列和J列有数据时执行L列的公式。不知道老师您有没有时间帮我一下。

出纳及往来(A).zip

391.24 KB, 下载次数: 4

回复

使用道具 举报

发表于 2017-9-17 21:14 | 显示全部楼层
本帖最后由 乐乐2006201506 于 2017-9-17 21:17 编辑

当H列和J列有数据时执行L列的公式。如果当H列和J列同时没有数据,H列有数据J列没有数据或J列有数据H列没有数据时怎么办?按照你的公式来说,只判断了G列情况啊。
下边是按照你L列公式,写的L列代码。你看看,合适吗?
Sub L列公式()
    With Sheets("现金账")
        r = Cells(.Rows.Count, 3).End(3).Row
        For i = 8 To r
            If Range("g" & i) = "" Then
                Range("l" & i) = ""
            ElseIf Range("g" & i) = "本月合计" Or Range("g" & i) = "本年累计" Then
                Range("l" & i) = Range("l" & i - 1)
            Else
                Range("l" & i) = Range("l" & i - 1) + Range("h" & i) - Range("j" & i)
            End If
        Next
    End With
End Sub

没明白你B列里公式的意思。
=IF(C9="","",IF(G8="本月合计",B7+1,IF(AND(G8="本年累计",G7="承 前 页"),B4+1,IF(AND(G8="承 前 页",G6="本年累计"),B4+1,IF(AND(G6="承 前 页",G7="本月合计",G8="本年累计"),B4+1,IF(AND(G7="本月合计",G8="本年累计"),B6+1,IF(AND(G8="承 前 页",G7="过 次 页"),B6,B8)))))))
承前页和过次页时干什么的?
回复

使用道具 举报

 楼主| 发表于 2017-9-17 22:26 | 显示全部楼层
乐乐2006201506 发表于 2017-9-17 21:14
当H列和J列有数据时执行L列的公式。如果当H列和J列同时没有数据,H列有数据J列没有数据或J列有数据H列没有 ...

老师,您好!非常感激您回复。对VBA我真的是门外汉,其实有个朋友帮我写了“模块6”的代码,计算结果也没问题,只是我的电脑装的是2003版的,他给我的代码运行起来极卡,每录入一个数字要运行10多秒才能算出结果。所以我只有来向您求助,前面没跟您说清楚是怕影响您写代码的思路。我现在把朋友写好的代码用附件发给您看看,您看能不能优化或重新帮我写一写。谢谢!给您添麻烦了。

出纳及往来A.rar

412.48 KB, 下载次数: 12

回复

使用道具 举报

发表于 2017-9-18 08:04 | 显示全部楼层
本帖最后由 乐乐2006201506 于 2017-9-18 08:07 编辑

现在有些忙,有空了帮你。建议你安装高版本的office。
回复

使用道具 举报

发表于 2017-9-18 09:36 | 显示全部楼层
gdxtx 发表于 2017-2-22 23:35
您真是太棒了,非常感谢!!我还有一个问题想请教您,我日常用这个方法遍历文件夹的文件很多(大约有1000 ...

Sub 父子转换法()
Application.ScreenUpdating = False
Application.DisplayAlerts = False












Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
代码首尾加上这四行代码,能提一点速度

回复

使用道具 举报

 楼主| 发表于 2017-9-18 09:51 | 显示全部楼层
wc110wc110 发表于 2017-9-18 09:36
Sub 父子转换法()
Application.ScreenUpdating = False
Application.DisplayAlerts = False

确实有所提速,非常感谢,谢谢您!!
回复

使用道具 举报

 楼主| 发表于 2017-9-18 09:51 | 显示全部楼层
乐乐2006201506 发表于 2017-9-18 08:04
现在有些忙,有空了帮你。建议你安装高版本的office。

好的,先谢谢您!
回复

使用道具 举报

发表于 2017-9-18 17:36 | 显示全部楼层
本帖最后由 乐乐2006201506 于 2017-9-18 17:41 编辑
gdxtx 发表于 2017-9-18 09:51
好的,先谢谢您!

不客气,你把B列和L列数据依据说一下,看有没有比你公式更简便的方法或思路。

你现有的代码是将公式直接用到代码中了,所以速度就慢了,数组的运用会加快速度。
回复

使用道具 举报

 楼主| 发表于 2017-9-19 12:11 | 显示全部楼层
您好!
B列其实就是自动显示月份,当B8填上月份(如5),后面以C列(如C9)起填上日期时,B9自动显示月份5,当遇到G列出现“本月合计”或“本年累计”时,B和C为空。后面C列再填上日期,刚对应的B显示的月份为“本月合计”上面的月份+1。
L列是自动计算余额,即L8=L7+H8-J8,依此类推,
当遇到G列“本月合计”时,此行H单元格为本月所有H列的和,此行J单元格为本月所有J列的和。此行L单元格为“本月合计”上面的L单元格的值。
当遇到G列“本年累计”时,此行H单元格为上面所有H列本月合计的和,此行J单元格为上面所有J列本月合计的和。此行L单元格为“本月合计”上面的L单元格的值。

不知道我这样表达是否清楚,麻烦老师您有空帮帮我。谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-3-29 03:25 , Processed in 0.413661 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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