我有一个包含标题选项的Word模板,其中之一是它所涉及的文档类型。我有细胞毒性和单克隆选择从下拉菜单中选择。
我需要在文件上显示一些标识颜色,黄色表示细胞毒性,蓝色表示单克隆。帮助快速识别更好的可用性。
是否有一种方法来改变形状或文本框颜色取决于选择的选项?
编辑模板是一项正在进行的工作,所以不能100%确定将在哪里添加颜色,希望它能自动实现一致性,因为它将应用于许多文档。不同的人一起工作。
我追求的是一个excel条件格式类型效应,如果下拉显示细胞毒性颜色被应用。它可以是一个形状,文本框,单元格或字体,我可以使用任何可能的链接。
谢谢你的帮助!
发布于 2017-11-16 09:18:52
请将下面的代码粘贴到模板的ThisDocument代码表中,并以DOTM或DOCM格式将其保存为启用宏。
向模板中添加一个ActiveX组合框。默认情况下,它的名称为"ComboBox1“。您会发现代码以这个名称引用它。
将矩形形状添加到模板中。我做的更像一个酒吧,大约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打开文档时,Document_Open事件过程将运行(用于测试,也可以手动运行)。它检查这两个形状是否存在--一个是Inlineshape,另一个是正常形状--如果其中一个丢失了,则给出一个错误消息。它还会将这两个选项添加到组合框中。您将在代码中找到名称(以防我拼错了它们)。
现在,当您更改选择时,条形图的颜色将在黄色和蓝色之间切换。
统计: 32行支持代码,这样一条单独的行就可以完成所有的工作。
下面的代码将在标题中包含矩形。不幸的是,在标题中不可能有一个ActiveX控件,但是您可以将ComboBox设置为没有框架,并且只有当鼠标悬停在它上面时才允许下拉箭头出现,这样所选的单词就会显示为文档文本的一部分,甚至是它的标题。
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事件,矩形中的颜色就不会改变,特别是如果它不存在的话。
https://stackoverflow.com/questions/47317963
复制相似问题