Список в Excel - Как определить, нет выбора - PullRequest
0 голосов
/ 27 января 2019

У меня есть таблица Excel со списком на листе 1, которая заполняется из именованной группы на листе 2. В этой именованной группе 4 записи.

Я хочу, чтобы пользователь сделал выбор из этого списка (1 столбец), прежде чем он сделает что-либо еще. Я пытаюсь написать код для проверки правильности выбора из списка, но TopIndex = 0 и .Value, .Selection, .Selected либо не работают, либо возвращают 0, но 0 - это индекс для первой записи в список, так что я всегда делаю выбор.

Если я проверяю Listbox.value <> "", возвращается ноль, независимо от того, сделаю я выбор или нет.

Я искал в интернете всю ночь в поисках решения и продолжаю приходить с пустыми руками.

Я застрял. Ищу предложения.

Ответы [ 3 ]

0 голосов
/ 27 января 2019

Возможно, вы ищете этот фрагмент кода

If ListBox1.ListIndex = -1 Then
    MsgBox "Nothing selected"
Else
    MsgBox "Selected: " & ListBox1.ListIndex
End If

Listindex равно -1, если в списке ничего не выбрано.В противном случае это индекс выбранного элемента, начинающийся с 0.

Приведенный выше код работает для списка, где множественный выбор имеет значение false.

Для списка со «множественным выбором» в этом фрагменте кода можетнаверное тебе поможет

Dim i As Long

 For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i) = True Then
        MsgBox "Selected: " & i
    End If
Next i
0 голосов
/ 27 января 2019

Не уверен, почему это не сработало для меня, но когда я использовал

listbox1.listindex I kept getting 0 

Итак, я изменил способ заполнения списка с помощью

Private Sub Workbook_Open () Добавить имена сайтов в список С Sheet1.ListBox1 .AddItem "Hayward" .AddItem "Exeland" .AddItem "StoneLake" .AddItem "Зима" Конец с End Sub

Позже, когда я кодировал, чтобы определить файл, который мне нужно открыть, я использовал

x = Sheet1.ListBox1.ListIndex

Select Case x
    Case 0
        sSite = "Hayward"
    Case 1
        sSite = "Exeland"
    Case 2
        sSite = "StoneLake"
    Case 3
        sSite = "Winter"
    Case Else
        MsgBox "You MUST select a Site Location", vbOKOnly
        GetTargetFile = "NoSite"
        Exit Function
End Select

GetTargetFile = sSite & sMonth & Yr & ".xlsx"

Теперь Listbox1.ListIndex вернет -1, если выбор не сделан.

Я думаю, что моя первоначальная проблема заключалась в том, как я пытался заполнить свой список в том, что независимо от того, что я делал, и FIRST, и NO SELECTION возвращали 0.

Спасибо, что ответили!

0 голосов
/ 27 января 2019

вы пробовали свойство: ListIndex списка? это возвращает -1, если ни один не выбран


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

Может быть, вы можете адаптировать его для удовлетворения ваших потребностей. Это не идеальное решение (например, отсутствие обработки ошибок и некоторый повторяющийся код), но оно должно указывать вам правильное направление.

Посетите этот репозиторий github и загрузите файл xlsm:

https://github.com/rdiazjimenez/excel-vba-userform-basic-listbox-demo


Пожалуйста, отметьте этот ответ, если это помогло вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...