ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 【求助】大佬们,VBA如何循环遍历指定目录下的Excel文件并拼接字符串

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-9-20 10:22 | 显示全部楼层
请仔细核对抄写的代码,初学者常常会抄错的。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-9-20 10:36 | 显示全部楼层
蓝桥玄霜 发表于 2017-9-20 10:22
请仔细核对抄写的代码,初学者常常会抄错的。

额 老师,抄写确实没有错误,我现在用的是2013版本的Excel 要循环遍历的文件是2003版本的并且每个表都是有个模板都有多个sheet页的呢。。。
我若是遍历2016版本的文件都没问题  就2003版本的不行总是提示数组越界

TA的精华主题

TA的得分主题

发表于 2017-9-21 10:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
上面的Call searfile(fp, ".xlsx") 改为
Call searfile(fp, ".xls")
下面一个改为:
Sub searfile(fp As String, fkey As String)
Dim Arr1() As String, i1 As Integer, i2 As Integer, fm
If Right(fp, 1) <> "\" Then fp = fp & "\"
If Len(fkey) < 1 Then fkey = ".xls" '文件类型省略则仅搜索.xls文件
fm = Dir(fp, vbDirectory)
Do While fm <> ""
    If fm <> "." And fm <> ".." Then
        If (GetAttr(fp & fm) And vbDirectory) = vbDirectory Then
            i1 = i1 + 1
            ReDim Preserve Arr1(1 To i1)
            Arr1(i1) = fp & fm
        End If
        If Right(fm, Len(fkey)) = fkey Then
            r = r + 1
            ReDim Preserve Brr(1 To 2, 1 To r)
            Brr(1, r) = fp
            Brr(2, r) = fm
        End If
    End If
    fm = Dir
Loop
For i2 = 1 To i1
  Call searfile(Arr1(i2), fkey)
Next
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-9-21 11:26 | 显示全部楼层
蓝桥玄霜 发表于 2017-9-21 10:27
上面的Call searfile(fp, ".xlsx") 改为
Call searfile(fp, ".xls")
下面一个改为:

额 老师,可不可以同时遍历两种类型的文件呢?

TA的精华主题

TA的得分主题

发表于 2017-9-22 13:29 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-9-26 09:20 | 显示全部楼层
蓝桥玄霜 发表于 2017-9-22 13:29
改为:
Call searfile(fp, ".xls?")

额,不行啊老师,改完了For i = 2 To UBound(Brr, 2) 数组下标越界了 呢,若是 xlsx与xls文件都有的的话仅读取xls的文件呢

TA的精华主题

TA的得分主题

发表于 2017-9-26 10:23 | 显示全部楼层
  1. Sub searfile(fp As String, fkey As String)
  2. Dim Arr1() As String, i1 As Integer, i2 As Integer, fm
  3. If Right(fp, 1) <> "" Then fp = fp & ""
  4. If Len(fkey) < 1 Then fkey = ".xls" '文件类型省略则仅搜索.xls文件
  5. fm = Dir(fp, vbDirectory)
  6. Do While fm <> ""
  7.     If fm <> "." And fm <> ".." Then
  8.         If (GetAttr(fp & fm) And vbDirectory) = vbDirectory Then
  9.             i1 = i1 + 1
  10.             ReDim Preserve Arr1(1 To i1)
  11.             Arr1(i1) = fp & fm
  12.         End If
  13.         If InStr(Split(fm, ".")(1), "xls") Then
  14.             r = r + 1
  15.             ReDim Preserve Brr(1 To 2, 1 To r)
  16.             Brr(1, r) = fp
  17.             Brr(2, r) = fm
  18.         End If
  19.     End If
  20.     fm = Dir
  21. Loop
  22. For i2 = 1 To i1
  23.     Call searfile(Arr1(i2), fkey)
  24. Next
  25. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-9-26 11:41 | 显示全部楼层

老师,改完代码之后 If InStr(Split(fm, ".")(1), "xls") Then  这句话 报数组下标越界了额。。。

TA的精华主题

TA的得分主题

发表于 2017-9-27 10:51 | 显示全部楼层
建议上传Excel表格附件来测试代码。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-9-30 09:32 | 显示全部楼层
蓝桥玄霜 发表于 2017-9-27 10:51
建议上传Excel表格附件来测试代码。

是这样的 我只想遍历A目录下的文件呢,并生成个新的Excel 保存在代码目录下

B.rar

244.16 KB, 下载次数: 8

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

本版积分规则

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

GMT+8, 2024-9-27 20:05 , Processed in 0.047756 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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