Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/41: Рейтинг темы: голосов - 41, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 29

Как зафиксировать кнопку при скроллинге

25.06.2015, 17:24. Показов 9010. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!

Посоветуйте, как можно зафиксировать элемент управления при скроллинге?

Задача такая: имеется очень длинная таблица Excel, порядка 300 столбцов. Нужно создать что-то типо меню средствами элементов управления и разместить его в верхней части листа. При этом при скроллинге (либо при скрытии столбцов) элементы должны быть всегда видимыми. То есть они должны как бы "висеть" над листом.

Какие идеи?

Вариант зафиксировать первые столцы и там размещать отпадает, т.к. элементов много - "меню" пойдет в длину а не в ширь.

P.S. пробовала создать пользовательское меню, но не понравился интерфейс, который получается. В частности нужно компактно разместить 25 элементов при этом логически отделить их друг от друга..с этим и возникла проблема.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.06.2015, 17:24
Ответы с готовыми решениями:

Как зафиксировать меню без шапки при скроллинге?
подскажите,как сделать так,чтобы при скроллинге меню закреплялось вверху,но без шапки?

Зафиксировать меню в одном положении в области формы при ее скроллинге
Здравствуйте, появился такой вопрос, у меня на форме AutoScroll, а также стоит MenuStrip мне надо чтобы когда я перемещаюсь по форме с...

Как зафиксировать div-кнопку в одних координатах?
Всем привет. Такая проблема: есть у меня поп-ап окошко, которое появляется при нажатии на кнопку, так же и закрывается. Проблема в том, что...

24
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
25.06.2015, 17:59
Цитата Сообщение от anilonia Посмотреть сообщение
Какие идеи?
UserForm со свойством ShowModal=False
1
2049 / 479 / 133
Регистрация: 13.11.2008
Сообщений: 918
25.06.2015, 18:02
Почему закрепление не подходит? Ведь можно закрепить и строку и столбец. Оставляете первый столбец под элементы. Придаете ему ширину, достаточную для компромисса между доступностью элементов и рабочей областью. Тоже со строкой.
Еще можно форму сделать с кнопками и меню. Скомпоновать в группы можно при помощи MultiPage.
Или надстройку тогда делайте - все элементы будут на ленте. А иных вариантов просто нет.
1
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 29
25.06.2015, 18:29  [ТС]
у меня нужные стоблцы и строки итак зафискированы. Вариант с отдельным столбцом не подходит, т.к. съедает много места, единственное возможное использовать первые 5 строк..
прикрепляю скрин файла для наглядности

при создании надстройки возникла проблема с внешним видом - красиво расположить данные не получилось, не знаю как controls объединить в определённые смысловые группы - деятельность, период, сценарий и т.д. и отделить их друг от друга. Получается все скопом. поэтому решила сделать "меню" на самом листе.

Добавлено через 5 минут
А поподробнее насчет ShowModal?
я использую отдельные элементы activex на листе
Миниатюры
Как зафиксировать кнопку при скроллинге  
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
25.06.2015, 20:04
Цитата Сообщение от anilonia Посмотреть сообщение
А поподробнее насчет ShowModal?
Что именно? Создайте форму (просто пустую), пропишите в свойствах ShowModal=True, запустите прямо из VBE, попробуйте скролить лист под ней.
1
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 29
25.06.2015, 21:53  [ТС]
Так и сделала, но когда выводишь форму все остальные элементы становятся не активы, в том числе прокрутка..Нужно чтобы в момент работы формы можно было вносить изменения в листе и пользоваться всеми другими функциями excel
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
25.06.2015, 21:59
Лучший ответ Сообщение было отмечено anilonia как решение

Решение

anilonia, пардон, нужно наоборот ShowModal=False
1
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 29
25.06.2015, 22:48  [ТС]
Спасибо! Очень круто! Все работает!
Но я бы еще хотела попробовать с надстройкой разобраться
Может быть посоветуете, как можно в созданной надстройке command bar сгруппировать command button ? Нужно сделать красивое меню, чтобы все "чек боксы" были выровнены, сгруппированы и разделены разделителем?
0
2049 / 479 / 133
Регистрация: 13.11.2008
Сообщений: 918
26.06.2015, 00:20
Здесь нельзя выкладывать ссылки на другие сайты, могу в личку скинуть ссылку - я статью писал про надстройки. Как я понял - у Вас Excel не ниже 2007. А там можно красивые меню делать через XML-схемы.
2
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 29
26.06.2015, 00:53  [ТС]
Спасибо! Походу я именно эту статью и нашла. Сейчас делаю через ribbon editor ) шик блеск)

Добавлено через 11 минут
Но всё равно пришлите, пож-та, на всякий случай)

Добавлено через 16 минут
Так, вроде с ribbon разобралась, теперь необходимо чтобы для каждого листа в книге надстройки, созданные в ribbon, или наполнение надстройки менялось. Например, выбираю лист 1 - в надстройке отображается один набор кнопок, выбираю лист 2-другой и т.д. Как это сделать?
Идея в том, чтобы прописать разный функционал управления для разных листов.
0
2049 / 479 / 133
Регистрация: 13.11.2008
Сообщений: 918
26.06.2015, 01:29
Лучший ответ Сообщение было отмечено anilonia как решение

Решение

