Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Позиционирование формы возле ячейки Excel 2007+ без Win API - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Мир MS Excel » Вопросы и решения » Готовые решения » Позиционирование формы возле ячейки Excel 2007+ без Win API (VBA)
Позиционирование формы возле ячейки Excel 2007+ без Win API
nerv Дата: Воскресенье, 07.07.2013, 12:06 | Сообщение № 1
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Всем привет

Выкладываю код для позиционирования формы пока есть свободная минута :).
Код основан на стандартных возможностях экселя делать это. Короткое описание:

mod_Functions - функции для перевода пикселей в точки и точек в пиксели
mod_GetDesktopMonitor - получение DPI системы и разрешения монитора
mod_GetRectForExcel2007Plus - получение прямоугольника координат ячейки в точках
mod_SetFormPosition - модуль позиционирования. Фиксит выход за пределы экрана, обрабатывает настройки и размещает форму
mod_Test - тестовый код

В данном тестовом файла форма вызывается двойным кликом по ячейке.

Можно задавать предпочтительную позицию формы при вызове процедуры позиционирования. Примеры:
[vba]
Код
Call SetFormPosition(Form, ActiveCell)

' Позиция задается в аргументах процедуры
' Call SetFormPosition(Form, ActiveCell, -1, 1, -1, -1)
' Call SetFormPosition(Form, ActiveCell, 1, 1, -1, 1)
' Call SetFormPosition(Form, ActiveCell, 1, 1, 1, 1)
' Call SetFormPosition(Form, ActiveCell, 1, -1, -1, -1)
[/vba]

Если кто-то знает, как получить рабочую область экрана без WinAPI, пишите )
К сообщению приложен файл: test.xlsm (35.0 Kb)


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
СообщениеВсем привет

Выкладываю код для позиционирования формы пока есть свободная минута :).
Код основан на стандартных возможностях экселя делать это. Короткое описание:

mod_Functions - функции для перевода пикселей в точки и точек в пиксели
mod_GetDesktopMonitor - получение DPI системы и разрешения монитора
mod_GetRectForExcel2007Plus - получение прямоугольника координат ячейки в точках
mod_SetFormPosition - модуль позиционирования. Фиксит выход за пределы экрана, обрабатывает настройки и размещает форму
mod_Test - тестовый код

В данном тестовом файла форма вызывается двойным кликом по ячейке.

Можно задавать предпочтительную позицию формы при вызове процедуры позиционирования. Примеры:
[vba]
Код
Call SetFormPosition(Form, ActiveCell)

' Позиция задается в аргументах процедуры
' Call SetFormPosition(Form, ActiveCell, -1, 1, -1, -1)
' Call SetFormPosition(Form, ActiveCell, 1, 1, -1, 1)
' Call SetFormPosition(Form, ActiveCell, 1, 1, 1, 1)
' Call SetFormPosition(Form, ActiveCell, 1, -1, -1, -1)
[/vba]

Если кто-то знает, как получить рабочую область экрана без WinAPI, пишите )

Автор - nerv
Дата добавления - 07.07.2013 в 12:06
Serge_007 Дата: Воскресенье, 07.07.2013, 12:10 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2748 ±
Замечаний: ±

Excel 2016
Цитата (nerv)
как получить рабочую область экрана без WinAPI

Код
=ИНФОРМ("источник")

Работает во всех версиях, независимо от ОСи


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Цитата (nerv)
как получить рабочую область экрана без WinAPI

Код
=ИНФОРМ("источник")

Работает во всех версиях, независимо от ОСи

Автор - Serge_007
Дата добавления - 07.07.2013 в 12:10
v__step Дата: Воскресенье, 07.07.2013, 13:35 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 27 ±
Замечаний: 0% ±

Разрешите выразить глубокое уважение
Давно слежу за этой очень не простой темой
Первый раз удивился, когда узнал, как задача решается с примененем невидимого объекта ChartObject - неожиданно, изящно surprised !
Второй раз, когда понял, что начиная с 2007 этот вариант перестал работать sad
Третий раз - когда познакомился с идеями, высказанными здесь и на Планете surprised
Так это еще не все...
Саш, я поклонник твоего таланта!


С уважением, Владимир
 
