Страницы: 1
RSS
Выделить добавленный элемент listbox1., Необходимо выделить элемент в listbox1 на UF1, добавленный из listbox1 на другой форме UF2 по двойному щелчку.
 
Всем привет!
Создаю интерфейс пользователя, у которого будет основная таблица listbox1 на userform1. На этой форме по нажатию на кнопку вызывается дополнительная форма userform2 со списком элементов. При двойном клике на один из них, userform2 должна закрыться, а в userform1 внутри listbox1 добавиться выбранный элемент. При этом добавленный элемент должен выделиться.
Проблема как раз с выделением добавленного элемента. После двойного клика на LB в UF2 выделяется не добавленный элемент, а диапазон элементов между добавленным и тем, который расположен под UF2 на UF1 в месте двойного клика. Само добавление и выделение происходит внутри события ListBox1_DblClick, которое почему-то после закрытия формы генерирует нажатие на элемент находящийся под самой формой.
Уже пробовал задержку, установку фокусов и DoEvents - ничего не помогло((

Прилагаю упрощенный файл по этой проблеме.
 
Роман, добрый вечер.
У меня из второй формы по двойному клику добавляется элемент в верх списка первой формы и он же выделяется.
Вроде всё работает как вам нужно.
 
asesja, добрый вечер!
Очень странно. Я запустил этот же макрос с другого рабочего компьютера и проблема осталась. Версия офиса 2016 (64-bit)
Изменено: Роман - 26.02.2025 21:37:45
 
У меня всё нормально и нет такого. Офис 21
 
asesja, скорее всего в новых версиях этот баг подправили. Но я создаю интерфейс для сотрудников компании и там с переходом на новые версии офиса всё тяжко)
К счастью, я чудом нашёл решение проблемы с одного англоязычного форума https://www.mrexcel.com/
Код
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Dim t!, i&
    t = Timer
    Do: DoEvents: Loop Until Timer - t >= 0.1
    With UserForm1.ListBox1
        .AddItem Me.ListBox1.Value, 0
        .ListIndex = .ListCount - 1
        For i = 0 To .ListCount
            .Selected(i) = False
        Next i
        .Selected(0) = True
    End With
    Unload Me
End Sub
Вся фишка в коротком зацикливании DoEvents в начале события двойного клика. Добавил файл с решением, если кому вдруг пригодится :)  
 
Мне кажется цикл For Next не нужен.
 
asesja, Так у меня на основном listbox включен multiselect. Цикл нужен, чтобы полностью убрать всё старое выделение
Страницы: 1
Читают тему
Наверх