2017-01-18 4 views
0

Итак, я пытаюсь закодировать макрос, который позволит мне найти значение в электронной таблице, сохранить его как переменную с именем «TotalHooks», а затем окрасить значения фиолетовый в другой колонке, «Count5s», если они равны (TotalHooks - 1). Я получил его, чтобы успешно найти и применить это условие к первой ячейке в столбце «Count5s», но не знаю, как заставить это условие формулы правильно применяться ко всем остальным числам в столбце. Вот мой код:Как применить условное форматирование по всему столбцу в VBA

Dim TotalHooks As Integer 
Dim StraightLiner As Integer 

Cells.Find(What:="TotalHookCount", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Offset(1, 0).Activate 

TotalHooks = ActiveCell.Value 

StraightLiner = TotalHooks - 1 

Cells.Find(What:="Count5s", After:=ActiveCell, LookIn:=xlFormulas, _ 
    LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
    MatchCase:=False, SearchFormat:=False).Offset(1, 0).Activate 
    If ActiveCell = StraightLiner Then 
     With Selection.Interior 
      .Pattern = xlSolid 
      .PatternColorIndex = xlAutomatic 
      .ThemeColor = xlThemeColorAccent4 
      .TintAndShade = 0 
      .PatternTintAndShade = 0 
     End With 
     With Selection.Font 
      .ThemeColor = xlThemeColorDark1 
      .TintAndShade = 0 
     End With 
    End If 

ответ

0

Вам нужно написать цикл, который находит Find, а затем FindNext, чтобы продолжить поиск. Я не тестировал этот код, но я бы написал что-то в этих строках:

Dim TotalHooks As Integer 
Dim StraightLiner As Integer 
Dim row As Long 
Dim curCell As Range 


Cells.Find(What:="TotalHookCount", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Offset(1, 0).Activate 

TotalHooks = ActiveCell.Value 

StraightLiner = TotalHooks - 1 

Dim cellFound As Range 
Set cellFound = Cells.Find(What:="Count5s", After:=ActiveCell, LookIn:=xlFormulas, _ 
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
MatchCase:=False, SearchFormat:=False) 
row = 1 
If Not cellFound Is Nothing Then 
    Do While Not IsEmpty(cellFound.Offset(row, 0)) 
     Set curCell = cellFound.Offset(row, 0) 
     If curCell = StraightLiner Then 
     With curCell.Interior 
      .Pattern = xlSolid 
      .PatternColorIndex = xlAutomatic 
      .ThemeColor = xlThemeColorAccent4 
      .TintAndShade = 0 
      .PatternTintAndShade = 0 
     End With 
     With curCell.Font 
      .ThemeColor = xlThemeColorDark1 
      .TintAndShade = 0 
     End With 
     End If 
     row = row + 1 
    Loop 
End If 
+0

Спасибо! Я реализовал ваш код в моем, но я все еще сталкиваюсь с проблемами. «Count5s» - это текстовый заголовок в верхней части моего столбца и не определен каким-либо другим способом. Мне нужен код, чтобы найти номер ниже этого текстового заголовка, определить, является ли он StraightLiner или нет, а затем перейти к следующей ячейке под ним и сделать то же самое. У меня есть относительный диапазон, в котором это необходимо сделать, начиная с ячейки Offset ниже «Count5s». Первое условие «Set cellFound» выбрасывает ошибку «Object required». Я довольно новичок в VBA, поэтому спасибо за вашу помощь! – Nafferly

+0

Посмотрите на новую версию кода, который я опубликовал, вам нужно найти текст заголовка, а затем переместить соответствующие ячейки до тех пор, пока вы не нажмете пустую ячейку. Вам нужно выяснить, как работает Debugger, чтобы вы могли исправить это. –

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