使用循环来打开文件名中带有变量的多个工作簿

时间:2018-06-01 21:40:31

标签: excel vba loops

公平警告,这是我第一次(并且失败)尝试使用循环语句。

我有一个包含大量工作簿的文件夹,这些工作簿都将日期作为文件名的一部分。我想创建一个宏,它使用用户提供的日期打开名称中包含该日期的所有工作簿。

我当前的Loop语句只是一遍又一遍地重新打开同一个文件,而不是打开名称中该日期的所有文件,然后退出循环,即使文件夹中有多个文件与该日期相同在名字里。这就是我到目前为止......

Dim finddate As Variant
Dim formatedate As String
Dim mypath As String


finddate = InputBox("Enter Date to Show Records")
Range("A1") = finddate
formatedate = ActiveSheet.Range("A2").Value


mypath = "filepathhere\???????" & formatedate & ".xlsm"

Do While mypath <> ""
Workbooks.Open Filename:=mypath
Loop

A2中的公式格式化用户输入的任何日期以匹配文件的命名方式。还有什么我需要做的就是告诉它从第一个文件继续前进并在文件夹中查找其他文件吗?此外,我不知道如何退出循环,所以一旦它(希望)打开那个日期的文件,它就会停止在文件夹中循环。

2 个答案:

答案 0 :(得分:1)

您需要保证formatedate在调用Loop之前更改其值,因此它可能看起来像这样:

Dim finddate As Variant
Dim formatedate As String
Dim mypath As String

finddate = InputBox("Enter Date to Show Records")    
Range("A1") = finddate

Do While mypath <> ""

        formatedate = ActiveSheet.Range("A2").Value
        mypath = "filepathhere\???????" & formatedate & ".xlsm"
        Workbooks.Open Filename:=mypath

        'IMPORTANT, insert some code here that garantees that
        'cell A1 and/or A2 has a different file name, otherwise,
        'it will keep passing the same value over and over

Loop

你必须以某种方式保证A2中的价值。此外,你必须保证最终mypath = ""否则循环永远不会结束。关于你的问题描述的一些事情我并不完全清楚,但我认为主要的概念是:

在调用While之前,始终在Loop条件更改中使用变量,并始终确保最终满足打破循环的条件。

除此之外,如果不完全符合工作簿的结构,我认为你可以调整答案。

答案 1 :(得分:0)

一个简单的解决方法是在使用后删除文件。当然你应该在其他地方备份你的文件。 通常我会先重命名文件。

       Set fso = CreateObject("Scripting.FileSystemObject")
       Set fsoFolder = fso.getfolder(filePath)
       fsoFile.Name = "d:\folder\blablabla.xls"
        ' do your things

       FileSystem.Kill "d:\folder\blablabla.xls" 'delete file