событие изменения combobox запускается каждый раз в Excel VBA - PullRequest
1 голос
/ 26 марта 2012

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

Любая помощь, код, который может решить эту проблему?

Ответы [ 2 ]

1 голос
/ 26 марта 2012

Используйте флаг, чтобы указать, хотите ли вы обрабатывать событие;

private mblIsUpdating as boolean
...
sub addDataFromXml
   mblIsUpdating = true
   combo.additem ...
   mblIsUpdating = false
end sub

sub combo_change
  if (mblIsUpdating) then exit function
  //handle change
end sub
0 голосов
/ 27 марта 2012

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

Если вам нужно изменить список комбинированного списка в другое время, как говорит Алекс К.логический флаг, указывающий, хотите ли вы игнорировать событие изменения.

Из вашего вопроса мне не ясно, срабатывает ли событие изменения один раз, когда вы заполняете комбинированный список, или один раз для каждого .AddItem.Если это последняя проблема, то вы можете сократить количество событий изменений, создав массив значений для вашего комбинированного списка и присвоив его списку .List.

Вот пример с двумерным массивом, который заполняет комбинированный список именами и путями всех открытых рабочих книг.(1-й массив также работает.)

Private Sub InitializeComboBox()
   Dim aList() As String
   Dim i As Integer, iMax As Integer

   ' build combobox list with zero-based array
   iMax = Application.Workbooks.Count - 1
   ReDim aList(iMax, 2)
   For i = 0 To iMax
      With Application.Workbooks(i + 1)
         aList(i, 0) = i
         aList(i, 1) = .Name
         aList(i, 2) = .Path
      End With
   Next i

   With Me.ComboBox1
      .ColumnCount = 3
      .ColumnWidths = "0 pt;80 pt;220 pt"
      .ListWidth = "300 pt"
      .List = aList
   End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...