Вы можете прочитать код поля напрямую, вместо выделения (или 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