2

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

4 ответа4

2

В Excel VBA нет OnMouseOver. Я не верю, что это можно сделать.

2

Хотя формального события 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).

1

Подход HYPERLINK хорош, очень проницателен, но все еще глубоко ограничен. Например, вы не можете даже иметь sStr = "" в коде UDF (обратите внимание, результаты могут отличаться в зависимости от версии Excel). Намного лучше - прозрачная (или даже непрозрачная) метка, которая имеет свойство MouseMove. Поместите свой код вместо этого. (Я нашел ссылку на видео, которая почти идеально подходит для вас, шаг за шагом, в течение 4 минут, с еще лучшими комментариями; если бы я создал пошаговое руководство, вы бы потратили полчаса :) , Но если я покажу ссылку, Stack Exchange [снова] удалит это сообщение, так что пишите мне, если хотите, и я постараюсь ответить в течение нескольких дней.)

1

Вы можете использовать прозрачную метку 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 не сработает, но по ячейкам за ним можно щелкнуть (и наоборот).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .