2017-02-06 16 views
-1

У меня есть таблица в MS Word (2016) с номерами от 1 до 7 цифр (от единиц до миллионов), мне нужно, чтобы все единицы, тысячи и миллионы были зеленого цвета, десятки, десять тысячи - в синем, сотни и сотни тысяч - в красном. Не могли бы вы помочь мне с помощью скрипта vba?Изменить цвет для символа в определенном положении

Sub creatable() 

Dim docNew As Document 
Dim tableNew As Table 
Dim celltable As Cell 

Dim X As Integer 
Dim y As Integer 
Dim cnt As Integer 
Dim Rndm As Long 
Dim a As Long 
Dim b As Long 
Dim celTable As Cell 
Dim intCount As Integer 
Dim intChar As Integer 


a = CInt((Rnd() + 1) * (Int((2025 * Rnd()) + 1))) 
b = CInt((Rnd() + 1) * (Int((4355 * Rnd()) + 1))) 
Rndm = a + b 

Set docNew = Documents.Add 
Set tableNew = docNew.Tables.Add(Selection.Range, 6, 12) 

For y = 1 To 12 
With tableNew 
    .Cell(X, y).Range.InsertAfter Rndm * X 
    End With 
For X = 1 To 6 
    With tableNew 
    .Cell(X, y).Range.InsertAfter Rndm * y 
    End With 
Next 
Next 

For Each celTable In tableNew.Range.Cells 
intChar = celTable.Range.Characters.Count 
If celTable.Range.Characters.Count = 1 Then 
celTable.Range.Characters(intChar - 1).Font.ColorIndex = wdGreen 
End If 
If celTable.Range.Characters.Count = 2 Then 
celTable.Range.Characters(intChar - 1).Font.ColorIndex = wdGreen 
celTable.Range.Characters(intChar - 2).Font.ColorIndex = wdBlue 
End If 
If celTable.Range.Characters.Count = 3 Then 
celTable.Range.Characters(intChar - 1).Font.ColorIndex = wdGreen 
celTable.Range.Characters(intChar - 2).Font.ColorIndex = wdBlue 
celTable.Range.Characters(intChar - 3).Font.ColorIndex = wdRed 
End If 
If celTable.Range.Characters.Count = 4 Then 
celTable.Range.Characters(intChar - 1).Font.ColorIndex = wdGreen 
celTable.Range.Characters(intChar - 2).Font.ColorIndex = wdBlue 
celTable.Range.Characters(intChar - 3).Font.ColorIndex = wdRed 
celTable.Range.Characters(intChar - 4).Font.ColorIndex = wdGreen 
End If 
If celTable.Range.Characters.Count = 5 Then 
celTable.Range.Characters(intChar - 1).Font.ColorIndex = wdGreen 
celTable.Range.Characters(intChar - 2).Font.ColorIndex = wdBlue 
celTable.Range.Characters(intChar - 3).Font.ColorIndex = wdRed 
celTable.Range.Characters(intChar - 4).Font.ColorIndex = wdGreen 
celTable.Range.Characters(intChar - 5).Font.ColorIndex = wdBlue 
End If 
If celTable.Range.Characters.Count = 6 Then 
celTable.Range.Characters(intChar - 1).Font.ColorIndex = wdGreen 
celTable.Range.Characters(intChar - 2).Font.ColorIndex = wdBlue 
celTable.Range.Characters(intChar - 3).Font.ColorIndex = wdRed 
celTable.Range.Characters(intChar - 4).Font.ColorIndex = wdGreen 
celTable.Range.Characters(intChar - 5).Font.ColorIndex = wdBlue 
celTable.Range.Characters(intChar - 6).Font.ColorIndex = wdRed 
End If 
If celTable.Range.Characters.Count = 7 Then 
celTable.Range.Characters(intChar - 1).Font.ColorIndex = wdGreen 
celTable.Range.Characters(intChar - 2).Font.ColorIndex = wdBlue 
celTable.Range.Characters(intChar - 3).Font.ColorIndex = wdRed 
celTable.Range.Characters(intChar - 4).Font.ColorIndex = wdGreen 
celTable.Range.Characters(intChar - 5).Font.ColorIndex = wdBlue 
celTable.Range.Characters(intChar - 6).Font.ColorIndex = wdRed 
celTable.Range.Characters(intChar - 7).Font.ColorIndex = wdGreen 
End If 

intCount = intCount + 1 

Next celTable 

End Sub 

This is how it should look at the end enter image description here

+0

Какие исследования вы сделали? Просьба представить код, который вы попробовали, и объяснить, как он не работает. Обратите внимание, что StackOverflow не является учебным пособием или службой написания кода, как описано в [help]. –

