2017-05-31 4 views
0

インデックスカラーではなく、衣装RGBである3種類の色付き箇条書きからなるテキストですべての箇条書きを数えたいと考えています( 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

コンパイラが反対しているのではなく、Colorです。フォントの色がRangeの場合は、Fillのプロパティを調べる必要があります。

コードをobjParagraph.Range.Font.Fill.ForeColor.RGBに調整すると、コードをコンパイルできます。

あなたのコードから、箇条書きの文字ではなく箇条書きに続くテキストの色を探していますか?弾丸のキャラクターの色を探している場合は、Variatusのコメントをご覧ください。

+0

で入手できます。私は弾丸の後に来るテキストの色が必要でした。ほとんどの場合、始まりの箇条書きの文字は色と一致するので、明確にする必要はありませんでした。 – ali2569

0

@Variatusによるコメントは間違いありません。箇条書きの色分けにはさまざまな方法があり、コードを書く前に著者が何をしているかを知る必要があります。

段落を強調表示してテキストに色を付けると、箇条書きに色を付けることができます。箇条書きのポイントはあなたの最後の、すなわち段落の文字を採用します。パラグラフに複数の色が含まれている場合、Paragraph.Font.Colorプロパティは 'すべての9'を返しますので、最後の文字の色をテストするのが最善の方法です。これを仮定し

を使用すると、箇条書きの色をテストする方法です - それはBIG前提だ - そして、あなたのコードに問題はないFontプロパティではなく、RGBColorのプロパティではありませんという事実にあります。

:あなたの修正されたコードは、したがって、このようなものになるだろう

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

:あなたは、次の構文に従ってRGB(r,b,g)Color値を比較する必要があるのでRGB()は、あなたのRGB値から長い返す関数であります

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 
関連する問題