VBA(MSWord):无法找到具有特定rgb颜色的Bullet点

时间:2017-05-31 23:07:47

标签: vba ms-word word-vba

我想计算一个由三个不同颜色的子弹组成的文本中的所有子弹点,这些子弹不是索引颜色而是服装RGB(例如 51,204,204)。然后想要显示每种颜色的数量(例如。 42蓝色) 所以想出了这个,但没有编译并说'#34;无效的限定符"指着" .Font"我在代码中突出显示:

Sub GetNumberOfBullets()

   Dim objRange As Range
   Dim objParagraph As Paragraph
   Dim nNumber As Integer

   '  Initialization
   Set objRange = Selection.Range
   nNumber = 0
   cyannum = 0
   purplenum = 0
   greennum = 0

   For Each objParagraph In objRange.Paragraphs
   If objParagraph.Range.ListFormat.ListType = WdListType.wdListBullet Then
     nNumber = nNumber + 1
     If objParagraph.Range`.Font`.Color.RGB = RGB(51, 204, 204) Then
        cyannum = cyannum + 1
        End If
     If objParagraph.Range`.Font`.Color.RGB = RGB(204, 153, 255) Then
        purplenum = purplenum + 1
        End If
     If objParagraph.Range`.Font`.Color.RGB = RGB(0, 176, 80) Then
        greennum = greennum + 1
        End If
     End If
   Next objParagraph

   '  Pop up a message box to show the total number of bullets.
   MsgBox ("Bullet number:" & nNumber & "Cyan number:" & cyannum & "Purple number:" & purplenum & "Green number:" & greennum)
 End Sub

2 个答案:

答案 0 :(得分:0)

编译器反对的不是Font而是Color。在查找Range的字体颜色时,您需要查看Fill属性。

如果您将代码调整为objParagraph.Range.Font.Fill.ForeColor.RGB,则可以编译代码。

我从您的代码中获取它,您正在寻找子弹后面的文本颜色,而不是子弹角色?如果您正在寻找子弹角色,请参阅Variatus的评论。

答案 1 :(得分:0)

@Variatus发表的评论绝对正确。有很多方法可以为一个子弹点着色,在编写代码之前,您需要知道作者已经完成了什么。

可以通过突出显示段落并为文本着色来为项目符号点着色。子弹点将采用您的最后一个(即段落)字符的颜色。如果段落包含多种颜色,则Paragraph.Font.Color属性将返回所有9种',因此您最好的选择是测试最后一个字符的颜色。

假设这是您想要测试项目符号颜色的方式 - 这是一个很大的假设 - 那么您的代码问题不在于Font属性,而在于{{1 }}不是RGB的属性。 Color是一个从RGB值返回long的函数,因此您需要根据以下语法将RGB()值与Color进行比较:

RGB(r,b,g)

您的更正后的代码将是这样的:

If ... .Font.Color = RGB(r, b, g) Then