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