使用RegEx将表单控件值替换为MS Access中的字符串

时间:2011-12-02 21:23:15

标签: regex ms-access vba outlook

我正在使用MS Access表单中的值在Outlook中显示电子邮件。我希望用户能够修改消息模板而无需编辑代码,因此我尝试以纯文本格式创建模板。在文本格式中,我用%%包围表单控件名称。然后在Access窗体的按钮_Click事件处理程序中,在读入文本文件后,我使用了一个RegExp对象:

Dim re As New RegExp
re.Pattern = "(%%)([A-Za-z0-9]+)(%%)"
re.Global = True
msg = re.Replace(template, " "" & $2 & "" ")

用“& $ 2&”替换(%%)([A-Za-z0-9] +)(%%)。希望这将从表单中获取控件的值。

然后我使用

在outlook中显示msg
Dim objOutlook As Outlook.Application
Dim objEmail As Outlook.MailItem
Set objOutlook = CreateObject("Outlook.application")
Set objEmail = objOutlook.CreateItem(olMailItem)

With objEmail
    .To = emailAdd
    .body = msg
    .Display
End With

不幸的是,“& controlName.value&”在消息中显示而不是控件的值。此外,虽然.Global设置为True,但只替换第一个匹配。

如何让VBA执行全局替换,并填写控件的值?

1 个答案:

答案 0 :(得分:2)

认为你正在寻找类似下面代码的东西。

Sub Tester()

Dim template As String, msg As String
Dim re As Object, matches As Object, match As Object


    Set re = CreateObject("vbscript.regexp")

    re.Pattern = "(%%)([A-Za-z0-9]+)(%%)"
    re.MultiLine = True
    re.Global = True

    template = "The %%TextBox1%% brown " & vbCrLf & _
                "jumped %%TextBox2%% the lazy dog"

    Set matches = re.Execute(template)
    For Each match In matches
        Debug.Print match, match.submatches(1)
        template = Replace(template, match, Me.Controls(match.submatches(1)))
    Next match

    MsgBox template

End Sub

我在带有两个文本框控件“TextBox1”和“TextBox2”的Excel用户窗体中对此进行了测试