Страницы: 1 2 3 След.
RSS
ListBox выделение списка
 
как в ListBox выделить ВСЕ элементы списка по нажатию кнопки  
 
Пробовала  
Private Sub CommandButton1_Click()  
Dim i&  
Me.ListBox1.MultiSelect = fmMultiSelectMulti  
For i = 0 To Me.ListBox1.ListCount  
Me.ListBox1.Selected(i) = True  
Next  
End Sub  
 
выделяет и в ошибку уходит
 
-1 забыли...  
 
Private Sub CommandButton1_Click()  
   Dim i&  
   Me.ListBox1.MultiSelect = fmMultiSelectMulti  
   For i = 0 To Me.ListBox1.ListCount - 1  
       Me.ListBox1.Selected(i) = True  
   Next  
End Sub
 
все получилось спасибо
 
еще небольшой вопрос по этой теме  
 
 
можно ли по 2 щелчку на эту же кнопку    
снять выделение в ListBox  
чтоб 2 кнопку не создавать ?
 
Можно.  
Сделайте публичную переменную типа boolen, сразу по клику меняйте её статус  
flag=not flag  
а далее  
Me.ListBox1.Selected(i) = flag
 
публичную переменную flag as boolean
 
Private Sub CommandButton1_Click()  
Dim i&, flag As Boolean  
flag=not flag  
Me.ListBox1.Selected(i) = flag  
Me.ListBox1.MultiSelect = fmMultiSelectMulti  
For i = 0 To Me.ListBox1.ListCount - 1  
Me.ListBox1.Selected(i) = True  
Next  
End Sub  
 
для меня это темный лес  
так не получилось
 
Public flag As Boolean  
вынесите первой строкой модуля, или даже в отдельный стандартный модуль.  
Т.е. должно быть примерно так (лучше бы сделали небольшой пример в файле):  
 
Public flag As Boolean  
 
Private Sub CommandButton1_Click()  
Dim i&  
flag = Not flag  
Me.ListBox1.MultiSelect = fmMultiSelectMulti  
For i = 0 To Me.ListBox1.ListCount - 1  
Me.ListBox1.Selected(i) = flag  
Next  
End Sub
 
я уж тут наворотила по примеру из форума  
 
Dim flag As Boolean  
 
Private Sub CommandButton1_Click()  
Dim i&  
If flag Then  
Me.ListBox1.MultiSelect = fmMultiSelectMulti  
For i = 0 To Me.ListBox1.ListCount - 1  
Me.ListBox1.Selected(i) = True  
Next  
flag=not flag  
Else  
Me.ListBox1.MultiSelect = fmMultiSelectMulti  
For i = 0 To Me.ListBox1.ListCount - 1  
Me.ListBox1.Selected(i) = False  
flag=not flag  
Next  
End If  
End Sub  
 
 
ваш код работает благодарю  
только пришлось перенести макрос с Dim flag As Boolean  
на самый верх
 
Вариант проще: ЧекБокс или две радиокнопки (выделить всё/снять всё) и не нужна переменная. Можно ещё ToggleButton, но не очень наглядно (это мне так кажется).
 
И впрямь наворотили... можно проще - как выше код написан :)  
Я тут взял недавний файл Мули с листбоксом - на нём сделал.
 
Я бы ещё Caption кнопки менял :-)
 
Дык я ж его поменял :)  
Глубже рыть не стал - поудалял явно для этой задачи лишнее, и Caption.  
Название макроса не менял, это да...
 
Игорь, я именно про "менять", а не "поменял": когда все выбраны - "Снять выделение", иначе - "Выбрать все" :-)
 
Да понял уже, но поздно... Слово тут не воробей :)
 
еще вопрос про listbox если можно  
как запретить пользователю в листбоксе отмечать одновременно (за 1 раз)более 2 пунктов  
в свойствах чтото есть или макросом ?
 
макросом
 
Макросом: по клику считать количество уже выделенных.
 
По первому вопросу: можно выделять все и снимать выделение без цикла (делал здесь для ускорения процесса при очень длинном списке):  
Снять выделение со всех элементов:  
 
ListBox1.MultiSelect = fmMultiSelectSingle  
ListBox1.MultiSelect = fmMultiSelectExtended  
 
Выделить все:  
 
ListBox1.SetFocus  
Application.SendKeys "^{Home}^+{End}"  
 
Мож кому пригодится :)
 
сделала так  
 
Private Sub CommandButton1_Click()  
For i = 0 To UBound(ListBox1.List)  
If ListBox1.Selected(i) = True And Len(i) < 2 Then  
ActiveCell.Value = ListBox1.List(i)  
End If  
If ListBox1.Selected(i) = True And Len(i) > 2 Then  
MsgBox "Только 1 пункт из списка"  
End If  
Next  
End Sub  
 
но почемуто не считает
 
А что должно считаться?
 
Private Sub CommandButton1_Click()  
Dim i As Integer, x As Integer  
   For i = 0 To Me.ListBox1.ListCount - 1  
       If Me.ListBox1.Selected(i) = True Then x = x + 1  
       If x > 2 Then  
           MsgBox "Не может быть выбрано более двух поизций.", 64, " Во как!"  
'            Me.ListBox1.Selected(i) = False'Если нужно сбросить лишнюю позицию  
           Exit Sub  
       End If  
   Next  
End Sub
 
А действительно, почему оба условия выполняются, а строка    
If ListBox1.Selected(i) = True And Len(i) > 2 Then  
нет?
 
А какой смысл вычислять длину переменной (i)?
 
То, что нет нужды в Len(i) я понял сразу.  
Мой вопрос не по теме, а относительно конкретного условия  
Почему работает это  
If ListBox1.Selected(i) = True And i = 2 Then  
и это  
a = ListBox1.Selected(i)  
aa = Len(i)  
bb = a And aa  
If bb = 2 Then  
а это - нет?  
If ListBox1.Selected(i) = True And Len(i) > 2 Then
 
Вопрос снят!  
Глазки протер плохо. (
 
Потому, что при условии, что i - Integer, она (переменная) не может быть > 2.
 
Почему не может?  
i = 153  
a = Len(i) =3  
Но столько строк нет  
и Len(i) > 2 не выполняется  
Я > и >= попутал!
 
Sub Test()  
Dim i As Integer    
'Dim i As Double    
For i = 1 To 10000  
   If i = 9999 Then MsgBox Len(i)'При Integer здесь будет 2, а при Double будет 8  
Next  
End Sub
 
{quote}{login=RAN}{date=26.11.2011 12:16}{thema=}{post}Я > и >= попутал!{/post}{/quote}А при >= 2 всегда будет ИСТИНА.
Страницы: 1 2 3 След.
Читают тему
Наверх