2014-02-04 2 views
1

У меня есть таблица, в которой есть все заголовки столбцов в строке 1. Ячейка B2 содержит дату. Затем у меня есть 25-месячные столбцы после (от K2 до AH2) заголовки столбцов в строках от K1 до AH1 - это месяцы, начиная с текущего месяца. Я пытаюсь выделить все ячейки от K2 до AH2, только если их дата заголовка столбца меньше значения в B2.Ошибка 1004 при попытке запуска макроса для выделения ячеек в соответствии с условием

Так, например, B2 - 13 июня-14. K1 - это формула для получения сегодняшнего месяца. поэтому формула Today() с ячейкой, отформатированной до MMM-YY (FEB-14).

Я думал, что это будет довольно легко, поскольку я просто сравниваю 2 даты и выделяю другую ячейку, если она меньше, чем другая. Я предполагаю, что я получаю сообщение об ошибке из-за того, что не конвертирует формат даты в месяц? Вот ошибка, которую я получаю.

Run-time error '1004': Application-defined or object-defined error. 

Вот мой код:

Sub Highlight() 


Dim firstColumn As Integer 
Dim lastColumn As Integer 
Dim firstRow As Integer 
Dim lastRow As Integer 
Dim rowCounter As Integer 
Dim columnCounter As Integer 


firstColumn = 9 
firstRow = 2 
lastColumn = 32 
lastRow = 6 
columnCounter = firstColumn 

Do Until columnCounter = lastColumn 
    If Cells(K, 1).Value < Cells(B, 2).Value Then 
    Cells(columnCounter, lastRow).Interior.Color = vbYellow 
    End If 

    columnCounter = columnCounter + 1 
Loop 

End Sub 
+1

Jut высвечивающейся K2: AH2 и Гото conditinoal, форматирование Формула, и использовать формулу, чтобы сказать, значения <$ B $ 2 – user2140261

ответ

2

вы ошибка, скорее всего, происходящий из-за этой строки кода

If Cells(K, 1).Value < Cells(B, 2).Value Then 

Если вы используете клетки, то вам нужно указать числовой строка и col (в этом порядке), т.е. ячейки (1, 2) относятся к строке 1 col 2 или B1. Что такое K и B? являются ли они переменными, потому что они не объявлены или не инициализированы в коде, который вы указали. Поэтому он пытается найти ячейку в строке 0, которой не существует.

Если вы хотите, чтобы указать буквенно-цифровой расположение ячейки, используйте Range("K1") или Cells(1, "K") имея в виду, что строка выходит первый

Кроме того, есть несколько других проблем с вашим кодом, который не будет делать то, что вы хочу, чтобы это делалось.

  1. Если ячейки (K, 1) .Value < Cells (В, 2) .Value Тогда

Даже если вы исправить ссылку на ячейку К1 и В2, каждая итерация вашей петли сравнивая K1 и B2.

  1. Клетки (columnCounter, lastRow) .Interior.Color = vbYellow

Опять параметры, которые идут здесь должны быть грести сначала тогда столбец. Кроме того, переменная lastRow никогда не изменяется, вы назначили ее 6, и она будет равна 6 для каждой итерации цикла

Для чего вы занимаетесь, по крайней мере, вам понадобятся 2 вложенных цикла для прохождения строк и столбцов ! Я написал несколько примеров кода для вас. дайте мне знать, если вам нужна дополнительная помощь

Sub Highlight() 

Dim firstColumn As Integer 
Dim lastColumn As Integer 
Dim firstRow As Integer 
Dim lastRow As Integer 
Dim rowCounter As Integer 
Dim columnCounter As Integer 

firstColumn = 9 
firstRow = 2 
lastColumn = 32 
lastRow = 6 

For columnCounter = firstColumn To lastColumn 
    For rowCounter = firstRow To lastRow 
     If Cells(1, columnCounter) < Cells(rowCounter, "B") Then 
      Cells(rowCounter, columnCounter).Interior.Color = vbYellow 
     End If 
    Next rowCounter 
Next columnCounter 

End Sub 
+0

+ 1 Nicely объяснил. –

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