只打开指定的工作簿

我每天运行这个代码将会影响目录中的每个.xlsx工作簿,但是如果文件名不在“Okay”数组中,我怎么能忽略这个工作簿呢?

这是我目前的语法:

Option Explicit Public Sub OpenExcelInDir() Dim MyFolder As String Dim MyFile As String MyFolder = "C:\ExcelSheets" MyFile = Dir(MyFolder & "\*.xlsx") Do While MyFile <> "" Workbooks.Open Filename:=MyFolder & "\" & MyFile MyFile = Dir Call UpdateAllSheets Loop End Sub 

现在我想改变它,以便我可以声明一个string数组,只打开数组中的工作簿,就像这样:

 Dim goodWB() As String goodWB= Split("ABC123,DEF456,GHI789", ",") 

我想这会做你所要求的。 我添加了一行来testing文件名是否与数组中的文件名匹配。

经testing

 Option Explicit Public Sub OpenExcelInDir() Dim goodWB() As String goodWB = Split("ABC123.xlsx,DEF456.xlsx,GHI789.xlsx", ",") Dim MyFolder As String Dim MyFile As String MyFolder = "C:\ExcelSheets" MyFile = Dir(MyFolder & "\*.xlsx") Do While MyFile <> "" If IsInArray(MyFile, goodWB) Then Workbooks.Open Filename:=MyFolder & "\" & MyFile MyFile = Dir Call UpdateAllSheets End If MyFile = Dir Loop End Sub Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1) End Function 

即使我喜欢IsInArray函数,我认为algorithm是完全没有效率的。 如果在该文件夹中有1000个文件,则只有less数给定的文件名之一匹配时,才会创build1000个临时数组。 此外,我希望在打开一个想要的文件之后,代码不会再对这个名字进行testing(事实并非如此)。 相反,我build议从另一端来看问题:

 Public Sub OpenExcelInDir() Dim goodWB, filename Dim MyFolder As String Dim MyFile As String goodWB = Array("ABC123.xls", "DEF456.xlsx", "GHI789.xlsx") MyFolder = "C:\ExcelSheets" For Each filename In goodWB MyFile = MyFolder & "\" & filename If Len(Dir(MyFile)) > 0 Then Workbooks.Open filename:=MyFile Call UpdateAllSheets End If Next WB End Sub 

这里, Dir()函数用于testing指定文件夹中所需文件名的存在。 作为一个额外的好处,EEM将不会有任何含糊之处,例如他/她的评论中提到的。

 Public Sub OpenExcelInDir() Const kExt As String = ".xlsm" `As extension is fixed it could be defined as a constant to avoid repetition Dim aWbks As Variant, vItm As Variant 'Suggest to define the array in one step choose the form you prefer 'aWbks = Array("ABC123", "DEF456", "GHI789") aWbks = [{"ABC123", "DEF456", "GHI789"}] Dim MyFolder As String Dim MyFile As String MyFolder = "C:\ExcelSheets" MyFile = Dir(MyFolder & "\*" & kExt) Do While MyFile <> "" For Each vItm In aWbks If vItm & kExt = MyFile Then Workbooks.Open Filename:=MyFolder & "\" & MyFile Call UpdateAllSheets Exit For End If: Next MyFile = Dir Loop End Sub