2016-03-14 9 views
0

Что будет выглядеть код VBA, если я хочу поместить значение ячейки из одной строки ниже в ячейку выше, только если вышеуказанная ячейка для ex.VBA Если условие с .TintAndShade

.TintAndShade = 0.799981688894314 

enter image description here

мой код не будет работать:

Sub Macro1() 
If ActiveCell.Interior.TintAndShade = 0.799981688894314 Then 
    ActiveCell.Offset(1, 0).Range("A1").Select 
    Selection.Copy 
    ActiveCell.Offset(-1, 0).Range("A1").Select 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 
End If 
End Sub 
+0

SO не является кодовым письмом. Идите сами. Если он не работает, возвращайтесь с кодом и любыми сообщениями об ошибках, с которыми вы столкнулись. –

+0

Добавленный код - он ничего не делает, нет сообщения об ошибке. – Rayearth

+0

В вашем коде отсутствует цикл. Вам нужно обрабатывать ячейки в Excel по одному за раз. –

ответ

1

Ваш код не имеет петлю. Это позволит вам обрабатывать каждую строку отдельно. Я использовал FOR...NEXT, но вы также можете использовать WHILE или DO. Каждый из них позволяет вам повторять действие столько раз, сколько требуется. FORs хороши для заданного количества итераций. DO и WHILE полезны, когда есть условие выхода для проверки.

Sub Macro1() 
Const COLUMN As Integer = 1   ' 1 for A, 2 for B, etc. 
Dim row As Integer 


    ' Will process the first hundred rows of column A. 
    For row = 1 To 100 

     If ActiveSheet.Cells(row, COLUMN).Interior.TintAndShade = 0.799981688894314 Then 

      ActiveSheet.Cells(row, COLUMN).Value = ActiveSheet.Cells(row + 1, COLUMN).Value 
     End If 
    Next 
End Sub 

Этот код в порядке, но это может быть лучше. Количество строк, которые нужно перебрать, в настоящее время жестко закодировано. Один из способов улучшить это - использовать объект UsedRange для вычисления количества требуемых строк.

+0

Мой код был всего лишь примером, применимым к ActiveCell. Я бы добавил цикл позже, если код работал. Ваш код ничего не делает, как и мой. Ничего не произошло. – Rayearth

+0

Я думаю, проблема в TintAndShade. Я не могу заставить Excel принять значение .799 ... 314. Я могу использовать для вас другую тему. Можете ли вы попробовать установить цвет фона в чистый красный цвет и обновить TintAndShade до 'ActiveCell.Interior.Color = rgb (255,0,0)'. –

+0

Да, он работает с 'ActiveCell.Interior.Color'. Спасибо за помощь. – Rayearth

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