Вопрос: Как я могу вызвать макрос Excel, наведя указатель мыши на ячейку?


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


2
2017-08-24 23:34


Источник




Ответы:


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


2
2017-08-25 00:14



вы человек маловерии;) это было сделано, и оно прекрасно работает. - optionexplicitvba.blogspot.com/2012/06/... - jony


Пока нет официального события 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, чтобы избежать #VALUE! сообщение об ошибке, потому что ваша функция не должна обновлять ячейку (но уходит с ней, так как она вызывается в HYPERLINK).


2
2017-08-25 01:24





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


1
2018-03-14 15:54



Я скажу так: гиперссылка - неправильный способ сделать это, даже если это «круто», как это работает (частично работает, в любом случае). Вместо этого просто создайте ярлык. Поместите свой код наведения под своим событием MouseMove. Это так просто. Вы также можете сделать ярлык прозрачным, что я предпочитаю делать, чтобы содержимое ячейки отображалось, а не ярлык. Одним из примеров того, что нужно кодировать под MouseMove, является создание формы (с использованием .AddShape) с текстом, затем. Удалите ее через секунду или два. - MicrosoftShouldBeKickedInNuts


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


1
2018-01-12 15:17