Ответить
СообщениеРазрешите выразить глубокое уважение
Давно слежу за этой очень не простой темой
Первый раз удивился, когда узнал, как задача решается с примененем невидимого объекта ChartObject - неожиданно, изящно surprised !
Второй раз, когда понял, что начиная с 2007 этот вариант перестал работать sad
Третий раз - когда познакомился с идеями, высказанными здесь и на Планете surprised
Так это еще не все...
Саш, я поклонник твоего таланта!

Автор - v__step
Дата добавления - 07.07.2013 в 13:35
nerv Дата: Вторник, 09.07.2013, 02:03 | Сообщение № 4
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Цитата (Serge_007)
=ИНФОРМ("источник")

и чем это поможет? biggrin

v__step, не преувеличивай smile


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
Сообщение
Цитата (Serge_007)
=ИНФОРМ("источник")

и чем это поможет? biggrin

v__step, не преувеличивай smile

Автор - nerv
Дата добавления - 09.07.2013 в 02:03
Serge_007 Дата: Вторник, 09.07.2013, 09:21 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2748 ±
Замечаний: ±

Excel 2016
Цитата (nerv)
и чем это поможет?
Не знаю
Ты задал вопрос - я на него ответил smile


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Цитата (nerv)
и чем это поможет?
Не знаю
Ты задал вопрос - я на него ответил smile

Автор - Serge_007
Дата добавления - 09.07.2013 в 09:21
v__step Дата: Вторник, 09.07.2013, 14:23 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 27 ±
Замечаний: 0% ±

Задача известна своей сложностью
Буллен, Бови, Грин в своих книгах очень серьезно обсуждают ее, предлагают решение (оно давно перестало работать sad ). Твои решения на сегодняшний день - единственные smile - это мотив моего искреннего уважения


С уважением, Владимир
 
Ответить
СообщениеЗадача известна своей сложностью
Буллен, Бови, Грин в своих книгах очень серьезно обсуждают ее, предлагают решение (оно давно перестало работать sad ). Твои решения на сегодняшний день - единственные smile - это мотив моего искреннего уважения

Автор - v__step
Дата добавления - 09.07.2013 в 14:23
Serge_007 Дата: Вторник, 09.07.2013, 16:21 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2748 ±
Замечаний: ±

Excel 2016
Цитата (v__step)
Задача известна своей сложностью »

Может я не понял чего...
Код
=ИНФОРМ("источник")
точно не использует API и возвращается абсолютная ссылка на левую верхнюю видимую в окне ячейку с учетом текущего состояния прокрутки как текст с префиксом "$A:".
Что мешает позиционировать форму используя эту формулу как переменную адреса на листе?


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Цитата (v__step)
Задача известна своей сложностью »

Может я не понял чего...
Код
=ИНФОРМ("источник")
точно не использует API и возвращается абсолютная ссылка на левую верхнюю видимую в окне ячейку с учетом текущего состояния прокрутки как текст с префиксом "$A:".
Что мешает позиционировать форму используя эту формулу как переменную адреса на листе?

Автор - Serge_007
Дата добавления - 09.07.2013 в 16:21
nerv Дата: Вторник, 09.07.2013, 21:32 | Сообщение № 8
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Может я не понял чего...

выделено красным https://disk.yandex.ru/public....JSHk%3D

Твои решения на сегодняшний день - единственные

zvi еще предлагал )

могу повторить: то, что форма выводится справа от ячейки, можно изменить в параметрах, передаваемых процедуре SetFormPosition. Т.е. она может выводится слева, сверху, снизу и т.д. Надо только единичками пожанглировать. Вместе с тем, если форма не помещается в пределах экрана, она будет расположена с противоположной стороны ячейки (верх/низ, лево/право) в зависимости от настроек.


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba


Сообщение отредактировал nerv - Вторник, 09.07.2013, 21:36
 
Ответить
Сообщение
Может я не понял чего...

выделено красным https://disk.yandex.ru/public....JSHk%3D

Твои решения на сегодняшний день - единственные

zvi еще предлагал )

могу повторить: то, что форма выводится справа от ячейки, можно изменить в параметрах, передаваемых процедуре SetFormPosition. Т.е. она может выводится слева, сверху, снизу и т.д. Надо только единичками пожанглировать. Вместе с тем, если форма не помещается в пределах экрана, она будет расположена с противоположной стороны ячейки (верх/низ, лево/право) в зависимости от настроек.

Автор - nerv
Дата добавления - 09.07.2013 в 21:32
v__step Дата: Среда, 10.07.2013, 13:57 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 27 ±
Замечаний: 0% ±