Ссылку отправил.
По вопросу отображения элементов по активации листа. Особо "кошерных" методов нет. Можно использовать функции обратного вызова, например "getVisible". Во вложении пример наглядного использования именно этой функции. Ничего заумного нет. Если захотите под себя подстроить, то останется только плодить группы в схеме XML и дополнять их в код.
Вложения
Тип файла: zip Файл.zip (15.0 Кб, 78 просмотров)
1
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 29
26.06.2015, 10:42  [ТС]
Это действительно то, что нужно!
Буду адаптировать под свой файл)
Дмитрий, скажите, а если файл будет открыт в 2003 офисе, будет ли работать ribbon меню и соответственно макросы к нему?
мне нужно сделать универсальный вариант, чтобы все корректно работало и отображалось в разных версиях офиса.
0
2049 / 479 / 133
Регистрация: 13.11.2008
Сообщений: 918
26.06.2015, 11:49
Нет, 2003 не поддерживает Ribbon. Я бы посоветовал тогда сделать просто две версии - одна для 2007 и выше, другая для ранних версий.
2003 поддерживает только создание панели, при этом на 2007 она будет выглядеть...ну не очень, в контрасте с остальным интерфейсом. Но управлять видимостью и доступностью тоже можно.
Во вложении пример из моей статьи, дополненный управлением видимостью кнопки в зависимости от имени активного листа. Обращаю внимание - там добавился объект objExApp, чтобы можно было отследить любые доступные события приложения(активация книг, листов, ячеек). Я использовал событие активации любого листа любой из открытых книг. И в зависимости от имени этого листа показывается кнопка. Как добавить свои кнопки, думаю разберетесь.
Вложения
Тип файла: zip Tips_Macro_TestAddin.zip (13.8 Кб, 34 просмотров)
1
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 29
28.06.2015, 23:54  [ТС]
Теперь появился следующий вопрос. Как мне из vba узнать какие чекбоксы выбраны? Ведь они теперь элементы ribbon. Как к ним обратиться?
0
2049 / 479 / 133
Регистрация: 13.11.2008
Сообщений: 918
29.06.2015, 10:53
Я думаю имеет все же смысл почитать чуть-чуть про создание функций обратных вызовов. У того же Новикова хватает информации, а RibbonXMLEditor может создавать автоматом "скелет" этих функций. Для CheckBox-ов это выглядит примерно так:
Visual Basic
1
2
3
Sub Change_CheckBox(control As IRibbonControl, pressed As Boolean)
    bChecked = pressed
End Sub
где bChecked - переменная, объявленная на уровне модуля, чтобы к ней был доступ из других процедур. При каждом нажатии на этот чекбокс значение bChecked будет True если чекбокс выбран и False, если нет.
Change_CheckBox - процедура, которая должна быть назначена на OnAction для этого CheckBox-a.
1
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 29
29.06.2015, 21:17  [ТС]
Спасибо, еще почитаю дополнительно. Сразу извиняюсь, за может быть глупые вопросы, но я не волшебник, я только учусь
Дмитрий, еще такой вопрос, в присланном примере файл.xlsm когда начинаешь работать с самим файлом - заполняешь данные в листах - все чекбоксы в созданном меню пропадают / либо перестают меняться в зависимости от выбранного листа. как с этим бороться?
0
2049 / 479 / 133
Регистрация: 13.11.2008
Сообщений: 918
30.06.2015, 19:12
Цитата Сообщение от anilonia Посмотреть сообщение
как с этим бороться?
Может перестать меняться в одном случае - когда Вы что-то изменяете в проекте VBA. А пропадать только если имя активного листа не совпадает в указанном для показа хоть одной группы.
1
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 29
30.06.2015, 20:58  [ТС]
В том то и дело что код не трогаю, а чекбоксы не меняются. Попробуйте сами в вашем файле написать что-нибудь в ячейке, а потом перейти на другой лист.
0
2049 / 479 / 133
Регистрация: 13.11.2008
Сообщений: 918
30.06.2015, 22:32
В каком именно файле? Попробовал - все работает. Записал в ячейке цифру. Перешел на другой лист. Все поменялось на панели. Изменил 1 на слово "единица". Тоже все работает.
Как вариант, попробуйте в модуль ЭтаКнига вставить такой код:
Visual Basic
1
2
3
4
5
6
7
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    objRib.Invalidate
End Sub
 
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    objRib.Invalidate
End Sub
Чтобы перерисовывалась панель при каждом выделении ячеек и переходе на листы. Полагаю, должно все заработать, т.к. причина скорее всего именно в этом, раз ошибок не появляется.
1
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 29
01.07.2015, 11:11  [ТС]
Да, добавила в Эту Книгу, все заработало, теперь не пропадает.
А как сделать так, чтобы и при работе с ячейками чекбоксы не исчезали (или просто становились неактивными, как например во вкладке "разметка страницы")?
Сейчас в момент когда пишешь что-нибудь в ячейки - панель с чекбосками пропадает, заканчиваешь - появляется. Чтобы этого мерцания не было..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.07.2015, 11:11
Помогаю со студенческими работами здесь

Стили. Как зафиксировать кнопку загрузки файлов?
Приветствую многоуважаемые форумчане! Помогите пожалуйста разобраться со стилями. Есть модуль для загрузки изображений в профиль...

ListView: сбивается содержимое ImageView элемента при скроллинге + как сделать выделение пункта списка при нажатии?
1. Есть свой класс ContactsSimpleCursorAdapter, в методе public void bindView(View view, Context context, Cursor c) которого происходит...

Автоподгрузка контента при скроллинге, как в Инстаграм
Доброго времени суток господа. Значит есть галерея из 300 изображений, нужно чтобы на странице отображались первые 9, потом при скролле...

Как ускорить работу TreeView (мерцание при скроллинге)
При пролистывании TreeView (а там очень много элементов), возникают мерцания, как будто дерево обновляется (прорисовывается), жутко...

Как сделать эффект складывания- раскладывания при скроллинге?
Добрый день, как сделать такой эффект как для пунктов кофе вот тут под слайдером tastycoffeesale.ru ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru