Изменение значения ячейки с помощью Excel VBA, если эта ячейка является частью несмежного диапазона - PullRequest
2 голосов
/ 13 февраля 2020

У меня есть семь ячеек "N13", "D17", "H17", "L17", "P17", "T17" и "X17". Это все пусто. У меня есть несколько фигур, к которым будут прикреплены макросы. Макрос, который мне нужен для написания справки, должен проверить, является ли текущая выбранная ячейка частью этого диапазона из семи ячеек. Если он входит в диапазон из семи ячеек, то макрос, прикрепленный к фигуре, просто поместит число в эту ячейку. Например, я выбрал ячейку L17, она активна, я нажимаю на квадратную форму, и она меняет значение ячейки L17 на 4. (Количество сторон фигуры.) Если я выбрал ячейку M17 и щелкаю квадрат форма это не добавляет 4 к клетке, это просто ничего не делает. Рабочий лист, на котором это происходит, называется «Главный». Я пробовал вложенный набор операторов OR, но это не сработало, и я думаю, что мне нужно сделать какую-то форму пересечения, но я не уверен, как это сделать.

Sub Three_Side()
' Three_Side Macro

    Sheets("Main").Select
    If (ActiveCell.Row = 13 And ActiveCell.Column = 14) Or _
        (ActiveCell.Row = 17 And ActiveCell.Column = 4) Or _
        (ActiveCell.Row = 17 And ActiveCell.Column = 8) Or _
        (ActiveCell.Row = 17 And ActiveCell.Column = 12) Or _
        (ActiveCell.Row = 17 And ActiveCell.Column = 16) Or _
        (ActiveCell.Row = 17 And ActiveCell.Column = 20) Or _
        (ActiveCell.Row = 17 And ActiveCell.Column = 24) Then
        ActiveCell = 3
        Range("AD1") = Range("AD1") + 3
    End If

End Sub

1 Ответ

2 голосов
/ 13 февраля 2020

Вы были на правильном пути с Intersect.

Dim checkRng as Range
Set checkRng = Intersect(ActiveCell, Range("N13,D17,H17,L17,P17,T17,X17"))

If Not checkRng is Nothing Then
    ActiveCell.Value = 3
    Range("AD1").Value = Range("AD1").Value + 3
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...