首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MS Word,颜色更改链接到下拉菜单

MS Word,颜色更改链接到下拉菜单
EN

Stack Overflow用户
提问于 2017-11-15 21:56:17
回答 1查看 1.9K关注 0票数 0

我有一个包含标题选项的Word模板,其中之一是它所涉及的文档类型。我有细胞毒性和单克隆选择从下拉菜单中选择。

我需要在文件上显示一些标识颜色,黄色表示细胞毒性,蓝色表示单克隆。帮助快速识别更好的可用性。

是否有一种方法来改变形状或文本框颜色取决于选择的选项?

编辑模板是一项正在进行的工作,所以不能100%确定将在哪里添加颜色,希望它能自动实现一致性,因为它将应用于许多文档。不同的人一起工作。

我追求的是一个excel条件格式类型效应,如果下拉显示细胞毒性颜色被应用。它可以是一个形状,文本框,单元格或字体,我可以使用任何可能的链接。

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-16 09:18:52

请将下面的代码粘贴到模板的ThisDocument代码表中,并以DOTM或DOCM格式将其保存为启用宏。

向模板中添加一个ActiveX组合框。默认情况下,它的名称为"ComboBox1“。您会发现代码以这个名称引用它。

将矩形形状添加到模板中。我做的更像一个酒吧,大约5毫米高,跨越整个页面的宽度。默认情况下,Word将称其为“矩形1”。请注意,代码以这个名称引用它。

代码语言:javascript
复制
Option Explicit

Private Sub Document_Open()
    ' 16 Nov 2017

    Dim iShp As InlineShape
    Dim Shp As Shape
    Dim ShapesCount As Integer

    For Each iShp In ActiveDocument.InlineShapes
        With iShp
            If .Type = wdInlineShapeOLEControlObject Then
                If StrComp(.OLEFormat.Object.Name, "ComboBox1", vbTextCompare) _
                           = 0 Then ShapesCount = ShapesCount + 1
            End If
        End With
    Next iShp

    For Each Shp In ActiveDocument.Shapes
        With Shp
            If .Type = msoAutoShape Then
                If StrComp(.Name, "Rectangle 1", vbTextCompare) _
                           = 0 Then ShapesCount = ShapesCount + 1
            End If
        End With
    Next Shp

   If ShapesCount < 2 Then
        MsgBox "One of the required shapes is missing.", _
               vbInformation, "Corrupted document"
        Exit Sub
    Else
        With ActiveDocument
            With .ComboBox1
                .List = Array("Cycotoxic", "Monoclonic")
                If .ListIndex < 0 Then .ListIndex = 0
            End With
        End With
    End If
End Sub

Private Sub ComboBox1_Change()
    ' 16 Nov 2017
    Shapes("Rectangle 1").Fill.ForeColor = Array(vbYellow, 15773696)(ComboBox1.ListIndex)
End Sub

打开文档时,Document_Open事件过程将运行(用于测试,也可以手动运行)。它检查这两个形状是否存在--一个是Inlineshape,另一个是正常形状--如果其中一个丢失了,则给出一个错误消息。它还会将这两个选项添加到组合框中。您将在代码中找到名称(以防我拼错了它们)。

现在,当您更改选择时,条形图的颜色将在黄色和蓝色之间切换。

统计: 32行支持代码,这样一条单独的行就可以完成所有的工作。

下面的代码将在标题中包含矩形。不幸的是,在标题中不可能有一个ActiveX控件,但是您可以将ComboBox设置为没有框架,并且只有当鼠标悬停在它上面时才允许下拉箭头出现,这样所选的单词就会显示为文档文本的一部分,甚至是它的标题。

代码语言:javascript
复制
Option Explicit

Private Sub Document_Open()
    ' 17 Nov 2017

    Dim iShp As InlineShape

    For Each iShp In ActiveDocument.InlineShapes
        With iShp
            If .Type = wdInlineShapeOLEControlObject Then
                If StrComp(.OLEFormat.Object.Name, "ComboBox1", vbTextCompare) = 0 Then
                    With .OLEFormat.Object
                        .List = Array("Cycotoxic", "Monoclonic")
                        If .ListIndex < 0 Then .ListIndex = 0
                    End With
                End If
            End If
        End With
    Next iShp
End Sub

Private Sub ComboBox1_Change()
    ' 17 Nov 2017

    Dim Sect As Object, Story As Object
    Dim Shp As Shape

    With ActiveDocument
        For Each Sect In .Sections
            For Each Story In Sect.Headers
                For Each Shp In Story.Shapes
                    With Shp
                        If .Type = msoAutoShape Then
                            If StrComp(.Name, "Rectangle 1", vbTextCompare) = 0 Then
                                Shap.Fill.ForeColor = Array(vbYellow, 15773696)(ComboBox1.ListIndex)
                            End If
                        End If
                    End With
                Next Shp
            Next Story
        Next Sect
    End With
End Sub

请注意,此版本不检查文档是否存在ComboBox或矩形。相反,如果找到ComboBox,则设置其下拉列表。如果找不到,什么都不会发生。如果没有ComboBox来调用它的change事件,矩形中的颜色就不会改变,特别是如果它不存在的话。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47317963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档