关闭具有部分文件名的工作簿



我有 vba 非常适合根据满足的部分标准打开文件。 但是当我打开多个文件时,通过以下VBA打开的文件在完成后保持打开状态,并且我无法将工作簿召回以关闭它,看到它打开了满足的部分参数。 在快速摘要中打开副本(打开文件(, 然后在另一个 VBA 中,我复制该数据,并将其粘贴到另一个工作簿(在另一个 VBA 中完成(完成后,我想恢复该工作簿并关闭它。如果我执行 activeWorkbook.Close,它会关闭我正在处理的我不想要的工作簿。帮助我卡住!

Sub OpenCopy()
Dim sPath As String
Dim sPartial As String
Dim sFName As String
sPath = "C:" ' <<<<< change accordingly
sPartial = "AAA_" & Year(Now) & IIf(Len(Month(Now)) = 1, "0" & Month(Now), Month(Now)) & 
IIf(Len(Day(Now)) = 1, "0" & Day(Now), Day(Now)) & "*.txt"
sFName = Dir(sPath & sPartial)
If Len(sFName) > 0 Then
Workbooks.OpenText sPath & sFName
Else
MsgBox "File not found.", vbExclamationEnd If
End Sub

您的问题出在"另一个 VBA"中。尝试强制您的项目遵守 VBA 工作的规则。

这意味着承认只有一个 VBA。那个 VBA 有程序。您可以手动调用这些过程(您可能会这样做,这会导致您谈论"另一个 VBA"(,也可以创建一个Main过程来一个接一个地调用它们。这样做的好处是,您可以在Main中声明对象和变量,这些对象和变量可用于所有过程,并作为参数传递。

因此,您将打开一个文件,通过其名称的缩写描述找到它。您可以将此文件分配给变量,例如File1,现在您可以从项目中的任何位置引用它以读取或复制以及关闭它。您永远不需要知道它的名称,因为您通过分配给它的变量名称来引用它。VBA 将确保名称是唯一的。

作为替代方法,您当然可以在打开文件后从文件中获取文件的完整名称,然后按其完整名称关闭文件。事实上,代码中的Dir函数确实提供了完整的名称。因此,您甚至可以在打开文件之前从那里获取它。正如我所说,问题是名称将在"另一个 VBA"中,这是 VBA 不支持的想法。

但是,假设您至少目前想继续采用零碎的方法,您是否无法通过最初导致您找到它的相同部分细节来识别文件?我认为您同时打开的文件的名称在"AAA"部分中会有所不同。因此,If Instr(ActiveWorkbook.Name, "AAA") = 1 Then将标识一个文件。您可以使用For Each Wb In Application.Workbooks遍历所有打开的工作簿并检查每个名称。您可能需要添加一个输入框才能再次输入"AAA",因为无法使不同的"VBA"相互通信。

顺便说一下,您可以使用VBA的Format函数简化您漂亮的部分字符串。试试这个。

sPartial = "AAA_" & format(date, "yyyymmdd")

最新更新