如何在 VBA 中打开具有相似名称的文件?
Posted
技术标签:
【中文标题】如何在 VBA 中打开具有相似名称的文件?【英文标题】:How to open a file with similar name in VBA? 【发布时间】:2019-07-25 09:31:39 【问题描述】:我正在尝试使用 VBA 打开文件夹中的文件,条件是它们的名称与其他文件的名称相似,而其他文件的名称也将被打开。
使用以下代码,我从文件夹 1 打开名称为“1_FirmA_v1.0”、“1_FrimB_v1.0”的文件,然后我对这些文件执行一些命令。
我的问题是我想从 folder2 打开文件,只要它们的名称与循环中 openend 的 folder1 中的文件的名称相似。 folder2 中文件的名称是“2_FirmA_v1.1”、“2_FirmB_v1.5”、...。因此,当我从文件夹 1 打开“1_FirmA_v1.0”时,我想从文件夹 2 打开“2_FirmA_v1.1”。问题是我不知道如何以动态搜索文件名的方式放置代码的第二个文件夹,因为不清楚该文件的确切名称。这是我迄今为止尝试过的:
Sub Makro1()
Dim x As Workbook
Dim y As Workbook
Dim myPath, fname
myPath = "C:\Desktop\"
Set fso = CreateObject("Scripting.FileSystemObject")
Set fldr = fso.GetFolder("C:\TEST\")
fname = Dir(fldr & "\1*")
'fname2 = myPath2 & "Daten" & Mid(fname, Len(fname) - 12, Len(fname) - 25) & "v2.1test.xlsx"
'fname3 = myPath3 & "Daten" & Mid(fname, Len(fname) - 12, Len(fname) - 25) & "v2.0.xlsx"
Do While fname <> ""
Set x = Workbooks.Open(fldr & fname)
Set y = Workbooks.Open(myPath & "2" & Mid(fname, Len(fname) - 31, Len(fname) - 25) & "v*")
x.Activate
fname = Dir
Loop
不幸的是,我似乎无法在命令 workbooks.open 中使用“*”。有人知道另一种处理方式吗? 最好的问候
【问题讨论】:
【参考方案1】:好的,我会开始回答,我们会看看如何进行。
首先,仅仅因为它在很多方面都更好,设置一个对Windows.Scripting
的引用,然后将你的fso
声明为
Dim fso as Scripting.FileSystemObject
Set fso = New Scripting.FileSystemObject
因为这将为您提供智能感知并使事情变得更容易。
就您的通配符而言,您需要缩小范围。假设我们正在查找下划线之间的字符串,在本例中为“FirmA”。您需要查看文件夹中的文件,直到找到它。
Dim fldr as Scripting.Folder 'again, gives you the intelliSense
Set fldr = fso.GetFolder("C:\TEST\")
Dim fi as Scripting.File
For Each fi in fldr.Files
If fi.Name Like "*FirmA*" Then '(hardcoded, but you will replace)
<your code>
End if
Next
如何提取“FirmA”比较棘手。您将需要提供有关文件名外观的更多背景信息。需要有某种形式的模式才能工作。
【讨论】:
非常感谢您的回答!文件夹 1 中文件的文件名如下所示:“Data_FirmA_v1.0”(文件名只是公司名称不同)。在与文件夹1中打开的名称相似的情况下应打开的另一个文件夹中的名称如下:'Rating_FirmA_v1.x'(文件名不一定是相同的版本,所以即使'Data_FirmA_v1. 0' 我要打开的其他文件可能是 'Rating_FirmA_v1.1' 或其他版本) 这应该足够你解决问题了。需要注意的一件事是临时 Excel 文件。您可能想要过滤掉任何带有波浪号~
的文件名,因为这会导致问题。以上是关于如何在 VBA 中打开具有相似名称的文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 pandas 从文件夹中读取和组合具有相似名称的 .csv 文件