Как получить Selection.Text для чтения displaytext кода поля макросов - PullRequest
0 голосов
/ 25 сентября 2018

У меня возникли проблемы с выяснением этого, и я был бы очень признателен за помощь.Я пытаюсь написать макрос, который использует свойство selection.text в качестве текстового выражения Case.При щелчке по макросу в Microsoft Word, выбранный текст автоматически устанавливается на DisplayText.Этот метод отлично работал для форматирования через Selection.Font.Color для быстрого и грязного переключающего макроса форматирования, но он не работает для реального текста.

При отладке с помощью MsgBox в качестве значения отображается поле (например, □).

Например,

Код поля слова:

{ MACROBUTTON Macro_name DisplayText }

Код VBA запускается при выделении «DisplayText» в Word:

Sub Macro_name()    
    Dim Str As String

    Str = Selection.Text

    MsgBox Str

    Select Case Str            
        Case "DisplayText"
            MsgBox "A was selected"
        Case "B"
            MsgBox "B was selected"
    End Select        
End Sub

В результате выводится окно сообщения, которое показывает только □ Когда я запускаю этот макрос с выделенным обычным текстом, он работает просто отлично.

У меня такой вопрос: есть ли способ, чтобы макрос прочитал часть отображаемого текста кода поля для использования в макросе?

1 Ответ

0 голосов
/ 26 сентября 2018

Вы можете прочитать код поля напрямую, вместо выделения (или Field.Result, который также не дает текст).

Не совсем ясно, как этот макрос должен использоваться повсеместнодокумент, поэтому пример кода ниже предоставляет два варианта.

Оба проверяют, содержит ли выбор поля, и если да, то является ли (первое) поле полем MacroButton.Затем проверяется код поля.

В закомментированном варианте (более простом) код просто проверяет, присутствует ли отображаемый текст MacroButton в коде поля.Если это так, то этот текст присваивается проверяемой строковой переменной оператором Select.

Если этого недостаточно, поскольку отображаемый текст «неизвестен» (возможно, более одного поля MacroButton), тогда этоНеобходимо найти часть кода поля, которая содержит отображаемый текст.В этом случае функция InstrRev находит конечную точку объединенного имени поля и имени макроса, а также промежуточные пробелы во всем коде поля, выполняя поиск по end строки.После этого функция Mid извлекает отображаемый текст и присваивает его строковой переменной, проверяемой оператором Select.

В обоих вариантах, если выбор не содержитMacroButton поле, тогда выбранный тест присваивается строковой переменной для оператора Select.

(Обратите внимание, что для моих тестов мне нужно было использовать Case Else в операторе Select. Возможно, вы хотитечтобы изменить это обратно на Case "B" ...)

Sub Display_Field_DisplayText()
    Dim Str As String, strDisplayText As String
    Dim textLoc As Long
    Dim strFieldText As String, strMacroName As String
    Dim strFieldName As String, strFieldCode As String

    strDisplayText = "text to display"

    If Selection.Fields.Count > 0 Then
        If Selection.Fields(1).Type = wdFieldMacroButton Then
            strFieldName = "MacroButton "
            strMacroName = "Display_Field_DisplayText "
            strFieldCode = strFieldName & strMacroName
            Str = Selection.Fields(1).code.text
            textLoc = InStrRev(Str, strFieldCode)
            strFieldText = Mid(Str, textLoc + Len(strFieldCode))

            MsgBox strFieldText
            Str = strFieldText
            'If InStr(Selection.Fields(1).code.text, strDisplayText) > 0 Then
             '   Str = strDisplayText
            'End If
        End If
    Else
        Str = Selection.text
    End If

    Select Case Str
        Case strDisplayText
            MsgBox "A was selected"
        Case Else
            MsgBox "B was selected"
    End Select
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...