【问题标题】:Change one letter color in VB Ms Word 2007在 VB Ms Word 2007 中更改一种字母颜色
【发布时间】:2013-07-14 13:08:03
【问题描述】:

我是 Visual Basic 的新手,我想处理一些简单的事情。

我有 按钮TextBox

  • 当我单击按钮时,我想在文本框中显示一些字符串,但该字符串中的一些特定字符以某种特定颜色显示。

按钮:

    Private Sub CommandButton1_Click()
    TextBox1.Text = "Hi my name is Koki"
    End Sub

文本框:

    Private Sub TextBox1_Change()
    End Sub

输出:

注意:即使有静态解决方案也会对我有所帮助,例如 Html 中的<span></span>

【问题讨论】:

    标签: vba button textbox ms-word


    【解决方案1】:

    在处理 VBA 时,您必须考虑范围,然后是给定范围的属性。在这里,您有一个示例代码可以做您想做的事情:

    Private Sub CommandButton1_Click()
    
        Set Object = ActiveDocument.Shapes.AddTextbox(Orientation:=msoTextOrientationHorizontal, Left:=10, Top:=10, Width:=80, Height:=80)
    
        With Object.TextFrame.TextRange
            .Text = "Hi my name is Koki"
            With .Characters(2).Font
                .ColorIndex = wdTurquoise  'http://msdn.microsoft.com/en-us/library/office/aa195611(v=office.11).aspx
            End With
            With .Characters(12).Font
                .ColorIndex = wdTurquoise
            End With
            With .Characters(18).Font
                .ColorIndex = wdTurquoise
            End With
        End With
    
    End Sub
    

    如您所见,我在开头添加了文本框。我这样做是为了确保您使用正确的文本框(如果添加 ActiveX 文本框,行为会有所不同)。

    --------- 更新

    为了依赖建议的方法,您可能必须使用 Document Open 事件来删除任何形状并编写您想要的形状。例如:

    Private Sub Document_Open()
    
        For i = ActiveDocument.Shapes.Count To 1 Step -1
            ActiveDocument.Shapes(i).Delete
        Next i
    
        Set Object = ActiveDocument.Shapes.AddTextbox(Orientation:=msoTextOrientationHorizontal, Left:=10, Top:=10, Width:=80, Height:=80)
    
    End Sub
    

    此代码将在文档打开时调用,并将删除您创建的所有形状(不是 ActiveX 对象,如 commandButton)并添加文本框。您可以全局声明Object 变量,并从代码中的任何位置(例如CommandButton1_Click())访问它。

    请记住,这是获得您想要的解决方法的示例。您不需要删除给定的形状,您可以使用此代码检查在文档开头要做什么:如果有一个名为“我想要的名称”的形状,让它在那里并且不要做任何东西,只要将它设置为全局Object 变量,即:

    Private Sub Document_Open()
    
        For i = ActiveDocument.Shapes.Count To 1 Step -1
            If(ActiveDocument.Shapes(i).Name = "the name I want") Then
              Set Object = ActiveDocument.Shapes(i)
              Exit Sub
            End If
        Next i
    
        Set Object = ActiveDocument.Shapes.AddTextbox(Orientation:=msoTextOrientationHorizontal, Left:=10, Top:=10, Width:=80, Height:=80)
    
    End Sub
    

    【讨论】:

    • 非常感谢..我只是想知道是否有一个解决方案,我将使用静态框架,而不是在每次点击时附加框架..我需要它,因为我有两个按钮,什么时候我单击第一个按钮将有一个文本,单击第二个按钮将在同一框架中显示另一个文本,或者您能否向我展示使用 ActiveX 文本框时的行为。谢谢
    • 理论上,您应该能够使用代码中显示的 ActiveX 控件做一些等效的事情(命令不同),尽管它不太可靠(或者,至少,我不知道如何让它足够可靠);请记住,VBA for Word 并不是最可靠的编程框架。您可以依靠 OpenDocument 事件,首先删除所有形状,然后创建您想要的形状。让我用这个更新我的代码。
    • 不客气。但是在处理 VBA Word 时,“我所有的问题都解决了”这句话的准确性往往很低;)
    猜你喜欢
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    相关资源
    最近更新 更多