2017-01-02 4 views
0

Я довольно новичок в VBA и с трудом отлаживаю блок кода ниже. Моя цель состоит в том, чтобы окрасить код в некоторые строки (например, 5% из них) на активном листе на основе содержимого ячеек в столбце 7. Код ошибки - это ошибка времени выполнения «1004»: ошибка, определяемая приложением или объектная ошибка. Любую помощь или указатели будут очень благодарны.Как рабочий лист с цветовым кодом, использующий для .. Следующий цикл и выбор случая?

Редактировать: lastRow хорошо работает в других блоках кода, и он объявлен и назначен ранее в программе, поэтому я в настоящее время не подозреваю, что это проблема.

' Color code data based on strings or numbers found in column 7 
    Dim lastRow as Integer 
    lastRow = 9,000 
    Dim blockStatus As Variant 

    For blockRow = 3 To lastRow 
' the following row triggers runtime error  
    blockStatus = ActiveWorkbook.ActiveSheet.Range(Cells(blockRow, 7)).Value 
     Select Case blockStatus 
      Case Is = "ADMIN*" 
      Range(Cells(blockRow, 1), Cells(blockRow, 11)).Font.Bold = True 
      Case Is = "OTHER*" 
      Range(Cells(blockRow, 1), Cells(blockRow, 11)).Font.Color = RGB(192, 0, 0) 
      Case Is = "*@*" 
      Range(Cells(blockRow, 1), Cells(blockRow, 11)).Font.Color = RGB(0, 176, 80) 
      Case Else 
     End Select 
    Next blockRow 
+0

Вы должны присвоить значение *** lastRow ***. Вот почему 'Cells()' умирают. –

+0

Извините, я отредактировал бит кода здесь, чтобы решить это. В полной программе макросов lastRow объявляется и назначается до того, как программа попадет в этот блок. – FrogLegs

+0

Попробуйте изменить blockStatus = ActiveWorkbook.ActiveSheet.Range (Ячейки (blockRow, 7)). Значение blockStatus = ActiveSheet.Cells (blockRow, 7) – Absinthe

ответ

0

комментарий абсента решает свою ошибку (параметры для диапазона могут быть либо адрес, или две клетки).

Я считаю, почему ваш код не делает то, что вы ожидаете, это то, что вы намереваетесь выполнить свой оператор Case для выполнения операции Like на упомянутых строках.

Если да, то изменить код следующим образом:

With ActiveSheet 
    For blockRow = 3 To lastRow 
     blockStatus = .Cells(blockRow, 7).Value 
     With .Range(.Cells(blockRow, 1), .Cells(blockRow, 11)) 
      Select Case True 
       Case blockStatus Like "ADMIN*" 
        .Font.Bold = True 
       Case blockStatus Like "OTHER*" 
        .Font.Color = RGB(192, 0, 0) 
       Case blockStatus Like "*@*" 
        .Font.Color = RGB(0, 176, 80) 
       Case Else 
      End Select 
     End With 
    Next blockRow 
End With 

(Примечание. Это невозможно сделать Case Like "ADMIN*", поэтому я использовал довольно неинтуитивными Select Case True с Case таких заявлений, как Case blockStatus Like "ADMIN*")

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

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