ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请教dir(mypath&"*.xls")的问题?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-11-8 07:54 | 显示全部楼层
按道理来讲是不应该漏掉的呀!可否提供一下附件,看是什么原因。

TA的精华主题

TA的得分主题

发表于 2018-6-4 10:45 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-8-31 09:53 | 显示全部楼层
楼主解决了吗?我跟你一样的问题,每次都会漏掉一个,而且文件名后缀我都是"*.xls*"

TA的精华主题

TA的得分主题

发表于 2018-8-31 10:05 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-8-31 10:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
从整体结构上进行一下,方便调试

1、读取出你要的文件,将路径及文件名存入数组
2、循环读取数组,进行操作

这样,你的问题可以在第一步进行调试!

TA的精华主题

TA的得分主题

发表于 2018-8-31 10:15 | 显示全部楼层
擎、天 发表于 2018-8-31 10:05
http://club.excelhome.net/thread-1384804-1-1.html

谢谢,但是我代码跟你不一样,没有加入字典那句,我是直接获取文件,然后一个个打开读取

TA的精华主题

TA的得分主题

发表于 2018-8-31 10:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
michaelaa 发表于 2018-8-31 10:15
谢谢,但是我代码跟你不一样,没有加入字典那句,我是直接获取文件,然后一个个打开读取

意思是 最后  **=dir 要写最后 就不会漏

TA的精华主题

TA的得分主题

发表于 2018-8-31 11:02 | 显示全部楼层
擎、天 发表于 2018-8-31 10:18
意思是 最后  **=dir 要写最后 就不会漏

老师,我MyFilename=Dir后面直接是打开文件了,所以写在后面是不起作用的。
Set Wb = Workbooks.Open(My_Path & MyFilename, UpdateLinks:=0, corruptload:=xlExtractData)
Workbooks(MyFilename).Activate

TA的精华主题

TA的得分主题

发表于 2018-8-31 11:11 | 显示全部楼层
  1. Dim strFileDir() As String
  2. Dim lngCurDirID As Long
  3. Dim lDirCount As Long, lFileCount As Long

  4. '测试用例
  5. Sub Test()
  6.     Dim sPath As String, strFiles() As String
  7.     sPath = ThisWorkbook.Path
  8.    
  9.     lDirCount = 0: lFileCount = 0: lngCurDirID = 0
  10.     '查找当前目录及子目录下,后缀为【xls*】的文件
  11.     If search(sPath, strFiles, "xls") = True Then
  12.         MsgBox "共找到 " & UBound(strFiles) & " 个文件 "
  13.         'strFiles 就是储存 文件路径及名称的 数组
  14.     Else
  15.         MsgBox "没有找到文件或搜索失败"
  16.     End If
  17. End Sub

  18. '查找指定路径及其子文件下 的所有文件,可指定特定的后缀
  19. Public Function search(ByVal strPath As String, ByRef strFileName() As String, Optional strExtName As String = "") As Boolean
  20.     Dim strFile As String, blIsFind As Boolean
  21.     On Error GoTo MyErr
  22.     If Right(strPath, 1) <> "" Then strPath = strPath + ""
  23.     strFile = Dir(strPath, vbDirectory Or vbHidden Or vbNormal Or vbReadOnly)
  24.     While strFile <> "" '搜索当前目录
  25.             DoEvents
  26.             If (GetAttr(strPath + strFile) And vbDirectory) = vbDirectory Then '如果找到的是目录
  27.                If strFile <> "." And strFile <> ".." Then '排除掉父目录(..)和当前目录(.)
  28.                    lDirCount = lDirCount + 1 '将目录数增1
  29.                    ReDim Preserve strFileDir(1 To lDirCount) As String
  30.                    strFileDir(lDirCount) = strPath & strFile  '用动态数组保存当前目录名
  31.                End If
  32.             Else
  33.                 '判断后缀是否相同
  34.                 blIsFind = False
  35.                 If strExtName = "" Then
  36.                     blIsFind = True
  37.                 ElseIf LCase(GetExtName(strPath + strFile)) Like LCase(strExtName) Then
  38.                     blIsFind = True
  39.                 End If
  40.                 If blIsFind Then '后缀相同
  41.                     lFileCount = lFileCount + 1 '将文件数增1
  42.                     ReDim Preserve strFileName(1 To lFileCount) As String
  43.                     strFileName(lFileCount) = strPath + strFile  '用动态数组保存当前文件名
  44.                 End If
  45.             End If
  46.             strFile = Dir
  47.     Wend
  48.    
  49.     lngCurDirID = lngCurDirID + 1
  50.     If lngCurDirID <= lDirCount Then Call search(strFileDir(lngCurDirID), strFileName, strExtName) '递归搜索子目录
  51.     search = True '搜索成功
  52.     Exit Function
  53. MyErr:
  54.     search = False '搜索失败
  55. End Function

  56. '获取后缀
  57. Public Function GetExtName(strFileName As String) As String
  58.     Dim strTmp As String
  59.     Dim strByte As String
  60.     Dim i As Long
  61.     For i = Len(strFileName) To 1 Step -1
  62.          strByte = Mid(strFileName, i, 1)
  63.          If strByte <> "." Then
  64.             strTmp = strByte + strTmp
  65.         Else
  66.           Exit For
  67.         End If
  68.     Next i
  69.     GetExtName = strTmp
  70. End Function


复制代码

TA的精华主题

TA的得分主题

发表于 2018-8-31 14:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 michaelaa 于 2018-8-31 15:42 编辑
擎、天 发表于 2018-8-31 10:18
意思是 最后  **=dir 要写最后 就不会漏

好像搞不定这个问题。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-13 07:58 , Processed in 0.023544 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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