Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3316|回复: 11

[已解决]请高手帮我看看代码哪里错了

[复制链接]
发表于 2015-7-20 08:37 | 显示全部楼层 |阅读模式
如附件,我想用工作簿1里面的代码提取工作簿2中所有满足日期的工作表数据,但是我写的代码不知道哪里错了,老是不能按照
设定的日期提取数据,请高手指点下,本人刚开始学些代码,见笑了
最佳答案
2015-7-20 21:33
Desktop4.rar (90.08 KB, 下载次数: 4)

Desktop.zip

123.11 KB, 下载次数: 15

发表于 2015-7-20 10:06 | 显示全部楼层
Sub test()
    Dim A, B, i, j, s, dat
    With Workbooks.Open(GetPath())
        A = .Sheets(1).UsedRange    '数据源
        .Close 0
    End With
    Range("a6:f65536").ClearContents
    B = Range("A5:F" & UBound(A) + 5)    '目标工作簿
    dat = [f3]    '开始日期

    s = 1
    For i = 10 To UBound(A)
        For j = 15 To UBound(A, 2) Step 4
            If A(i, j - 1) <> "" And A(i, 3) > dat Then
                s = s + 1
                B(s, 1) = A(3, 4)       '机种
                B(s, 2) = A(6, j)       '物品代码
                B(s, 3) = A(i, 3)       '日期
                B(s, 4) = A(i, j - 1)   '数量
                B(s, 5) = A(i, 10)      '发票号
            End If
        Next j
    Next i
    [A5].Resize(s, 6) = B
End Sub

Function GetPath()
    Dim FileDlg As FileDialog
    Set FileDlg = Application.FileDialog(msoFileDialogFilePicker)
    If FileDlg.Show = -1 Then GetPath = FileDlg.SelectedItems(1) Else End
    Set FileDlg = Nothing
End Function

Desktop2.rar (80.44 KB, 下载次数: 3)
回复

使用道具 举报

 楼主| 发表于 2015-7-20 10:47 | 显示全部楼层
爱疯 发表于 2015-7-20 10:06
Sub test()
    Dim A, B, i, j, s, dat
    With Workbooks.Open(GetPath())

大师,您好
果然是大师,您写的代码一看就是高大上,我都看不懂。
刚才运行了您的代码,非常快捷的达到了需要的效果,非常好。可能是我的表达不够清楚,我的目的是通过代码提取所有满足提取日期的工作表的数据,而您的代码只提取sheet1的,您能修改下代码吗?谢谢
回复

使用道具 举报

发表于 2015-7-20 11:46 | 显示全部楼层
要不你把要提取数据的行,都填为黄色

下班了,只有下午再看了
回复

使用道具 举报

 楼主| 发表于 2015-7-20 13:06 | 显示全部楼层
爱疯 发表于 2015-7-20 11:46
要不你把要提取数据的行,都填为黄色

下班了,只有下午再看了

大师
您好
我将工作簿中的3个工作表需要提取数据的行都设置成黄色了,拜托您看看,谢谢

工作簿-2.zip

101.33 KB, 下载次数: 1

回复

使用道具 举报

发表于 2015-7-20 16:55 | 显示全部楼层
Desktop3.rar (87.13 KB, 下载次数: 2)
回复

使用道具 举报

 楼主| 发表于 2015-7-20 19:05 | 显示全部楼层
爱疯 发表于 2015-7-20 16:55
还是没看懂,怎样才是你希望的结果

实在不好意思,麻烦您了。
我的目的是通过运行代码把数据源工作簿中3个工作表满足日期设定的的数据都提取出来,3个工作表的格式都是一样的。我是刚学VBA,您写的数组代码我真的看不懂,也不知道如何让代码遍历工作簿。您见笑了
回复

使用道具 举报

发表于 2015-7-20 19:31 | 显示全部楼层
1)1楼代码是你自己写的么?我试了,可正常运行。

2)1楼代码并没遍历工作表,所以我只在1楼基础上,增加了判断开始日期,并改用数组。

3)6楼仅从sheets("岛田A47")提取,你看结果对吗?如果不对,就说明下。
回复

使用道具 举报

 楼主| 发表于 2015-7-20 19:52 | 显示全部楼层
爱疯 发表于 2015-7-20 19:31
1)1楼代码是你自己写的么?我试了,可正常运行。

2)1楼代码并没遍历工作表,所以我只在1楼基础上,增加 ...

大师,晚上好
1楼的代码是我写的,遍历是遍历了,但是提取的日期不对,我设定的日期是从6月15日开始,使用了工作表函数MATCH来实现日期的判断,可是运行代码后提取的数据是从7月份开始的,也就是说6月15日后到7月份的数据没有被提取,我搞了很长时间也没有找出原因,所以在论坛上请教大师。
6楼的代码运行很快数据也对,就是只提取了sheet1的数据,sheet2和sheet3的数据没有提取,我的目的是把所有sheet中从6月15日开始的数据一次性都提取出来。
感谢您的指导
回复

使用道具 举报

发表于 2015-7-20 21:33 | 显示全部楼层    本楼为最佳答案   
Desktop4.rar (90.08 KB, 下载次数: 4)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 02:02 , Processed in 0.403539 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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