Страницы: 1
RSS
Как правильно задать начальное значение ListBox?
 
Добрый день!
Подскажите, пожалуйста, в чем проблема. Сделал форму, в ней есть ListBox.
Запускается просто:
Код
Sub ShowInputForm()

With ufInput

    .lbItem.RowSource = "бюджет!ab4:ab15"
    .lbItem.ListIndex = 3
    .Show
    
End With

End Sub
Когда форма запускается, ListBox заполнен, а четвертый пункт выделен. Но если сразу вытащить lbItem.Value, то оно будет пустым. Проблема решается, только если ткнуть в ListBox мышкой.
Как можно на этапе запуска формы выделить один из пунктов ListBox, чтобы потом можно было использовать это значение без дополнительных манипуляций мышью?

Заранее спасибо
 
Плохое название темы: теперь здесь можно организовать свалку по проблемам с ЛистБоксами. Предложите название, хоть частично раскрывающее суть именно Вашей проблемы. Я исправлю.
 
Может быть "Как правильно задать начальное значение ListBox"?
 
Код
x = ListBox1.List(3, 0)
 
насколько я понимаю, это эквивалентно варианту
Код
  x = Worksheets("бюджет").Cells("ab7")
В моем случае необходимо считать информацию именно с ListBox, а не указать прямую ссылку на название статьи, т.к. в разных случаях будут задаваться разные начальные значения ListBox
 
Цитата
Алексей написал:
В моем случае необходимо считать информацию именно с ListBox
Мой "случай" именно это и делает ))
 
Я имел в виду, что индекс строки должен задаваться программно, например вот так сработало:
Код
  x = ListBox1.List(ListBox1.ListIndex, 0)

А нельзя ли обойтись без таких наворотов? Я, честно сказать, надеялся на простые ListBox1.Value / ListBox1.Text
 
Правильно: ListBox1.ListIndex - это и будет "тройка" в моём варианте. Ведь Вы же сами задаёте эту строку: .lbItem.ListIndex = 3
 
Как я понимаю, у Вас ЛистБокс с одним столбцом? Тогда должно сработать
Код
x = Me.ListBox1
 
Да, Юрий, спасибо, вы подсказали работающий способ получить нужное значение из формы и сейчас я уже интересуюсь возможностью оптимизации кода. Попытаюсь переформулировать вопрос так: в какой момент ListBox1.Value принимает значение, отличное от пустого? Только когда пользователь производит манипуляции с ListBox мышью или существует какой-то способ задать это значение при запуске формы программно? (Сразу скажу, что вариант ListBox1.Value = "string" пробовал и он не сработал)
 
Необязательно мышкой - Вы же сами показали в примере:
Код
.lbItem.ListIndex = 3
 
Цитата
Юрий М написал:
Код
1x = Me.ListBox1
Это, к сожалению, тоже возвращает пустую строку, как и ListBox1.Value
 
У меня не возвращает )
 
Юрий, большое спасибо за пример. Оказалось проблема в том, что мой ListBox был в списке TabOrder на третьем месте и без манипуляций мышью так и не получал фокус до "снятия показаний", поэтому никакое значение в ListBox1.Value не записывалось.
Проблема решилась двумя способами:
1. либо поднятием ListBox в списке TabOrder на первое место
2. либо добавлением в код запуска формы одной строки:
Код
Sub ShowInputForm()
 
With ufInput
 
    .lbItem.RowSource = "бюджет!ab4:ab15"
    .lbItem.ListIndex = 3
    .lbItem.SetFocus    ' с этой строкой все работает как надо 
    .Show
     
End With
 
End Sub
Изменено: Алексей - 19.08.2015 02:22:26
Страницы: 1
Наверх