Окрашивание ссылочной ячейки (Excel, VBA) - PullRequest
0 голосов
/ 12 апреля 2020

Если у меня есть столбец ссылочных чисел, и я хотел бы автоматически покрасить ссылочную ячейку после щелчка правой кнопкой мыши, как я могу обратиться к ссылочной ячейке в VBA. В примере у меня есть ссылочные значения в столбце [O]. В [O4] у меня есть значение [= $ G $ 12]. Если я нажму на [O4], я хочу раскрасить его вместе со справочной ячейкой G12. Это был бы дополнительный шаг, который я хотел бы также покрасить в ячейку выше [G12]. Я попытался вставить это в формулу:

REPLACE(SUBSTITUTE(FORMULATEXT($O$4),"$",""),1,1,"")

, которая вернула бы контрольную ячейку [G12] в нормальном листе Excel без знака равенства, но скрипт не работает с ней.

Заранее спасибо за поддержку!

Select Case Target.Address
        Case "$O$4" '<~ if cell A1 is clicked, highlight cells C5-C9 yellow
          Cancel = True
          If .Range("O4,G11:G12").Interior.Color = RGB(255, 153, 0) Then
             .Range("O4,G11:G12").Interior.Color = RGB(255, 255, 255)
             .Range("O4,G11:G12").Font.Bold = False
        Else: .Range("O4,G11:G12").Interior.Color = RGB(255, 153, 0)
              .Range("O4,G11:G12").Font.Bold = True
          End If
End Select

Ответы [ 3 ]

0 голосов
/ 12 апреля 2020

вы можете использовать Precedents свойство Range объект:

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Select Case Target.Address
        Case "$O$4"
            Cancel = True

            Dim rng As Range
            Set rng = Target.Precedents
            If rng Is Nothing Then
                Set rng = Target
            Else
                Set rng = Union(Target, rng, rng.Offset(-1))
            End If
            If rng.Interior.Color = RGB(255, 153, 0) Then
                rng.Interior.Color = RGB(255, 255, 255)
                rng.Font.Bold = False
            Else
                rng.Interior.Color = RGB(255, 153, 0)
                rng.Font.Bold = True
            End If

    End Select
End Sub
0 голосов
/ 13 апреля 2020

Большое спасибо вам обоим. Наконец, это работает. У меня есть дополнительный вопрос, чтобы уменьшить длину кода.

Давайте рассмотрим его как блок для окрашивания ячеек, если я нажму на ячейку [O4]. Если я не хочу повторять этот блок много раз, но хочу одну и ту же функцию для диапазона [O4: O45] с соответствующим содержанием ссылки, как я могу это сделать? Извините, я не настолько опытен в кодировании, но пока очень доволен результатом. Большое спасибо!

0 голосов
/ 12 апреля 2020

Попробуйте этот подход, пожалуйста:

Dim strForm As String, newRng As Range
 Select Case Target.Address
        Case "$O$4" '<~ if cell A1 is clicked, highlight cells C5-C9 yellow
          Cancel = True
          strForm = Target.Formula
          'split string formula on "$" character and use the array obtained elements, to build the new address
          Set newRng = Range(Range(Split(strForm, "$")(1) & Split(strForm, "$")(2) - 1).Address & ":" & _
                                            Range(Split(strForm, "$")(1) & Split(strForm, "$")(2)).Address)
          If Range(Target.Address(0, 0) & "," & newRng.Address).Interior.Color = RGB(255, 153, 0) Then
             Range(Target.Address(0, 0) & "," & newRng.Address).Interior.Color = RGB(255, 255, 255)
             Range(Target.Address(0, 0) & "," & newRng.Address).Font.Bold = False
        Else: Range(Target.Address(0, 0) & "," & newRng.Address).Interior.Color = RGB(255, 153, 0)
              Range(Target.Address(0, 0) & "," & newRng.Address).Font.Bold = True
          End If
End Select
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...