VBA循环遍历文件夹中的非图案文件(寻求意见)[编辑]

时间:2018-04-25 18:06:32

标签: excel vba excel-vba

我在这里寻求任何建议或意见,因为我想遍历文件夹中的每个excel文件。从我附图中可以看出,我的excel文件在文件类型(.xls<> .xlsx)和文件名(尤其是2018)上都不同。我还需要遍历"修订"或"修订"文件也是如此,因为下次可能会修改任何文件。

是的,我也对此做了一些研究。我的理解是我需要在构建VBA循环之前将所有文件名修改为模式。起初,我考虑过分解所有文件名并将其放回模式形式,但听起来太理想化了。另一种方法是使用每个文件中的日期来标记工作簿名称,但我再次发现这些日期具有不同的样式。某些文件使用字符串标记日期,例如" 2012年1月和#34;或" 2014年3月",而其他人使用日期表格,如" 19/08/2013"。

因此,如果有人可以建议我,我将不胜感激;

  1. 如何在同一个VBA中处理不同的文件名(.xls和.xlsx)?
  2. 我应该如何处理这些不同的文件名(某些文件有"修改后#34;后面;有些文件没有" - """"和日期;有些使用月份名称而不是数字)?它们是我忽略的任何模式吗?
  3. 请注意我只是一个新手VBA编码器,所以如果你的答案带有解释或任何类型的例子,那将会很棒。

    非常感谢。

    -------------------------------------------- - - - - - - [编辑] - - - - - - - - - - - - - - - - - - --------------------------------

    首先抱歉我之前的解释不好。我提供的信息太少,无法理解整体情况。让我们重新开始吧。

    1. 我的数据是关于从权威机构释放的钢铁消耗量 每个月。我的任务是收集所有这些数据(例如 每个数据的生产,进口,出口和消费 行)并生成时间序列模式(请参阅附件 excel screen)xxx

    2. 因为这些数据可能会随时修改,因此我就是这样 决定每个月每次下载所有这些文件(一个 每个月的文件)。除了那些修改过的文件外 权限将意外地重命名这些文件,例如,来自 " Cons 201601.xlsx"进入"缺点201601 - modified.xlsx)"。这让我 更难以解决这个问题(请参阅附件 参考)。 enter image description here

    3. 此外,此权限似乎与文件命名有关 过去他们有不同的文件名模式 现在的。示例如下表所示;

      Cons 201701-Revised.xlsx 
      Cons 201710-Revised1.xlsx 
      Cons 201711.xlsx
      Cons-200902.xls 
      Cons-201212_revise.xls 
      Cons-201401-revised.xls

    4. 我提到上面的文件名是为了创建一个循环的VBA 这些文件,选择一些内容并粘贴到另一个工作簿中 按时间顺序排列。这意味着我不能在执行时使用"循环 而功能"在我的VBA中。起初我决定使用两个整数 变量,两者都设置了数年和数月 (例如For i = 2009 to 2018For j = 1 to 12)以创建文件名系统(例如filename = "Cons" & "-" & i & j)。但, 正如我之前所说,当局没有图案的名称 阻止我创造这种循环。

    5. 我还尝试使用图1中单元格B2中的日期来标记 date是为了创建我之前已解释过的循环。 然而,再次,当局迄今未使用相同的模式 一个月和一年。在我检查了很多文件后,这些都是例子 单元格B2中的日期样式

      January 2012 (string) 
      February 2009 (string) 
      Jan-16 (1/1/2016 date in custom format) 

    6. 鉴于上述限制,你们能再次建议我任何可能吗? 创建按时间顺序循环的方法,以便将数据复制并粘贴到另一个 工作簿为每个产品形成一组时间序列数据?

    7. 感谢您的帮助:)

2 个答案:

答案 0 :(得分:2)

首先,使用FileSystemObject(在您的VBA项目中包含对Microsoft Scripting Runtime的引用),其中包含一些有用的功能。您可以随时编写自己的代码,但为什么要在这种情况下重新发明轮子?

今天早上没有时间编写代码,所以这里是伪代码:

Open a Folder using your known filepath
Loop through all the files in the Folder (For each f in Folder.Files
    extract the date code from your filename (e.g. using RegEx)
    Add to a collection (e.g. array or Dictionary item) of the filename and the extracted date code (your key).
(end loop)
Sort your collection based on the extracted date code

现在为您提供了一个有序的文件列表,您可以依次打开这些文件并提取数据。另外一个好处是,集合中的密钥为您提供了一致的日期表示,您可以将其用作整理信息中的索引。

答案 1 :(得分:0)

如果你只想循环浏览文件夹中的所有文件,请使用:

   dim file as variant
       file = Dir("<PathToFolder>")

        While (file <> "")
        'Your logic here
        file = Dir
        wend