У меня есть значения в столбце D листа (Sheet2) в рабочей книге, значения которых получены из формулы, чтобы получить только последнюю часть более длинных значений в ячейках столбца C. Более длинные значения автоматически вводятся в столбец C двойным щелчком мыши. На отдельном листе (Sheet5) у меня есть список значений в столбце C этого листа. Если какое-либо из значений в столбце D в Sheet2 равно любому из значений в столбце C в Sheet5, я хочу, чтобы ячейка в столбце F в Sheet2 стала красной. Как только ячейка столбца F в Sheet2 станет красной, в зависимости от значения в столбце D, я хочу, чтобы ячейка красного цвета стала активируемой, что приведет пользователя к другому листу со ссылочными значениями, связанными со значением в столбце D. Код ниже делает именно это. Однако я хотел бы избежать жесткого кодирования различных значений, для которых требуются ссылочные коды, в ожидании того, что некоторые значения, для которых требуется ссылочный код, будут добавлены или удалены из списка в столбце C Листа 5 в будущем.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range: Set c = Union(Range("D7:D446"), Range("F7:F446"))
Dim CellF As Range, CellD As Range, Cell As Range
If Not Application.Intersect(c, Range(Target.Address)) Is Nothing Then
Set CellF = Range("F" & Target.Row)
Set CellD = Range("D" & Target.Row)
If CellF.Value <> "" And getMacroDictionary.Exists(CellD.Text) Then
CellF.Interior.ColorIndex = 3
Else
CellF.Interior.ColorIndex = 0
End If
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim key As String, dic As Object
Set sourceRange = Nothing
If Target.Column = 6 And Target.Cells.Count = 1 And Target.Interior.ColorIndex = 3 Then
Set sourceRange = Target
Set dic = getMacroDictionary
key = Target.Offset(0, -2).Value2
If dic.Exists(key) Then Application.Run dic(key)
End If
End Sub
Function getMacroDictionary() As Object
Dim dic As Object
Set dic = CreateObject("SCripting.Dictionary")
dic.Add "1000GP", "gotoref1"
dic.Add "1000MM", "gotoref2"
dic.Add "19FEST", "gotoref3"
dic.Add "20IEDU", "gotoref4"
dic.Add "20ONLC", "gotoref5"
dic.Add "20PART", "gotoref6"
dic.Add "20PRDV", "gotoref7"
dic.Add "20SPPR", "gotoref8"
dic.Add "22DANC", "gotoref9"
dic.Add "22LFLC", "gotoref10"
dic.Add "22MEDA", "gotoref11"
dic.Add "530CCH", "gotoref12"
dic.Add "60PUBL", "gotoref13"
dic.Add "74GA01", "gotoref14"
dic.Add "74GA17", "gotoref15"
dic.Add "74GA99", "gotoref16"
dic.Add "78REDV", "gotoref17"
Set getMacroDictionary = dic
End Function
Я думал, что лучший способ избежать жесткого кодирования - создать массив. В первой части вы увидите закомментированный фрагмент кода, я пытался это сделать, но я не уверен, как можно вызывать разные макросы, поскольку они связаны с определенными значениями.
Заранее благодарю за любую помощь!