我目前正在开发一个VBA脚本,用于从两个不同的文件中加载4个列的内容。我希望脚本能够使用名称上的正则表达式查找文件。我知道在我的两个文件的标题中,我必须有“XM7”或“XM8”。所以我希望从这些文件加载列。这是我的代码:
Sub charge_fiche()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Dim titre As String
Dim wbk1 As Workbook
Dim wbk2 As Workbook
Dim wbk3 As Workbook
Dim Chemin As String
Chemin = ThisWorkbook.Path
titre2 = "run2_tps_nuit_xm7_01062016"
titre3 = "run2_tps_nuit_xm8_01062016"
Set wbk1 = ThisWorkbook
Set wbk2 = Workbooks.Open(Chemin & "\" & titre2) ' jouvre le classeur (titre)
Set wbk3 = Workbooks.Open(Chemin & "\" & titre3) ' jouvre le classeur (titre)
wbk1.Sheets(1).Range("A1:A1000").Value = wbk2.Sheets(1).Range("B1:B1000").Value
wbk1.Sheets(1).Range("B1:B1000").Value = wbk2.Sheets(1).Range("H1:H1000").Value
wbk1.Sheets(1).Range("C1:C1000").Value = wbk2.Sheets(1).Range("L1:L1000").Value
wbk1.Sheets(1).Range("D1:D1000").Value = wbk2.Sheets(1).Range("M1:M1000").Value
wbk1.Sheets(1).Range("E1:E1000").Value = wbk3.Sheets(1).Range("B1:B1000").Value
wbk1.Sheets(1).Range("F1:F1000").Value = wbk3.Sheets(1).Range("H1:H1000").Value
wbk1.Sheets(1).Range("G1:G1000").Value = wbk3.Sheets(1).Range("L1:L1000").Value
wbk1.Sheets(1).Range("H1:H1000").Value = wbk3.Sheets(1).Range("M1:M1000").Value
wbk2.Close
wbk3.Close
它现在有效,但我希望用
之类的东西替换“titre2”和“titre3”这一行titre2 = "\wxm7\w.xls"
或
titre3 = [0-9a-zA-Z_]*" & xm8 & " [0-9a-zA-Z_]* & ".xls"
但它们都不起作用。你有什么想法吗?
答案 0 :(得分:0)
您可以使用Dir
获取带通配符的文件名
titre2 = "*xm7*.xls"
filename = Dir(Chemin & "\" & titre2)
如果没有匹配的文件,Dir
将返回""
。如果再次调用Dir
而没有参数,则返回下一个匹配的文件名。据我所知,它不支持正则表达式。
编辑:你应该检查Dir
是否找到了什么,然后打开文件
If filename <> "" Then
Workbooks.Open(Chemin & "\" & filename)
Else
'some error handling here
Else If
您必须再次指定路径,因为Dir
仅返回文件名,而不是整个路径。
答案 1 :(得分:0)
好,所以这适用于Dir,但你必须指定文件路径2次:
Dim wbk3 As Workbook 'fichier XM8
Dim Chemin As String
Chemin = ThisWorkbook.Path 'on trouve le chemin du fichier actuel
titre3 = "*xm8*.xls" 'nom du fichier XM8
filename3 = Dir(Chemin & "\" & titre3)
Set wbk3 = Workbooks.Open(Chemin & "\" & filename3) ' jouvre le classeur XM8