Ошибка возникает из-за того, что вы изменили спецификацию аргумента по умолчанию (вы удалили 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
- на самом деле, это даст ошибку во время компиляции.