Я не смог понять, как запустить макрос Excel, наведя указатель мыши на одну или несколько ячеек в моей электронной таблице.
4 ответа
В Excel VBA нет OnMouseOver. Я не верю, что это можно сделать.
Хотя формального события OnMouseOver не существует, вы можете собрать хак VBA, чтобы обойти его. Это предполагает использование функции HYPERLINK. Там более подробно здесь, но в итоге:
Если вы создаете новый модуль VBA, а затем добавляете пользовательскую функцию, чтобы делать то, что вы хотите:
Public Function OnMouseOver()
Sheet1.Range("A2").Value = "You hovered over a cell"
End Function
Затем вы можете получить к нему доступ через вызов HYPERLINK:
=IFERROR(HYPERLINK(OnMouseOver(),"Click here"), "Click here")
Обратите внимание, что оно обернуто внутри IFERROR, чтобы избежать # ЗНАЧЕНИЯ! сообщение об ошибке, потому что ваша функция не должна обновлять ячейку (но сходит с рук, как она вызывается в HYPERLINK).
Подход HYPERLINK хорош, очень проницателен, но все еще глубоко ограничен. Например, вы не можете даже иметь sStr = "" в коде UDF (обратите внимание, результаты могут отличаться в зависимости от версии Excel). Намного лучше - прозрачная (или даже непрозрачная) метка, которая имеет свойство MouseMove. Поместите свой код вместо этого. (Я нашел ссылку на видео, которая почти идеально подходит для вас, шаг за шагом, в течение 4 минут, с еще лучшими комментариями; если бы я создал пошаговое руководство, вы бы потратили полчаса :) , Но если я покажу ссылку, Stack Exchange [снова] удалит это сообщение, так что пишите мне, если хотите, и я постараюсь ответить в течение нескольких дней.)
Вы можете использовать прозрачную метку ActiveX (.BackStyle = fmBackStyleTransparent
, .Visible = True
) над ячейками и обработайте событие MouseMove
:
Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Debug.Print Button, Shift, X, Y
End Sub
Когда лейбл .Visible
имеет значение False, событие MouseMove
не сработает, но по ячейкам за ним можно щелкнуть (и наоборот).