如何让Selection.Text读取宏字段代码的displaytext

问题描述 投票:2回答:1

我在解决这个问题时遇到了一些麻烦,我真的很感激一些帮助。我正在尝试编写一个使用selection.text属性作为Case text-expression的宏。在Microsoft Word中单击宏时,所选文本将自动设置为DisplayText。此方法通过Selection.Font.Color进行格式化非常有用,可以快速和脏化格式化切换宏,但它不适用于实际文本。

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

例如,

字段代码:

{ MACROBUTTON Macro_name DisplayText }

在Word中突出显示“DisplayText”时运行VBA代码:

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

什么是输出是一个仅显示□的消息框当我运行此宏并选择了一些常规文本时,它可以正常工作。

我的问题是:有没有办法让宏读取字段代码的displaytext部分以便在宏中使用?

vba ms-word
1个回答
0
投票

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

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

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

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

如果这是不够的,因为显示文本是“未知”(可能是多个MacroButton字段),那么有必要找到包含显示文本的字段代码部分。在这种情况下,函数InstrRev在整个字段代码中定位组合字段名称和宏名称的结束点以及插入空格,从字符串的末尾进行搜索。之后,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
© www.soinside.com 2019 - 2024. All rights reserved.