使用通配符打开Excel工作簿

11

我想使用通配符打开与我的宏工作簿存储在同一文件夹中的工作簿。该文件夹中有一个名为302113-401yr-r01.xlsm的文件。这是我的代码:

Workbooks.Open filename:=ActiveWorkbook.Path & "\302113*.xlsm"

然而,它告诉我找不到这个文件。有什么建议吗?


1
在路径或文件名中不能使用星号。您需要单独打开每个文件。在SO中搜索“Dir函数”,肯定有很多示例。在这里您也可以找到一些信息。 - Kazimierz Jawor
4个回答

22

我们不能使用通配符打开文件 - 想象一下如果我们能打开文件会发生什么混乱!

您需要使用Dir(ActiveWorkbook.Path & "\302113*.xlsm")循环遍历返回的文件。如果只有一个文件,则只需使用此函数一次:

Dim sFound As String

sFound = Dir(ActiveWorkbook.Path & "\302113*.xlsm")    'the first one found
If sFound <> "" Then
    Workbooks.Open filename:= ActiveWorkbook.Path & "\" & sFound
End If

Dir 函数 :tech on the net


3
"我们无法使用通配符打开文件-想象一下如果我们能这样做会造成多大的混乱!" 真的没错 :) - Siddharth Rout
啊,我明白使用通配符打开文件会有问题。感谢回复! - DanW
1
只有一点注释,除非我错了,似乎DIR函数只返回文件名,而不是路径和文件名。因此,当我在上面的代码中使用Workbooks.Open时,我必须使用:ActiveWorkbook.Path&“\”&sFound。 - DanW
感谢您的回复,我已将此添加到答案中,以防其他人发现它有用。 - Andy G
2
我不明白为什么“混乱”注释会有其他编程语言都支持通配符的感觉,这取决于程序员编写的逻辑,而不是语言。 - FreeSoftwareServers
如果能够基于通配符匹配(正则表达式)轻松地从任何应用程序中打开文件,那么最简单的用户错误(甚至是编码错误)可能会导致数百甚至数千个文件开始打开。(如果我们真的想要,仍然可以实现这样的功能。) - Andy G

3

从我的经验来看,如果在字符串中通配符“*”是最后一个符号并且只有一个文件时,这种方法是有效的。尝试执行以下操作:

Workbooks.Open filename:=ActiveWorkbook.Path & "\302113*"

例如,我正在使用:
Workbooks.Open Filename:="X:\business\2014\Easy*"

它可以正常工作。


2
你可以使用通配符打开文件,但是由于某种原因,只能使用UNC路径。
例如:
Set xlFile = xlObj.WorkBooks.Open("\\yourServerHere\dataAutomation\*.xlsx")

这种方法对我不起作用,请取消我的点赞(它已被锁定)。 - PocketLoan

2

我对Excel的经验还不是很丰富,但以下内容对于使用通配符打开文件名在我的工作中非常有效。此示例要求所有文件都在同一个目录/文件夹中。是的,它相当简单。

Sub using_wildcards_to_open_files_in_excel_vba()

    Dim mypath As String
    Dim sFilename As String

    'Suppose you have three files in a folder
    ' Named blank.xlsx,, ex1_939_account.xlsx,  and ex1_opt 5.xlsx

    'Manually open the blank.xlsx file

    'The following code lines will open the second two files before closing the previously opened file.

    ActiveWorkbook.Activate
    mypath = ActiveWorkbook.Path
    'opening xlsx file with name containing "939" and closing current file
    mypath = mypath & "\*939*.xlsx"
    'MsgBox mypath  'Checking
    sFilename = Dir(mypath)
    'MsgBox sFilename  'Checking

    ActiveWorkbook.Close savechanges:=False
    Workbooks.Open Filename:=sFilename

    ActiveWorkbook.Activate
    mypath = ActiveWorkbook.Path
    'opening xlsx file with name ending in "opt 5" and closing current file
    mypath = mypath & "\*opt 5.xlsx"
    'MsgBox mypath  'Checking
    sFilename = Dir(mypath)
    'MsgBox sFilename  'Checking

    ActiveWorkbook.Close savechanges:=False
    Workbooks.Open Filename:=sFilename

End Sub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接