VBA宏上的运行时错误

时间:2015-06-19 20:46:45

标签: regex excel vba excel-vba runtime-error

我正在使用VBA代码从Outlook电子邮件中获取文本并将其放入我已设置的Excel工作表中。我正在使用Excel 2010.我的电子邮件包含 以下信息:

公司:ABC公司
 上课时间:2013-10-29至2014-10-22

我已设置For With循环以浏览电子邮件,并在A栏中插入公司名称,B栏中的第一个日期(2013-10-29)和另一个日期(2014-10-22)在列C中。当我运行我的代码时,我收到一个错误,指出:运行时错误5:以下代码行上的无效过程调用或参数: vText2 = Trim(M.SubMatches(2))

你可以告诉我我做错了什么。我的部分代码如下。如果我需要提供任何其他信息,请告诉我。

sText = olItem.Body

Set Reg1 = CreateObject("VBScript.RegExp")

For i = 1 To 3

With Reg1
Select Case i
Case 1
.Pattern(Company\s[:]+\s(\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*)\n)"
.Global = False
Case 2
.Pattern = "(Class Period\s*[:]+\s*([\d-\s]*))"
.Global = False
Case 3
.Pattern = "(through+\s*([\d-\s]*))"
.Global = False
End Select

End With

If Reg1.Test(sText) Then

Set M1 = Reg1.Execute(sText)
For Each M In M1
vText = Trim(M.SubMatches(1))
vText2 = Trim(M.SubMatches(2))
vText3 = Trim(M.SubMatches(3))
Next
End If
Next i

xlSheet.Range("A" & rCount) = vText
xlSheet.Range("B" & rCount) = vText2
xlSheet.Range("C" & rCount) = vText3

xlWB.Close 1

1 个答案:

答案 0 :(得分:4)

错误是说你给它的参数(索引)对SubMatches集合无效,因为它超过了集合中的项目数。

还要记住SubMatches索引从“0”开始。我假设你故意跳过第一个项目,转而支持集合中的第二到第四项。

我认为你希望每次运行for循环时都将匹配添加到集合中。事实并非如此。新匹配正在替换旧匹配,因此您一次只能使用一个结果。

尝试这样的事情:

create index idx_productData_productList on productData(productList);

请注意,我必须更改您的公司正则表达式才能使其正常工作。你原来的那个不适合我。