Ограничение в макросе с использованием клавиатуры Excel VBA - PullRequest
0 голосов
/ 04 марта 2019

Я энтузиаст и новичок в VBA.Я пишу код для рабочей книги, которая управляет статистикой игры.

Первоначально отметьте на площадке (определяется по дальности), откуда произошел удар и судьба между лучами - Маяк (определяется по другой дальности).Для этого я создал макрос с сочетанием клавиш Ctrl + Shift + X, когда он не является целью, и Ctrl + Shift + O, когда он является целью.Макрос на данный момент добавляет индекс x +.Этот индекс взят из общего количества ударов, которые хранятся в ячейке, которой манипулируют вручную (на данный момент).То есть, если ячейка, содержащая TotalShootP1TA (Total Kick игрока 1 команды), содержит в общей сложности 10 ударов в игре, то в момент вызова макроса маркер x10 будет добавлен в активную ячейку.Что должно произойти с целью макроса.Например, во время 11-го удара по цели маркер o11 будет вставлен в активную ячейку.Как показано на рисунке.

image

Однако моя проблема заключается в том, что мне нужно вызвать мой макрос 2x, чтобы зарегистрировать (1) в блоке, откуда происходит ударбыл и (2) где он шел под балками.

Следствием этого является ошибочная регистрация, как если бы было 2 раза ударов, таким образом увеличивая ячейку NGoalP1TA (не Goal Player1 TeamA) в 2 раза, потому что каждый раз, когда она вызывается, она добавляет 1: Range (" NGoalP1TA ").Value = Range (" NGoalP1TA ").

То есть мне нужен способ зарегистрировать, сколько раз мой макрос вызывался.Один из способов, которым я думал об этом, заключался в выполнении условного цикла во время нажатия клавиш.Например, до тех пор, пока вы не нажали Ctrl + Shift + Q, код будет оставаться в то время.Вам может понравиться это:

  1. Марк внутри двора.
  2. Изменить активную ячейку.
  3. А затем отметьте тем же индексом под балками.
  4. Наконец, нажав Ctrl + Shift + Q, код будет отключен при вызове переменной NGoalP1TA (не Goal Player1 TeamA) один раз.

Даже читая о методах Application.OnKey, я не смог написать функциональный код.

Однако я даже не уверен, сработает ли это.Простое значение for не разрешено, поскольку оно не позволяет изменить активную ячейку.

Приветствуются другие предложения.

Эскиз кода, который, я думаю, будет работать:

Sub NotGoal()
    ' NotGoal Macro
    ' Atalho do teclado: Ctrl+Shift+X
    '
    Dim NGoalP1TA As Integer
    Dim TotalShootP1TA As Integer
    DO WHILE CTRL+SHIFT+Q
        If Not Intersect(ActiveCell, Range("CourtP1TA")) Is Nothing Or Not
            Intersect(ActiveCell, Range("BalizaP1TA")) Is Nothing Then
            MsgBox ("if Intersect")
            ActiveCell.FormulaR1C1 = "x" & Range("TotalShootsP1TA").Value
        Else
            MsgBox ("else Intersect!")
        End If
    LOOP
    Range("NGoalP1TA").Value = Range("NGoalP1TA").Value + 1
End Sub

Текущий код:

Sub NotGoal()
    ' NotGoal Macro
    ' Atalho do teclado: Ctrl+Shift+X
    '
    Dim NGoalP1TA As Integer
    Dim TotalShootP1TA As Integer
    If Not Intersect(ActiveCell, Range("CourtP1TA")) Is Nothing Or Not
        Intersect(ActiveCell, Range("BalizaP1TA")) Is Nothing Then
        MsgBox ("if Intersect")
        ActiveCell.FormulaR1C1 = "x" & Range("TotalShootsP1TA").Value
        Range("NGoalP1TA").Value = Range("NGoalP1TA").Value + 1
    Else
        MsgBox ("else Intersect!")
    End If
End Sub
...