正则表达式从不同文件加载数据

时间:2016-07-08 12:34:47

标签: excel vba

我目前正在开发一个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"

但它们都不起作用。你有什么想法吗?

2 个答案:

答案 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