zvi еще предлагал

Точно, точно


С уважением, Владимир
 
Ответить
Сообщение
zvi еще предлагал

Точно, точно

Автор - v__step
Дата добавления - 10.07.2013 в 13:57
Rustem Дата: Четверг, 01.08.2013, 23:16 | Сообщение № 10
Группа: Проверенные
Ранг: Обитатель
Сообщений: 281
Репутация: 48 ±
Замечаний: 0% ±

Excel 2013
По позиционированию формы была тема у Чипа Пирсона, здесь:
http://www.cpearson.com/Excel/FormPosition.htm


WMR: R183220163895
 
Ответить
СообщениеПо позиционированию формы была тема у Чипа Пирсона, здесь:
http://www.cpearson.com/Excel/FormPosition.htm

Автор - Rustem
Дата добавления - 01.08.2013 в 23:16
nerv Дата: Пятница, 02.08.2013, 01:33 | Сообщение № 11
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

По позиционированию формы была тема у Чипа Пирсона, здесь
и? вы вообще его код глядели, пробовали? Он как бэ не работает должны ообразом, кроме того

Цитата
Note also that FormPositioner does not work on split windows or frozen panes. Support for split windows and frozen panes will be added in a later release.


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
Сообщение
По позиционированию формы была тема у Чипа Пирсона, здесь
и? вы вообще его код глядели, пробовали? Он как бэ не работает должны ообразом, кроме того

Цитата
Note also that FormPositioner does not work on split windows or frozen panes. Support for split windows and frozen panes will be added in a later release.

Автор - nerv
Дата добавления - 02.08.2013 в 01:33
StepInLik Дата: Понедельник, 19.08.2013, 11:52 | Сообщение № 12
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Если кому интересны другие решения поиска координат активного рейнджа (см. код в теме): http://www.cyberforum.ru/vba/thread821859.html#post4326950


Сообщение отредактировал StepInLik - Понедельник, 19.08.2013, 11:53
 
Ответить
СообщениеЕсли кому интересны другие решения поиска координат активного рейнджа (см. код в теме): http://www.cyberforum.ru/vba/thread821859.html#post4326950

Автор - StepInLik
Дата добавления - 19.08.2013 в 11:52
StepInLik Дата: Среда, 21.08.2013, 16:28 | Сообщение № 13
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
nerv, Уважаемый коллега, ваш код не работает, если происходит select ячейки в скрытом столбце или области листа "под закрепленными областями.

Ниже подправленный код (из опубликованного ранее по ссылке в посте выше) - в нем эта проблема тоже исправлена (код не хаять - писан на коленке. кто перепишет и сделает лучше - скажу спасибо):
К сообщению приложен файл: Example.xls (41.5 Kb)
 
Ответить
Сообщениеnerv, Уважаемый коллега, ваш код не работает, если происходит select ячейки в скрытом столбце или области листа "под закрепленными областями.

Ниже подправленный код (из опубликованного ранее по ссылке в посте выше) - в нем эта проблема тоже исправлена (код не хаять - писан на коленке. кто перепишет и сделает лучше - скажу спасибо):

Автор - StepInLik
Дата добавления - 21.08.2013 в 16:28
nerv Дата: Среда, 21.08.2013, 18:08 | Сообщение № 14
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

ваш код не работает, если происходит select ячейки в скрытом столбце или области листа "под закрепленными областями

насколько помню, это проблема решаема, но мне некогда этим заниматься ^_^

Ниже подправленный код (из опубликованного ранее по ссылке в посте выше) - в нем эта проблема тоже исправлена (код не хаять - писан на коленке. кто перепишет и сделает лучше - скажу спасибо)

у меня не запускается :)


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba


Сообщение отредактировал nerv - Среда, 21.08.2013, 18:09
 
Ответить
Сообщение
ваш код не работает, если происходит select ячейки в скрытом столбце или области листа "под закрепленными областями

насколько помню, это проблема решаема, но мне некогда этим заниматься ^_^

Ниже подправленный код (из опубликованного ранее по ссылке в посте выше) - в нем эта проблема тоже исправлена (код не хаять - писан на коленке. кто перепишет и сделает лучше - скажу спасибо)

у меня не запускается :)

Автор - nerv
Дата добавления - 21.08.2013 в 18:08
StepInLik Дата: Четверг, 22.08.2013, 10:18 | Сообщение № 15
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
nerv,
насколько помню, это проблема решаема, но мне некогда этим заниматься

