2017-05-31 16 views
0

我想计算包含三个不同颜色项目符号的文本中的所有项目符号项目,该项目不是索引颜色,而是服装RGB(,例如 51,204,204 )。然后要显示每种颜色的数量(,例如 42蓝色) 所以想出了这个,但不编译和说“无效限定符”指向“.Font”,我在代码中突出显示:VBA(MSWord):无法找到具有特定rgb颜色的项目符号点

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 
+0

这是一个迷宫!我的建议是不去那里。基本上,项目符号的字体与文本的字体不同地指定。有无数的物体,其中有些物体不能按照您所期望的方式存取,没有一个物体有良好的文件记录,也没有关于它们如何一起工作的文件。如果你坚持,我发现的最好的帮助可以在http://www.shaunakelly.com/word/bullets/controlbullets20072010.html – Variatus

回答

0

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

如果您将代码调整为objParagraph.Range.Font.Fill.ForeColor.RGB,那么您将能够编译您的代码。

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

+0

你得到它的权利!我需要子弹后文字的颜色。但在大多数情况下,起始的子弹字符与颜色相匹配,因此没有必要进行澄清。 – ali2569

0

@Variatus发表的评论绝对正确。有多种着色点的方法,你需要知道作者在编写代码之前完成了什么。

可以通过突出显示段落并为文字着色来为项目符号着色。项目符号点将采用您最后一个(即段落)字符的颜色。如果段落包含多种颜色,那么Paragraph.Font.Color属性将返回“所有9个”,所以最好的办法是测试最后一个字符的颜色。

假设这是你要测试的圆点颜色的方式 - 这是一个重要的假设 - 然后用你的代码的问题不在于Font财产,但在事实上,RGB不是Color的属性。 RGB()是返回长从您的RGB值的功能,所以你需要根据下面的语法与RGB(r,b,g)Color值进行比较:因此

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

你纠正代码将是这样的:

Dim rng As Range 
Dim para As Paragraph 
Dim myCyan As Long, myPurple As Long, myGreen As Long 
Dim cyanCount As Long, purpleCount As Long, greenCount As Long 

myCyan = RGB(51, 204, 204) 
myPurple = RGB(204, 153, 255) 
myGreen = RGB(0, 176, 80) 

Set rng = Selection.Range 
For Each para In rng.Paragraphs 
    With para.Range 
     If .ListFormat.ListType = wdListBullet Then 
      Select Case .Characters.Last.Font.Color 
       Case myCyan: cyanCount = cyanCount + 1 
       Case myPurple: purpleCount = purpleCount + 1 
       Case myGreen: greenCount = greenCount + 1 
      End Select 
     End If 
    End With 
Next 

MsgBox "Cyan=" & cyanCount & ", " & _ 
     "Purple=" & purpleCount & ", " & _ 
     "Green=" & greenCount