有没有办法将正则表达式捕获直接放入数组而不介入MatchCollection
?
我想要的是:Set myArray = myRegEx.Execute(myString)(0).SubMatches
或者至少,如果我知道可以捕获的数量,那么就可以"绑定"返回值:(myFirst, mySecond) = myRegEx.Execute(myString)(0).SubMatches
我知道SubMatches
的使用已经完成,我只是想找到一种方法来完成对干预MatchCollection
的规避。
答案 0 :(得分:1)
好的,也许这会让你开始。
从Outlook宏到Excel宏不是我会做的事情。相反,我建议将一个应用程序绑定到另一个应用程序,并对暴露给VBProject的两个对象模型引用执行任何操作。
但无论如何,你可以按照你描述的方式去做,这应该是一个例子。
此示例假定Excel已打开,并且在该Excel实例中也打开包含该宏的工作簿。在Excel中,我创建了一个接受泛型Object
参数的简单过程。我这样做是为了避免需要显式引用Microsoft VBScript Regular Expressions库。
这样,Excel中有一个宏,它接受(实际上是)一个对象变量。在这种情况下,它将成为SubMatches
对象。 (确保将#9; Book9"更改为工作簿的名称,或根据需要进行修改以允许用户选择/打开工作簿等。)
Sub excelmacro(SM As Object)
MsgBox SM.Count & " submatches"
End Sub
现在,我有一个非常简单的Outlook过程来测试它并验证它是否有效。在这种情况下,将没有子匹配,因此上面的Excel过程将显示消息框0 submatches
。
Sub test_to_Excel()
'### Requires reference to Microsoft VBScript Regular Expressions 5.0 ###
Dim re As New RegExp
Dim mySubmatches As SubMatches
Dim xl As Object 'Excel.Application
Dim wb As Object 'Excel.Workbook
With re
.Global = True
.Pattern = "asd"
'## Now get a handle on the particular indexed match.submatches()
Set mySubmatches = .Execute("asdfkjasdfj; asdl asdfklwedrewn adg")(1).SubMatches
End With
'## Now we can send to Excel procedure:
'## Assumes Excel is already running and the file which contains the macro
' is already open
Set xl = GetObject(, "Excel.Application")
Set wb = xl.Workbooks("Book9")
'## This tells the Excel application to run a named procedure
' and passes the variable argument(s) to that procedure
xl.Application.Run "excelmacro", mySubmatches
End Sub