Мне нужно запустить макрос в предыдущей ячейке после нажатия на другую и внести некоторые другие изменения модификации - PullRequest
0 голосов
/ 14 января 2019

По сути, я пытаюсь создать этот лист макроса Excel, чтобы при нажатии на любую ячейку (в пределах области таблицы) и вводе какого-либо значения, тогда, если оно равно сумме значений ключа (как показано на прилагаемом изображении) эта строка и столбец изменяет цвет ячейки или сохраняет его.

enter image description here

Sub Add_Nos()

Dim r As Integer
Dim c As Integer
Dim active As Integer

r = Worksheets("Sheet1").Cells(ActiveCell.Row, "A").Value
c = Wor

Worksheets("Sheet1").Cells(1, ActiveCell.Column).Value

active = ActiveCell.Value
If active = r + c Then        
    ActiveCell.Interior.ColorIndex = 4
Else
    ActiveCell.Interior.ColorIndex = 0
End If

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Selection.Count = 1 Then
    Call Add_Nos
End If

End Sub

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

=> Кроме того, я хочу заблокировать значения ключевых ячеек и изменить их цвет, чтобы сохранить их визуально дифференцированными.

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Как уже упоминалось в imgur комментариях , переходите к условному форматированию! See exemple

Это уравнение делает ячейку красным, если значение ячейки не равно сумме строки и столбца. Вы можете заменить <> на = и изменить формат на зеленый цвет, и теперь у вас есть полная противоположность (ячейки с хорошими значениями выделены зеленым цветом). Не забывайте $ (или его отсутствие) в вашем диапазоне, поскольку именно это делает это эффективным.

0 голосов
/ 14 января 2019

Я думаю, что приведенный ниже код - это то, чего вы пытаетесь достичь:

Option Explicit


Sub Add_Nos(myRow As Long, myCol As Long, ByRef myTarget As Range)

Dim r As Long, c As Long

With Worksheets("Sheet1")
    r = .Cells(myRow, "A").Value
    c = .Cells(1, myCol).Value
End With

If myTarget.Value = r + c Then
    myTarget.Interior.ColorIndex = 4
Else
    myTarget.Interior.ColorIndex = 0
End If

End Sub

'===============================================================

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Cells.Count = 1 Then
    Add_Nos Target.Row, Target.Column, Target
End If

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