пробовал. окно вылетает в левом верхнем углу.
у меня не запускается

в предложенном варианте - лишь функции определения координат. там нечего запускать. опубликовал лишь в ознакомительных целях способа решения данной проблемы. кому нужно - изучит, переделает и подключит. (кроме того, они определяют лишь примерные координаты ячейки).


Сообщение отредактировал StepInLik - Четверг, 22.08.2013, 10:19
 
Ответить
Сообщениеnerv,
насколько помню, это проблема решаема, но мне некогда этим заниматься

пробовал. окно вылетает в левом верхнем углу.
у меня не запускается

в предложенном варианте - лишь функции определения координат. там нечего запускать. опубликовал лишь в ознакомительных целях способа решения данной проблемы. кому нужно - изучит, переделает и подключит. (кроме того, они определяют лишь примерные координаты ячейки).

Автор - StepInLik
Дата добавления - 22.08.2013 в 10:18
nerv Дата: Четверг, 22.08.2013, 15:02 | Сообщение № 16
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Цитата (StepInLik, Четверг, 22.08.2013, 10:18 # 15)
пробовал. окно вылетает в левом верхнем углу

если у вас не получилось, это еще не значит, что у меня не получится :)

Цитата (StepInLik, Четверг, 22.08.2013, 10:18 # 15)
опубликовал лишь в ознакомительных целях способа решения данной проблемы

лично у меня ознакомится не получилось

Цитата (StepInLik, Четверг, 22.08.2013, 10:18 # 15)
кому нужно - изучит, переделает и подключит

вы телефон в магазине купили, а он не работает. Вы к продавцу - почему не работает? А он - "у нас все телефоны не работают. кому нужно - изучит, переделает и подключит"

Иными словами на данный момент я нахожу ваши ссылки/решения чуть менее бесполезными, чем полностью ;) Я пользователь. У меня "не работает".


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
Сообщение
Цитата (StepInLik, Четверг, 22.08.2013, 10:18 # 15)
пробовал. окно вылетает в левом верхнем углу

если у вас не получилось, это еще не значит, что у меня не получится :)

Цитата (StepInLik, Четверг, 22.08.2013, 10:18 # 15)
опубликовал лишь в ознакомительных целях способа решения данной проблемы

лично у меня ознакомится не получилось

Цитата (StepInLik, Четверг, 22.08.2013, 10:18 # 15)
кому нужно - изучит, переделает и подключит

вы телефон в магазине купили, а он не работает. Вы к продавцу - почему не работает? А он - "у нас все телефоны не работают. кому нужно - изучит, переделает и подключит"

Иными словами на данный момент я нахожу ваши ссылки/решения чуть менее бесполезными, чем полностью ;) Я пользователь. У меня "не работает".

Автор - nerv
Дата добавления - 22.08.2013 в 15:02
StepInLik Дата: Вторник, 27.08.2013, 11:32 | Сообщение № 17
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
nerv. Мое решение не для пользователей, а для тех, кто умеет программировать, интерисуется алгоритмами, занимается самообразованием и просто - не ленится думать (если его действительно волнует проблема позиционирования окна и нахождения координат ячейки на экране). Тем, кому не просто нужно вставить код и использовать, а тем, кто хочет понять - как это работает. Мое предложение - не магазин, это схема "сделай сам" если хочешь. Пусть будет так, да. Если вы - только пользователь, то это не для вас. Извините.
На счет получилось - не получилось. Фразы не понял. Это - игра слов?
 
Ответить
Сообщениеnerv. Мое решение не для пользователей, а для тех, кто умеет программировать, интерисуется алгоритмами, занимается самообразованием и просто - не ленится думать (если его действительно волнует проблема позиционирования окна и нахождения координат ячейки на экране). Тем, кому не просто нужно вставить код и использовать, а тем, кто хочет понять - как это работает. Мое предложение - не магазин, это схема "сделай сам" если хочешь. Пусть будет так, да. Если вы - только пользователь, то это не для вас. Извините.
На счет получилось - не получилось. Фразы не понял. Это - игра слов?

Автор - StepInLik
Дата добавления - 27.08.2013 в 11:32
Мир MS Excel » Вопросы и решения » Готовые решения » Позиционирование формы возле ячейки Excel 2007+ без Win API (VBA)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!