+0

У меня есть таблица и случайное значение в ней. Я могу подсчитать длину для каждого номера, но не знаю, как правильно установить цвет: – DesertDoxRiga

ответ

0

Решение найдено (не идеально, но, по крайней мере, работает):

Sub creatable() 

Dim docNew As Document 
Dim tableNew As Table 
Dim celltable As Cell 

Dim X As Integer 
Dim y As Integer 
Dim cnt As Integer 
Dim Rndm As Long 
Dim a As Long 
Dim b As Long 
Dim celTable As Cell 
Dim intCount As Integer 
Dim intChar As Integer 


a = CInt((Rnd() + 1) * (Int((2025 * Rnd()) + 1))) 
b = CInt((Rnd() + 1) * (Int((4355 * Rnd()) + 1))) 
Rndm = a + b 

Set docNew = Documents.Add 
Set tableNew = docNew.Tables.Add(Selection.Range, 6, 12) 

For y = 1 To 12 
With tableNew 
    .Cell(X, y).Range.InsertAfter Rndm * X 
    End With 
For X = 1 To 6 
    With tableNew 
    .Cell(X, y).Range.InsertAfter Rndm * y 
    End With 
Next 
Next 

For Each celTable In tableNew.Range.Cells 
intChar = celTable.Range.Characters.Count 
    If celTable.Range.Characters.Count = 1 Then 
    celTable.Range.Characters(intChar - 1).Font.ColorIndex = wdGreen 
    End If 
    On Error Resume Next 
    If celTable.Range.Characters.Count = 2 Then 
    celTable.Range.Characters(intChar - 1).Font.ColorIndex = wdGreen 
    celTable.Range.Characters(intChar - 2).Font.ColorIndex = wdBlue 
    End If 
    If celTable.Range.Characters.Count = 3 Then 
    celTable.Range.Characters(intChar - 1).Font.ColorIndex = wdGreen 
    celTable.Range.Characters(intChar - 2).Font.ColorIndex = wdBlue 
    celTable.Range.Characters(intChar - 3).Font.ColorIndex = wdRed 
End If 
On Error Resume Next 
If celTable.Range.Characters.Count = 4 Then 
celTable.Range.Characters(intChar - 1).Font.ColorIndex = wdGreen 
celTable.Range.Characters(intChar - 2).Font.ColorIndex = wdBlue 
celTable.Range.Characters(intChar - 3).Font.ColorIndex = wdRed 
celTable.Range.Characters(intChar - 4).Font.ColorIndex = wdGreen 
End If 
On Error Resume Next 
If celTable.Range.Characters.Count = 5 Then 
celTable.Range.Characters(intChar - 1).Font.ColorIndex = wdGreen 
celTable.Range.Characters(intChar - 2).Font.ColorIndex = wdBlue 
celTable.Range.Characters(intChar - 3).Font.ColorIndex = wdRed 
celTable.Range.Characters(intChar - 4).Font.ColorIndex = wdGreen 
celTable.Range.Characters(intChar - 5).Font.ColorIndex = wdBlue 
End If 
On Error Resume Next 
If celTable.Range.Characters.Count = 6 Then 
celTable.Range.Characters(intChar - 1).Font.ColorIndex = wdGreen 
celTable.Range.Characters(intChar - 2).Font.ColorIndex = wdBlue 
celTable.Range.Characters(intChar - 3).Font.ColorIndex = wdRed 
celTable.Range.Characters(intChar - 4).Font.ColorIndex = wdGreen 
celTable.Range.Characters(intChar - 5).Font.ColorIndex = wdBlue 
celTable.Range.Characters(intChar - 6).Font.ColorIndex = wdRed 
End If 
On Error Resume Next 
If celTable.Range.Characters.Count = 7 Then 
celTable.Range.Characters(intChar - 1).Font.ColorIndex = wdGreen 
celTable.Range.Characters(intChar - 2).Font.ColorIndex = wdBlue 
celTable.Range.Characters(intChar - 3).Font.ColorIndex = wdRed 
celTable.Range.Characters(intChar - 4).Font.ColorIndex = wdGreen 
celTable.Range.Characters(intChar - 5).Font.ColorIndex = wdBlue 
celTable.Range.Characters(intChar - 6).Font.ColorIndex = wdRed 
celTable.Range.Characters(intChar - 7).Font.ColorIndex = wdGreen 
End If 
On Error Resume Next 
intCount = intCount + 1 

Next celTable 

End Sub 

 Смежные вопросы

  • Нет связанных вопросов^_^