Новости:

Новая редакция правил форума: 2.4. Если вопрос или ответ содержится во вложенном файле, все-равно кратко описывайте в сообщении вопрос или суть решения. Это необходимо, чтобы тему можно было найти через поиск.

Главное меню

Как получить экранные координаты ячейки?

Автор Максим Рассохин, 05.08.2016, 17:09

« назад - далее »

Максим Рассохин

хочу получить экранные координаты ячейки, чтобы привязать (притянуть) диалоговое окно к ячейке. Как это сделать?
Проблема в том что координаты диалогового окна отсчитываются от левого верхнего угла экрана (физического)
А у меня пока получилось только считать свойства Target.Top и Target.Left, но они возвращают координаты от начала листа (от ячейки А1).
Кроме того нашел свойства смещение видимой области листа от первой ячейки Target.Application.ActiveWindow.VisibleRange.Top
и смещение окна документа в рабочей области окна Excel Target.Application.ActiveWindow.Top,
но они бесполезны, так как я не могу пересчитать их в экранные координаты.
Помогите. сейчас голова взорвется, пол дня справку изучаю, а толку ноль, .

Prist

Цитата: Максим Рассохин от 05.08.2016, 17:09
пол дня справку изучаю
Значит теперь придется еще полдня изучать что такое API. Потому что без API Вы экранные координаты не определите. Вам потребуются как минимум две функции API:
GetCursorPos
GetSystemMetrics

И здесь вроде как есть пример использования: Календарь на стандартных элементах, примеры использования
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
www.excel-vba.ru
Просто СПАСИБО [+оказать+]
Считаешь СПАСИБО мало? Яндекс.Деньги: 41001332272872; WM: R298726502453

Максим Рассохин

Спасибо. Я попробую этот вариант, думаю с WinAPI все немного проще, но, кажется эти функции возвращают координаты мыши, сойдет на первое время.
А хотелось бы все таки получить именно координаты ячейки.

Максим Рассохин

Пробовал просто вычесть координаты видимой области окна из координат ячейки, примерно так:
Target.Top - Target.Application.ActiveWindow.VisibleRange.Top + Target.Application.ActiveWindow.Top + 200
(здесь высота панели инструментов+ленты+заголовка заменена числовой константой, подобранной опытным путем)
вроде неплохо получилось, но при переходе к закрепленным ячейкам опять возникла ошибка, для них координаты видимой области вычитать не надо.
Можно конечно проверять закрепление ячеек и даже высоту панели инструментов (ленты, заголовков) вычислять, но алгоритм получается очень сложный, велика вероятность новых ошибок. Мне все таки кажется должен быть простой и надежный способ вычислить координаты ячеек.