Object Cell / Range не поддерживает свойство .ont в VBA - PullRequest
1 голос
/ 29 мая 2019

Я пытаюсь раскрасить ячейки кода, чтобы предупредить пользователя о том, какие данные ячейки неверны, прежде чем выполнять вычисления.В настоящее время выбрасывается:

ошибка времени выполнения. Объект 438 не поддерживает свойство

при попытке выполнить все данные.

Основное созданиерабочий лист, позволяющий пользователю вводить некоторые данные в состав, а затем на основе некоторых внутренних данных / ограничений выкладывать ответ о том, что он может / не может делать.У меня уже есть уровень проверки ошибок в исходном коде, когда пользователь вводит данные (в основном, чтобы попытаться убедить их убедиться, что вводимые данные действительны до того, как они попытаются выполнить вычисления), и это прекрасно работает, используяподпрограмма Worksheet_Change, которая может циклически проходить по всем ячейкам по одной (в пределах целевого диапазона), не стоит беспокоиться.

Если я попытаюсь повторить это (используя именованный диапазон вместо целевых ячеек из функции изменения), кажется,сделать одну из двух вещей: он попытается отправить через ряд ячеек, а не по отдельным ячейкам, и потерпит неудачу, когда попытается сопоставить данные из «ячеек», а не из одной ячейки, которую он должен пытаться сопоставить, ИЛИ это будетвыдает ошибку 438, когда пытается ее закрасить.

Private Sub CommandButton1_Click()
    Dim ErrorWagonPack As Boolean, ErrorCellsNotEmpty As Boolean, WagonPack As Integer, cel As Range, Target As Range

    ErrorWagonPack = False
    ErrorCellsNotEmpty = False
    Set Target = Application.Range("ConsistInput")

    For Each cel In Target 'issue is here somewhere I think. It's related to how the cel is created and as such what properties it can have
        Application.EnableEvents = False
        WagonPack = 0
        If Len(cel.Value) > 0 Then
            WagonPack = Application.Index(Application.Range("WagonData"), Application.Match(cel.Value, Application.Range("WagonData").Columns(1), 0), 4)
            If cel.Offset(0, 1).Value Mod WagonPack > 0 Then
                ErrorWagonPack = True
                cel.Font.ColourIndex = RGB(156, 0, 6) '438 error here
                cel.Interior.ColourIndex = RGB(255, 199, 206) '438 error here too
            End If
        End If
    Next cel

If ErrorWagonPack = True Or ErrorCellsNotEmpty = True Then
    Exit Sub
End If

'calculate stuff
Application.EnableEvents = True
End Sub

В идеале я бы хотел добраться до точки, где я запускаю код, закрашиваю ячейки, вызывающие проблемы / с неверными данными, а затем, если неНе выбрасывайте переменные ошибки, запустите расчет, но ошибка 438, кажется, является камнем преткновения.Я почти готов поспорить, что это что-то простое, что я просто скучаю, но не могу понять это.Вероятно, это не поможет, я все еще довольно зелен с VBA.

Ответы [ 2 ]

2 голосов
/ 29 мая 2019

.ColorIndex неверно.Используйте .Color

Private Sub CommandButton1_Click()
    Dim ErrorWagonPack As Boolean, ErrorCellsNotEmpty As Boolean, WagonPack As Integer, cel As Range, Target As Range

    ErrorWagonPack = False
    ErrorCellsNotEmpty = False
    Set Target = Application.Range("ConsistInput")

    For Each cel In Target 'issue is here somewhere I think. It's related to how the cel is created and as such what properties it can have
        Application.EnableEvents = False
        WagonPack = 0
        If Len(cel.Value) > 0 Then
            WagonPack = Application.Index(Application.Range("WagonData"), Application.Match(cel.Value, Application.Range("WagonData").Columns(1), 0), 4)
            If cel.Offset(0, 1).Value Mod WagonPack > 0 Then
                ErrorWagonPack = True
                cel.Font.Color = RGB(156, 0, 6) '438 error here
                cel.Interior.Color = RGB(255, 199, 206) '438 error here too
            End If
        End If
    Next cel

If ErrorWagonPack = True Or ErrorCellsNotEmpty = True Then
    Exit Sub
End If

'calculate stuff
Application.EnableEvents = True
End Sub
1 голос
/ 29 мая 2019

Свойство .ColorIndex находится в диапазоне от 1 до 56:

Sub TestMe()

    Dim cel As Range
    Set cel = Worksheets(1).Range("A1")
    cel.Interior.ColorIndex = 1
    cel.Font.ColorIndex = 20

End Sub

2 значения RGB идут дальше 56:

Sub TestMe()

    Debug.Print RGB(156, 0, 6)          '393372
    Debug.Print RGB(255, 199, 206)      '13551615

End Sub

Таким образом, единственными значениями, которые можно безопасно использовать, являются 56 красных значений, между:

cel.Font.ColorIndex = RGB(56, 0, 0)

и

cel.Font.ColorIndex = RGB(1, 0, 0)

В качестве альтернативы, без использования ColorIndex Range().Font.Color поддерживает полные значения RGB:

Range("A1").Font.Color = RGB(100, 20, 255)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...