Excel 执行While循环以打开文件名中包含变量的多个工作簿

Excel 执行While循环以打开文件名中包含变量的多个工作簿,excel,vba,loops,Excel,Vba,Loops,警告,这是我第一次尝试使用循环语句(但失败了) 我有一个文件夹,里面有很多工作簿,它们的文件名中都有日期。我想创建一个宏,该宏使用用户提供的日期打开所有以该日期命名的工作簿 我当前的循环语句只是一次又一次地重新打开同一个文件,而不是打开名称中包含该日期的所有文件,然后退出循环,即使文件夹中有多个名称中包含该日期的文件。这就是我目前所拥有的 Dim finddate As Variant Dim formatedate As String Dim mypath As String findda

警告,这是我第一次尝试使用循环语句(但失败了)

我有一个文件夹,里面有很多工作簿,它们的文件名中都有日期。我想创建一个宏,该宏使用用户提供的日期打开所有以该日期命名的工作簿

我当前的循环语句只是一次又一次地重新打开同一个文件,而不是打开名称中包含该日期的所有文件,然后退出循环,即使文件夹中有多个名称中包含该日期的文件。这就是我目前所拥有的

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
Dim finddate作为变量
格式化为字符串的Dim
将mypath设置为字符串
finddate=InputBox(“输入显示记录的日期”)
范围(“A1”)=finddate
formatedate=ActiveSheet.Range(“A2”).值
mypath=“filepathhere\??”和formattedate&“.xlsm”
在mypath“”时执行此操作
工作簿。打开的文件名:=mypath
环

A2格式的公式可以格式化用户输入的任何日期,以匹配文件的命名方式。我还需要做些什么来告诉它从第一个文件开始,并在文件夹中查找其他文件?此外,我不确定如何退出循环,因此一旦它(希望)打开带有该日期的文件,它将停止在文件夹中循环。

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

       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

在调用
循环
之前,您需要确保
formattedate
更改了它的值,因此它可能看起来像这样:

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
Dim finddate作为变量
格式化为字符串的Dim
将mypath设置为字符串
finddate=InputBox(“输入显示记录的日期”)
范围(“A1”)=finddate
在mypath“”时执行此操作
formatedate=ActiveSheet.Range(“A2”).值
mypath=“filepathhere\??”和formattedate&“.xlsm”
工作簿。打开的文件名:=mypath
'重要的是,在此处插入一些代码,以保证
'单元格A1和/或A2具有不同的文件名,否则,
“它将不断地传递相同的值
环
您必须以某种方式保证
A2
中的值。此外,您必须保证最终
mypath=”“
否则循环将永远不会结束。关于你的问题的描述,我并不完全清楚,但我认为主要的概念是:

在调用
循环之前,始终在
条件更改时将变量放入
,并始终确保最终满足中断循环的条件


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

按照当前的设置方式,您的变量“mypath”是一个常量字符串,这可以解释您遇到的问题。一种方法是获取文件夹中的文件计数(FileCount),然后让x=1到FileCount检查您的“FindDate”是否正在插入并打开(如果为true),否则,下一个x(计算下一个文件名)