Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2016, 20:37   #1
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию Синхронная прокрутка (скроллинг) двух ListBox на форме

Здравствуйте, Уважаемые.
Вопрос, собственно, в названии темы.
На форме 2 листбокса. Нужно как-то синхронизировать прокрутку.
Возможно ли сделать такое? Может кто сталкивался?
На просторах инета есть решения, НО не для Excel VBA.

Спасибо.
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 15.11.2016, 21:07   #2
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Думаю, вопрос снят.
Решение оказалось до безобразия простым.
Код:
Private Sub ListBox1_Change()
ListBox2.TopIndex = ListBox1.TopIndex
End Sub
Это, конечно, не совсем синхронная прокрутка, но для решения моей задачи вполне подходит.
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499

Последний раз редактировалось VictorM; 15.11.2016 в 21:11.
VictorM вне форума Ответить с цитированием
Старый 16.11.2016, 18:39   #3
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Все же сделал синхронную прокрутку.
Добавил на форму ScrollBar и вот такой код
Код:
Private Sub ScrollBar1_Change()
    ListBox1.TopIndex = ScrollBar1.Value
    ListBox2.TopIndex = ScrollBar1.Value
End Sub
Теперь бы еще "родные" скроллы у листбоксов убрать (скрыть) - вообще красота будет
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 16.11.2016, 21:39   #4
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от VictorM Посмотреть сообщение
Теперь бы еще "родные" скроллы у листбоксов убрать (скрыть)
Там читал, помогает?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 16.11.2016, 22:04   #5
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Спасибо, как раз там я не читал.
Хотя, было просмотрено много всего.
НО вот как это все привязать именно к VBA ...
Не получается что-то.
Может можно использовать API, но я здесь пас...
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 17.11.2016, 21:47   #6
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

В завершение темы - решение. Может кому-то пригодится.
Как оказалось, вменяемого программного решения для того, чтобы скрыть "родной" скролл у листбокса расположенного на форме для Excel VBA нет или может я все же не смог найти его в инете.
Зато встретились такие предложения и идеи
Цитата:
Закрыть область ScrollBara в ListBox-е каким-нибудь объектом, например картинкой (прямоугольник цвета фона)?
но
Цитата:
Попытался закрыть его объектом. Тоже чепуха получилась.
Из 10 открытий формы только 1 раз объект оказался поверх ScrolBar-а.
в результате оказалось, что единственный объект, который действительно может закрыть/скрыть ScrolBar ListBox-а - Frame.
Он его просто обрезает.
Сделал Frame размером равным по высоте ListBox, а шириной немного меньше, чтобы скрыть скролл (подбирается).
В свойствах Frame-a выбрал SpecialEffect - 0.
ВСЕ!
ListBox-ы есть, родных скроллов у них нет, Frame-ов нет.
Прокручиваются синхронно дополнительным объектом ScrollBar1.

ps
Скептики скажут "извращение", но работает же!
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 17.11.2016, 22:26   #7
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Это для чего такое "извращение" может пригодится?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 25.11.2017, 22:51   #8
Oldy7
Пользователь
 
Регистрация: 25.02.2012
Сообщений: 28
По умолчанию

Вот еще вариант синхронизации:
Private Sub ListBox1_Change()
ListBox2.TopIndex = ListBox1.TopIndex
End Sub
Private Sub ListBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
With Me.ListBox1
On Error Resume Next
.Selected(.TopIndex + Y \ 10) = True
On Error GoTo 0
End With
End Sub
Образец.xls
Oldy7 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скроллинг(Прокрутка) в Pascal ABC. H4t Паскаль, Turbo Pascal, PascalABC.NET 1 10.05.2014 12:56
Скроллинг нескольких ListBox sanek22bor Общие вопросы .NET 12 11.12.2013 23:00
Синхронная прокрутка в SynEdit LISTAT Компоненты Delphi 3 26.06.2012 10:57
Вертикальный скроллинг по ListBox Kveldulv Microsoft Office Excel 6 25.02.2010 16:22
Синхронная прокрутка двух Memo Dimmitt Компоненты Delphi 1 21.10.2007 17:57