# ЗНАЧЕНИЕ Ошибка при установке свойства Interior.ColorIndex в Excel 2013 - PullRequest
0 голосов
/ 29 мая 2018

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

Код выглядит следующим образом:

Function HighlightRows() As Long
    Dim c As Long
    Dim i As Long
    Dim w As Worksheet


    Set w = ThisWorkbook.Worksheets("Sheet1")
    c = 0
    For i = 2 To w.UsedRange.Rows.Count
        If w.Cells(i, 11).Value = 1 Then
            c = c + 1
            w.Rows(i).Interior.ColorIndex = 3
        End If
    Next i

    HighlightRows = c

End Function

Когда я закомментирую код, который пытается установить свойство Interior.ColorIndex кода, кажется, что все работает правильно, и я получаю соответствующее количество, возвращаемое функцией (за исключением, конечно, того, что я не получаю выделение).

Я также попробовал следующее:

  • w.Cells (i, 11) .EntireRow.Interior.ColorIndex = 3
  • w.Range ("B"& i & ": O" & i) .Interior.ColorIndex = 3
  • w.Range (ячейки (i, 2), ячейки (i, 15)). Interior.ColorIndex = 3

Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Если есть желание, есть способ:

Function DoHighlight(what As Integer)
    ThisWorkbook.Worksheets("Sheet1").Cells(what, 1).EntireRow.Interior.ColorIndex = 3
End Function

Function HighlightRows() As Long
    Dim c As Long
    Dim i As Long
    Dim w As Worksheet
    Set w = ThisWorkbook.Worksheets("Sheet1")
    c = 0
    For i = 2 To w.UsedRange.Rows.Count
        If w.Cells(i, 11).Value = 1 Then
            c = c + 1
            Evaluate ("DoHighlight(" & i & ")")
        End If
    Next i

    HighlightRows = c

End Function

Смысл здесь в том, чтобы обойти ограничение, оценив кусок кода из строки, которая будет вызывать отдельную функцию для выполнения работывне функции формулы.

ПРИМЕЧАНИЕ: я бы рекомендовал против этого, изменение форматирования ячеек из формулы отключено по причине.используйте на свой страх и риск.

0 голосов
/ 29 мая 2018

Используйте Sub , а не функцию :

Sub HighlightRows()
    Dim c As Long
    Dim i As Long
    Dim w As Worksheet


    Set w = ThisWorkbook.Worksheets("Sheet1")
    c = 0
    For i = 2 To w.UsedRange.Rows.Count
        If w.Cells(i, 11).Value = 1 Then
            c = c + 1
            w.Rows(i).Interior.ColorIndex = 3
        End If
    Next i

    MsgBox c

End Sub

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...