VBA Как программно выбрать элемент в списке без запуска события при нажатии - PullRequest
0 голосов
/ 03 октября 2018

Я использую Excel 2010, Windows 10, с VBA.У меня есть функция, которая запускается при нажатии элемента в элементе управления ActiveX ListBox.Проблема в том, что если вы щелкнете по списку, я спрашиваю, уверены ли они, хотят ли они изменить выбор.Если вы нажмете «да», я продолжу, но если вы скажете «нет», я верну выделение обратно к тому, что было раньше.

Таким образом, проблема заключается в том, что когда я программно устанавливаю выбор списка обратно к предыдущемуselection my function будет повторно запускать код, который запускается, если пользователь щелкает элемент в окне списка ... что я не хочу.

У кого-нибудь есть лучший способ остановить окно спискавыделение и изменить его обратно на старое, не вызывая событие выбора в окне списка?

Прототип функции для щелчка по списку

lsQuestions_Click()

Код для установки поля спискаselection

'Prototype: setListBoxSelection(query As String, listBoxName As String) As Boolean
'  Purpose: Set listbox selection based on text
Public Function setListBoxSelection(query As String, listBoxName As String) As Boolean
  Dim lsBox As MSForms.listBox
  Set lsBox = Workbooks(mainFile).Worksheets(entrySheet).OLEObjects(listBoxName).Object

  Dim I As Integer

  For I = 0 To lsBox.ListCount - 1
      If lsBox.List(I) = query Then
          lsBox.Selected(I) = True
          setListBoxSelection = True
          Exit Function
      End If
  Next I

  setListBoxSelection = False
End Function

Пожалуйста, обратите внимание, что я думаю, что строка кода ниже - это то, что вызывает мое событие щелчка, которое я не хочу.

lsBox.Selected(I) = True

1 Ответ

0 голосов
/ 03 октября 2018

То, как я делаю это с моими проектами VB6, - это определение переменной области видимости модуля

Private blnChangingInCode As Boolean

Затем, когда мне нужно ее использовать, я устанавливаю ее в true, вызываю even / sub,установите его в false.

blnChangingInCode = True
btnLogin_Click()
blnChangingInCode = False

Внутри затронутых подпрограмм / событий я начинаю с

If blnChangingInCode Then
    Exit Sub ' or Exit Function
End if

Это может быть не элегантно, но работает, и мне не нужноделай это очень часто.

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