Ошибка компиляции события VBA Excel с событием MouseMove на командной кнопке - PullRequest
0 голосов
/ 17 мая 2011

Я пытаюсь использовать событие MouseMove с командной кнопкой, но не могу понять, как предотвратить следующую ошибку:

Ошибка компиляции: Объявление процедуры не соответствует описанию события или процедуры с тем же именем.

Код очень прост. Я использовал здесь «фиктивный» код, потому что никогда не смогу войти в обработчик событий, чтобы получить что-то полезное.

Private Sub Button_Name_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  Dim X as Integer
  x = x+1
End Sub

Я взял список параметров непосредственно из браузера объектов. Я получаю аналогичные результаты с другими событиями, включая DblClick (), но не Click (). Я думаю, что я, должно быть, делаю фундаментальную ошибку, но не смог ее идентифицировать. Помогите!

Ответы [ 2 ]

2 голосов
/ 17 мая 2011

Я не совсем понимаю, почему вы взяли список параметров непосредственно из браузера объектов .Если у вас есть код вашей пользовательской формы, открытый в окне VBA, вы можете выбрать командную кнопку в раскрывающемся списке слева над кодом и событие MouseMove в раскрывающемся списке справа.Затем необходимый код вставляется автоматически.Он будет немного отличаться от вашего кода:

Private Sub CommandButton1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal Y As Single)

End Sub

Следующая ошибка, с которой вы столкнетесь, - это повторное объявление X .Это уже параметр подпрограммы.Таким образом, вы не можете повторно использовать его в подпрограмме.

Когда эти две вещи будут исправлены, событие перемещения мыши будет срабатывать даже на командную кнопку.

1 голос
/ 17 мая 2011

Ошибка возникает из-за того, что вы изменили спецификацию аргумента по умолчанию (вы удалили ByVal). Соответствующие спецификации аргументов появляются автоматически, если вы выберете MouseMove в правом верхнем раскрывающемся меню в редакторе VBA (после выбора кнопки в верхнем левом раскрывающемся меню). Спецификация аргумента не должна изменяться, иначе она не будет работать. VBA ожидает этот конкретный список аргументов, и если он найдет что-то другое, он не скомпилируется. (Единственное, что вы можете изменить, - это имя переменных аргумента, но не более того.)

Это работает:

Private Sub CommandButton1_MouseMove(ByVal Button As Integer, _
    ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

    X = X + 1 ' or whatever you need to do with X and Y
    MsgBox "MouseMove! " & X & " " & Y

End Sub

Должен признать, я считаю, что использование события MouseMove для командной кнопки - довольно необычная вещь, но, может быть, у вас есть свои причины? Я бы очень хотел их услышать.

Также, как указывает @Codo, вы не должны повторно объявлять X внутри Sub. Он уже был объявлен в качестве аргумента Sub, и вы можете использовать его сразу (например, X = X + 1 или любой другой). Вам не нужно повторно декларировать его, используя Dim - на самом деле, это даст ошибку во время компиляции.

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