Использование RegExp для замены значений элемента управления формы в строку в MSAccess - PullRequest
1 голос
/ 03 декабря 2011

Я показываю сообщение электронной почты в Outlook, используя значения из формы MS Access.Я хотел бы, чтобы пользователи имели возможность изменять шаблон сообщения без необходимости редактировать код, поэтому я пытаюсь создавать шаблоны в текстовом формате.В текстовом формате я окружаю имена элементов управления формой %%.Затем в обработчике кнопки _Click формы доступа после чтения в текстовом файле я использовал объект RegExp:

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

для замены (%%) ([A-Za-z0-9]+) (%%) с "& $ 2 &".Была надежда, что это позволит получить значения элементов управления из формы.

Затем я отображаю сообщение в Outlook, используя

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 Ответ

2 голосов
/ 04 декабря 2011

I думаю вы ищете что-то вроде приведенного ниже кода.

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

Я проверил это в пользовательской форме Excel с двумя элементами управления textbox: TextBox1 и TextBox2

...