Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba MS Word,颜色更改链接到下拉菜单_Vba_Drop Down Menu_Colors_Ms Word - Fatal编程技术网

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

Vba MS Word,颜色更改链接到下拉菜单,vba,drop-down-menu,colors,ms-word,Vba,Drop Down Menu,Colors,Ms Word,我有一个Word模板,在标题中有选项,其中一个是它所涉及的文档类型。我可以从下拉菜单中选择细胞毒性和单克隆 我需要在文件上显示一些识别颜色,黄色表示细胞毒性,蓝色表示单克隆抗体。帮助快速识别以获得更好的可用性 是否有办法根据选择的选项改变形状或文本框的颜色 编辑 模板是一个正在进行的工作,所以不能100%确定颜色将添加到何处,只是希望它自动统一,因为它将应用于许多文件。而且是由不同的人做的 我想要的是excel条件格式类型效果,如果下拉列表显示应用了细胞毒性颜色。它可以是一个形状,文本框,单元格

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

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

是否有办法根据选择的选项改变形状或文本框的颜色

编辑 模板是一个正在进行的工作,所以不能100%确定颜色将添加到何处,只是希望它自动统一,因为它将应用于许多文件。而且是由不同的人做的

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


谢谢你的帮助

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

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

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

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

请注意,此版本不会检查文档中是否存在组合框或矩形。相反,如果找到组合框,则设置其下拉列表。如果找不到,什么也不会发生。如果没有可调用其更改事件的组合框,则矩形中的颜色将不会更改,尤其是在它不存在的情况下。

Dave,不太清楚您在问什么。。。但是听起来你可以使用VBA来完成这个任务,或者你可以使用快速部件,这取决于下拉列表的位置以及识别颜色/形状需要标记的位置。我已经编辑了我的问题。我可以假设,既然你已经添加了VBA标记这个词,你打算(或至少考虑)使用VBA吗?你有一些代码可以分享吗?我原以为vba是管理它的唯一方法,但一直在努力寻找任何东西来帮助我开始。根据文档的布局,你可以使用“构建块库内容控件”。这将在您的文档中插入一个预格式化的块。。。。但是如果你想改变颜色,你将丢失“块”中的任何后续编辑,即如果你添加文本。。。所以不是超级灵活。但是如果你只是添加一条颜色。。。它可以工作:统计:32行支持代码,这样一行就可以完成所有的工作。非常感谢!但是,它在标题中不起作用,有没有简单的解决方法?实际上,文档中有很多标题。上面的新代码要求所有代码中都有一个“矩形1”。它可能有相同的名称,如果您复制/粘贴,这将自动正确,如果您让Word管理您的标题也是如此。