2016-03-23 1 views
-1

В Word У меня есть документ с несколькими таблицами, заполненными данными. Скрытый внутри этих ячеек (вне поля зрения, но данные есть) - это код шестнадцатеричного цвета, который я хочу затенять. Я выбрал шестнадцатеричное значение только потому, что он относительно короткий, и это уникальный бит текста, который не будет путать с остальной частью текста в ячейке.Используйте Word VBA для цветных ячеек в таблицах на основе значения ячейки

Я нашел код онлайн для изменения, но я не могу заставить его работать. Это не дает никаких ошибок, просто ничего не происходит. Я чувствую, что проблема заключается в поиске таблиц для текстового значения, но я потратил на это несколько часов, и я думаю, что сейчас я запутался!

Sub ColourIn() 

Dim oTbl As Table 
Dim oCel As Cell 
Dim oRng As Range 
Dim oClr As String 

For Each oTbl In ActiveDocument.Tables 
For Each oCel In oTbl.Range.Cells 
Set oRng = oCel.Range 
oRng.End = oRng.End - 1 

If oRng = "CCFFCC" Then 
oCel.Shading.BackgroundPatternColor = wdColorLightYellow 
End If 
If oRng = "FFFF99" Then 
oCel.Shading.BackgroundPatternColor = wdColorPaleBlue 
End If 

Next 
Next 
End Sub 

Спасибо!

Edit:

Я также попытался Этот код остроумие тот же результат ничего не происходит:

Sub EachCellText() 

Dim oCell As Word.Cell 
Dim strCellString As String 

For Each oCell In ActiveDocument.Tables(1).Range.Cells 
strCellString = Left(oCell.Range.Text, _ 
Len(oCell.Range.Text) - 1) 

If strCellString = "CCFFFF" Then 
oCell.Shading.BackgroundPatternColor = wdColorLightGreen 
If strCellString = "CCFFCC" Then 
oCell.Shading.BackgroundPatternColor = wdColorLightYellow 
If strCellString = "FFFF99" Then 
oCell.Shading.BackgroundPatternColor = wdColorPaleBlue 

End If 
End If 
End If 

Next 
End Sub 
+0

Сам код работает, он выделяет ячейку, в которой находится шестнадцатеричный код. Не могли бы вы опубликовать скриншот своей таблицы, чтобы мы могли видеть, что вы на самом деле имеете в виду под «скрытыми внутри ячеек» и как вы скрывали данные? – gizlmo

+0

Вот скриншот с объяснением: http://i.imgur.com/mxOBbNb.png Этот код перемещается по всем ячейкам в документе или, может быть, он застрял где-то. В верхней части документа с датой/временем и т. Д. Также есть таблица, мне интересно, если она застряла там? –

ответ

0

Ваш код не застрять в никуда. Но вы проверяете всю ценность ячейки по сравнению с шестнадцатеричным кодом, и это не сработает, поскольку «blablabla FFFFFF» никогда не равен «FFFFFF». Таким образом, вы должны проверить, если код Hex в значении Cell:

Sub ColourIn() 

Dim oTbl As Table 
Dim oCel As Cell 
Dim oRng As Range 
Dim oClr As String 

For Each oTbl In ActiveDocument.Tables 

    For Each oCel In oTbl.Range.Cells 

     Set oRng = oCel.Range 
     oRng.End = oRng.End - 1 

     Dim cellvalue As String 

     'check if Colorcode is in cell 
     If InStr(oRng, "CCFFCC") Then 

      'Set Cell color 
      oCel.Shading.BackgroundPatternColor = wdColorLightYellow 

      'Remove Colorcode from Cell 
      cellvalue = Replace(oRng, "CCFFCC", "") 

      'load new value into cell 
      oRng = cellvalue 
     End If 
    Next 
Next 
End Sub 

Теперь вы просто должны добавить все цвета, которые вы хотите использовать (я предпочел бы Оператор Select Case) и код должен работать нормально

+1

oh wow спасибо, похоже, что он отлично работает. Спасибо! –

+1

FWIW A Select Case может быть лучшим подходом, чем ElseIf. –

+0

Да, очевидно. Отредактировал мой ответ – gizlmo

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