Excel精英培训网

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

[已解决]vba遍历文件夹选取数据

[复制链接]
发表于 2013-6-27 21:36 | 显示全部楼层 |阅读模式
本帖最后由 yuan1987 于 2013-9-30 23:04 编辑

遍历文件夹,查找名为“基本情况表”的Excel文件,取查找到“基本情况表”中“开始”表的的A2,B2单元格数据,依次填充到归类表中统计表的A列,B列,最终结果见附件
最佳答案
2013-6-28 09:00
  1. Sub 汇总()
  2.     Application.ScreenUpdating = False
  3.     Dim lj As String, m, n
  4.     Dim dirname As String
  5.     Dim nm As String
  6.     Dim wb As Workbook
  7.     Dim i As Integer

  8.     On Error Resume Next

  9.     With Application
  10.         .ScreenUpdating = False
  11.         .DisplayAlerts = False
  12.         .EnableEvents = False
  13.         .Calculation = xlCalculationManual
  14.     End With

  15.     lj = ThisWorkbook.Path
  16.     nm = ThisWorkbook.Name
  17.     dirname = Dir(lj & "\*.xlsx")
  18.     Cells.Clear
  19.     Do While dirname <> ""
  20.         If dirname <> nm Then
  21.             Set wb = Workbooks.Open(Filename:=lj & "" & dirname, UpdateLinks:=False, ReadOnly:=True)
  22.             If Not wb Is Nothing Then
  23.                 With wb
  24.                     If Len(.Sheets("开始").Name) = 0 Then
  25.                     Else
  26.                         i = .Sheets("开始").Range("A65536").End(xlUp).Row
  27.                         ThisWorkbook.Sheets("统计表").Cells(m, 1) = .Sheets("开始").Cells(2, 1).Value
  28.                         ThisWorkbook.Sheets("统计表").Cells(n, 2) = .Sheets("开始").Cells(2, 1).Value
  29.                     End If
  30.                     .Close False
  31.                 End With
  32.                 Set wb = Nothing
  33.             End If
  34.         End If
  35.         dirname = Dir
  36.     Loop
  37.     With Application
  38.         .ScreenUpdating = True
  39.         .DisplayAlerts = True
  40.         .EnableEvents = True
  41.         .Calculation = xlCalculationAutomatic
  42.     End With
  43.     MsgBox "OK"
  44. End Sub
复制代码
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-6-27 22:06 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2013-6-27 22:48 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2013-6-27 22:57 | 显示全部楼层
Sub 汇总()
    Application.ScreenUpdating = False
    Dim lj As String, m, n
    Dim dirname As String
    Dim nm As String
    Dim i As Integer
    lj = ActiveWorkbook.Path   
    nm = ActiveWorkbook.Name  
    dirname = Dir(lj & "\基本情况表.xlsx")   
    Cells.Clear              
    Do While dirname <> ""   
        If dirname <> nm Then  
            Workbooks.Open Filename:=lj & "\" & dirname  
            i = Workbooks(dirname).Sheets("开始").Range("A65536").End(xlUp).Row
            Sheets("统计表").Activate
         
             Sheets("统计表").Cells(m, 1) = Workbooks(dirname).Sheets("开始").Cells(2, 1)
             Sheets("统计表").Cells(n, 2) = Workbooks(dirname).Sheets("开始").Cells(2, 1)
            Workbooks(dirname).Close False   
        End If
        dirname = Dir
    Loop
    Application.ScreenUpdating = True
End Sub
我这样写了些,但是实现不了那个功能啊
回复

使用道具 举报

发表于 2013-6-28 06:46 | 显示全部楼层
    dirname = Dir(lj & "\基本情况表.xlsx")  这里不对。
改成    dirname = Dir(lj & "\*.xlsx")   
你原来的代码只会查找基本情况表.xlsx, 一轮循环后就结束了。
回复

使用道具 举报

发表于 2013-6-28 06:52 | 显示全部楼层
代码中有个问题,m,n的值从何处而来,没见你有赋值。
  1. Sub 汇总()
  2.     Application.ScreenUpdating = False
  3.     Dim lj As String, m, n
  4.     Dim dirname As String
  5.     Dim nm As String
  6.     Dim wb As Workbook
  7.     Dim i As Integer
  8.     lj = ThisWorkbook.Path
  9.     nm = ThisWorkbook.Name
  10.     dirname = Dir(lj & "\*.xlsx")
  11.     Cells.Clear
  12.     Do While dirname <> ""
  13.         If dirname <> nm Then
  14.             Workbooks.Open Filename:=lj & "" & dirname
  15.             With ActiveWorkbook
  16.                 i = .Sheets("开始").Range("A65536").End(xlUp).Row
  17.                 ThisWorkbook.Sheets("统计表").Cells(m, 1) = .Sheets("开始").Cells(2, 1).Value
  18.                 ThisWorkbook.Sheets("统计表").Cells(n, 2) = .Sheets("开始").Cells(2, 1).Value
  19.                 .Close False
  20.             End If
  21.         End If
  22.         dirname = Dir
  23.     Loop
  24.     Application.ScreenUpdating = True
  25. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-6-28 08:15 | 显示全部楼层
本帖最后由 yuan1987 于 2013-6-28 08:22 编辑
hwc2ycy 发表于 2013-6-28 06:52
代码中有个问题,m,n的值从何处而来,没见你有赋值。

出现了这个问题啊
CTGC8V6@TMGV1YZ_)Y$T%ZK.jpg
回复

使用道具 举报

 楼主| 发表于 2013-6-28 08:21 | 显示全部楼层
hwc2ycy 发表于 2013-6-28 06:52
代码中有个问题,m,n的值从何处而来,没见你有赋值。

第一个end if 应该为 end with,但是改完又出现了个问题,但是运行到这一句出错  
  i = .Sheets("开始").Range("A65536").End(xlUp).Row,
Q[`G`{6ZYZ5XEA`UEAV_RMM.jpg
回复

使用道具 举报

发表于 2013-6-28 08:32 | 显示全部楼层
呵呵。错了,应该是END WITH。

你得保证每个工作簿里有开始工作表嘛。


回复

使用道具 举报

发表于 2013-6-28 08:34 | 显示全部楼层
没有这个工作表,那就肯定要报错了。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 21:30 , Processed in 0.864922 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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