Я пытаюсь создать лист, на котором отображается цвет, определенный пользователем RAL.У меня есть 2 листа: «данные» и «лист1».Таблица данных содержит таблицу цветов RAL (+ некоторые другие исходные данные, не относящиеся к этой проблеме) - таблица называется «Цвет» и выглядит следующим образом:
В Sheet1 у меня есть ячейка (B10), в которой разрешено содержать только данные из таблицы «Цвет [RAL]» (с использованием функции проверки данных).
У меня есть следующий код:
Private Sub Worksheet_Calculation()
Range("F10").Interior.Color = RGB( _
Application.VLookup(Range("B10"), Worksheets("data").Range("F1:J214"), 3), _
Application.VLookup(Range("B10"), Worksheets("data").Range("F1:J214"), 4), _
Application.VLookup(Range("B10"), Worksheets("data").Range("F1:J214"), 5) _
)
End sub
Первоначально я хотел использовать что-то вроде этого:
Private Sub Worksheet_Calculation()
Range("F10").Interior.Color = RGB( _
Application.VLookup(Range("B10"), color[RAL], 3), _
Application.VLookup(Range("B10"), color[RAL], 4), _
Application.VLookup(Range("B10"), color[RAL], 5) _
)
End sub
Однако это не скомпилируется.Поэтому я решил заняться жестким кодированием диапазона, поскольку он не будет изменяться часто, и нет проблем с изменением диапазона в коде.
В любом случае, когда я применяю тот же код (первый извыше), в то время как аргументы для VLookup находятся на одном листе (таблица данных + «проверочная ячейка»), все работает, как и ожидалось - я изменяю значение в ячейке (также используя функцию проверки данных), а желаемая ячейка меняет свой цвет.
В тот момент, когда я перемещаю таблицу на другой лист, она не обновляется автоматически - мне нужно запустить Sub вручную, чтобы изменить цвет.Он даже не меняется, когда я вручную пересчитываю рабочий лист (или рабочую книгу).
Есть идеи, почему происходит такое поведение и как его исправить?
Бонусный вопрос :) - есть ли способфактически ссылаться на таблицу Color, столбец RAL, в VLookup, вместо жесткого кодирования Range?