如何获取 Selection.Text 以读取宏域代码的显示文本



我在弄清楚这个问题时遇到了一些麻烦,非常感谢一些帮助。我正在尝试编写一个使用 selection.text 属性作为大小写文本表达式的宏。在 Word 中单击宏Microsoft时,所选文本将自动设置为显示文本。此方法非常适合通过 Selection.Font.Color 进行格式化,以实现快速而脏的格式切换宏,但它不适用于实际文本。

使用 MsgBox 进行调试时,它显示一个框(例如:□(作为值。

例如

字域代码:

{ MACROBUTTON Macro_name DisplayText }

VBA代码在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

输出的是一个仅显示□的消息框 当我在选择一些常规文本的情况下运行此宏时,它工作正常。

我的问题是:有没有办法让宏读取域代码的显示文本部分以在宏中使用?

您可以直接读取字段代码,而不是选择(或也不提供文本的Field.Result(。

目前还不清楚如何在整个文档中使用此宏,因此下面的代码示例提供了两种变体。

两者都检查所选内容是否包含字段,如果是,则检查(第一个(字段是否为MacroButton字段。然后测试域代码。

在注释掉的变体(更简单的变体(中,代码然后简单地检查字段代码中是否存在MacroButton显示文本。如果是,则该文本将分配给Select语句正在测试的字符串变量。

如果这还不够,因为显示文本是"未知的"(可能有多个 MacroButton 字段(,那么有必要找到包含显示文本的域代码部分。在这种情况下,函数InstrRev在整个字段代码中查找组合字段名称和宏名称的端点以及中间空格,从字符串的末尾进行搜索。之后,Mid函数提取显示文本并将其分配给由Select语句测试的字符串变量。

在这两种变体中,如果所选内容不包含MacroButton字段,则将所选测试分配给Select语句的字符串变量。

(请注意,对于我的测试,我需要在Select语句中使用Case Else。您可能想将其改回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

相关内容

最新更新