SelectionChange - это событие, встроенное в модель объекта Excel для этого. Он должен делать то, что вам нужно, стрелять в любое время, когда пользователь нажимает где-нибудь ...
Я не уверен, что я понимаю ваши возражения против глобальных переменных здесь, вам понадобится только 1, если вы используете событие Application.SelectionChange , Тем не менее, вам не понадобится, если вы используете код класса рабочей книги позади (чтобы уловить событие Workbook.SelectionChange) или код класса рабочего листа (для захвата события Worksheet.SelectionChange). (Если ваша проблема не является проблемой с «глобальным изменением переменных» в VBA, для которой существует только одно решение: обработка ошибок во всем мире. Не допускайте никаких необработанных ошибок, вместо этого регистрируйте их и/или «мягкий отчет» в качестве сообщения поле для пользователя.)
Возможно, вам также понадобится захватить рабочие листы. Активные() и Worksheet.Deactivate() события (или эквивалент в классе рабочей книги) и/или Workbook.Activate и Workbook.Deactivate (), чтобы вы знали, когда пользователь переключил рабочие листы и/или книги. Окно активирует и деактивирует события, чтобы этот подход был завершен. Они все могут назвать ту же самую точную процедуру, однако все они обозначают одно и то же: пользователь изменил «фокус», если хотите.
Если вам не нравится VBA, кстати, вы можете сделать то же самое с помощью VB.NET или C#.
[Редактировать: Dbb очень хорошо указывает на событие SelectionChange, не набирая щелчок, когда пользователь нажимает текущую выбранную ячейку. Если вам нужно это сделать, вам нужно будет использовать подклассы.]
Хм, проблема в том, что я хочу поймать, в какой ячейке она была, и иметь произвольное количество строк, которые я хочу поймать, вместе с линией, в которую он попал (SelectionChange вручает мне хороший диапазон для этого) ... – haslo 2008-10-07 14:46:09
И пользователь должен иметь возможность легко редактировать лист тоже без ограничений, таких как «вам придется нажать эту кнопку, если вы добавите новую строку вручную, это не сработает». Но я абсолютно уверен, что на самом деле нет способа (VBA меня еще не удивляет), я мог бы официально принять ваш ответ ... – haslo 2008-10-07 14:47:55