ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1508|回复: 8

[求助] 求代码:同一文件名,但不同后缀,VBA调用最新的一个

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-4-4 09:47 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
求助:
在同一个文件夹中,有很多文件。 对于同一文件名,只是后缀不同,在VBA调用的时候,如何调用最新的。比如:

aaa.xls   1/19/2015 12:13  更新
aaa.xlsx  1/19/2015  12:43  更新
aaa.xlsm  2/3/2017    15:43  更新

感谢!

TA的精华主题

TA的得分主题

发表于 2018-4-4 09:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
http://club.excelhome.net/thread-1258425-1-1.html
这个帖子楼主可以参考下,看看修改时间之类的

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-4-4 10:11 | 显示全部楼层
感谢楼上的信息,但确实没有实现我想要的啊,我是想把 basename相同后缀不同的文件当一个,调取最新的一份。

TA的精华主题

TA的得分主题

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

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-4-4 10:21 | 显示全部楼层
lsdongjh 发表于 2018-4-4 10:19
用 FileDateTime 读出 文件的修改日期,然后再操作

再怎么操作,我是新手,不好意思

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-4-4 10:22 | 显示全部楼层
lsdongjh 发表于 2018-4-4 10:19
用 FileDateTime 读出 文件的修改日期,然后再操作

接下来再怎么操作: 我是新手,不好意思

TA的精华主题

TA的得分主题

发表于 2018-4-4 11:38 | 显示全部楼层
  1. Sub Test()
  2.    
  3.     Dim strMaxDateTime As String
  4.     Dim strFileName As String
  5.     Dim lngIndex As Long
  6.    
  7.     Dim strFileNames(1 To 10, 1 To 2) As String 'strFileNames(X,1) 时间,strFileNames(X,2)文件名
  8.    
  9.     '假设你用FileDateTime  处理了文件,并将文件名和时间存入了 strFileNames  数组
  10.    
  11.     For lngIndex = LBound(strFileNames) To UBound(strFileNames)
  12.         If strMaxDateTime = "" Then
  13.             strMaxDateTime = strFileNames(lngIndex, 1)
  14.             strFileName = strFileNames(lngIndex, 2)
  15.         ElseIf CDate(strMaxDateTime) < CDate(strFileNames(lngIndex, 1)) Then
  16.             strMaxDateTime = strFileNames(lngIndex, 1)
  17.             strFileName = strFileNames(lngIndex, 2)
  18.         End If
  19.     Next
  20.    
  21.     MsgBox "最新的文件名是:" & strFileName & ", 创建时间为: " & strMaxDateTime
  22. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-4-4 14:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

我没有用fileDateTime 处理文件,因为不知道怎么弄。(有些不好意思)

情况是这样的,我又一段程序需要将某个文件夹中的5000个excel的对应行全部贴到一个sheet里面去,  在贴的过程中发现一个问题:文件夹中有大概300个文件是重复文件 (前面的文件名base name 完全相同,就是扩展名有的是.xls,有的是.xlsx,有的是 .xlsm),对于重复文件,我不管扩展名,只需要如果base name一样,就取最新的那个就好。

文件夹路径:  D:\Temp File\Customer name\
下面有5000多个excel 文件,其中有大概有300个重复文件
需要一段代码来实现  重复文件取最后的目的。

TA的精华主题

TA的得分主题

发表于 2018-4-4 17:10 | 显示全部楼层
  1. Option Explicit

  2. Sub Test()
  3.     Dim objA As Object
  4.   ' objA就是你要的无重复的文件 字典,KEY是无后缀的文件名,ITEM 是文件全路径全名
  5.     Set objA = FindFileByName("E:\ebook")
  6.    
  7. End Sub


  8. Function FindFileByName(ByVal strPath As String) As Object

  9.     Dim objFileDic As Object
  10.     Dim strFile As String
  11.     Dim strFileName As String
  12.     Dim strDateTime_A As String, strDateTime_B As String
  13.    
  14.     If Right(strPath, 1) <> "" Then strPath = strPath + ""
  15.    
  16.     Set objFileDic = CreateObject("Scripting.Dictionary")
  17.    
  18.     strFile = Dir(strPath, vbDirectory Or vbHidden Or vbNormal Or vbReadOnly)
  19.     While strFile <> ""
  20.         DoEvents
  21.         If (GetAttr(strPath + strFile) And vbDirectory) <> vbDirectory Then
  22.             strFileName = Split(strFile, ".")(0)
  23.             If objFileDic.Exists(strFileName) Then
  24.                 strDateTime_A = FileDateTime(objFileDic(strFileName))
  25.                 strDateTime_B = FileDateTime(strPath + strFile)
  26.                 If CDate(strDateTime_A) < CDate(strDateTime_B) Then objFileDic(strFileName) = strPath + strFile
  27.             Else
  28.                 objFileDic(strFileName) = strPath + strFile
  29.             End If
  30.             
  31.         End If
  32.         strFile = Dir
  33.     Wend
  34.    
  35.     Set FindFileByName = objFileDic
  36. End Function

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

本版积分规则

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

GMT+8, 2024-6-10 08:41 , Processed in 0.036410 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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