Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel Listbox Событие Click несколько раз / 3 сообщений из 3, страница 1 из 1
31.10.2007, 16:48:10
    #34908274
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel Listbox Событие Click несколько раз
Вот такая фигня!

Есть Listbox заполненный через RowSource значениями с листа Excel'я:
lstFields.RowSource = "[" & ThisWorkbook.Name & "]wksSQL!E3:F68"

Хочу в событии lstFields_Click() поменять значение в щелкнутой мышкой пользователем строке, вот так:
ThisWorkbook.Worksheets("wksSQL").Range("E" & Me.lstFields.ListIndex + 3) = "Y"
- В итоге событие возникает 3 РАЗА!!!
Естественно, что такой код перестает корректно работать (после 3 раз, все остается как было):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Private Sub lstFields_Click()
     'f Len(ThisWorkbook.Worksheets("wksSQL").Range("E" & Me.lstFields.ListIndex + 3)) = 0 Then
        ThisWorkbook.Worksheets("wksSQL").Range("E" & Me.lstFields.ListIndex +  3 ) = "Y"
     Else
        ThisWorkbook.Worksheets("wksSQL").Range("E" & Me.lstFields.ListIndex +  3 ) = ""
     End If
End Sub

Причем, если это - ThisWorkbook.Worksheets("wksSQL").Range("E" & Me.lstFields.ListIndex + 3) = "Y"
сделать из другого события/участка код, то все ОК, событие lstFields_Click() не возникает вообще, но то что Rowsource поменялся ListBox просекает и значения у себя обновляет.

Кто как борется с этим 3разовым событием?
Хотелось бы, чтобы на каждый щелчок мышкой по выбранной строке ставилось-убиралось - "Y".
...
Рейтинг: 0 / 0
31.10.2007, 17:04:48
    #34908334
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel Listbox Событие Click несколько раз
В начале события
Application.EnableEvents =False
В конце в true.
...
Рейтинг: 0 / 0
31.10.2007, 17:23:37
    #34908401
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel Listbox Событие Click несколько раз
Прикольно, не знал про такое свойство Application.

К сожалению, правда, не помогло. Видимо это событие вызывается в приказно-принудительном порядке. Вот такой код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub lstFields_Click()
 1 :    Application.EnableEvents = False
 2 :    If optSBF.Value Then
 3 :       If Len(ThisWorkbook.Worksheets("wksSQL").Range("A" & Me.lstFields.ListIndex +  3 )) =  0  Then
 4 :          ThisWorkbook.Worksheets("wksSQL").Range("A" & Me.lstFields.ListIndex +  3 ) = "    Y"
 5 :       Else
 6 :          ThisWorkbook.Worksheets("wksSQL").Range("A" & Me.lstFields.ListIndex +  3 ) = ""
 7 :       End If
 8 :    End If
 9 :    Application.EnableEvents = True
End Sub

Выполняется в следующем порядке (нач. условия - ячейка пустая):
1-2-3-4-
-1-2-3-5-6-7-8-9-
-5-7-8-9

Нашел токо такой вариант - перенес код в событие lstFields_MouseUp. Такой код выполняется 1 РАЗ. Причем в отличии от _Click, событие _MouseUp возникает всегда при клике на строку, а не только на НОВУЮ как в случае с _Click.
Правда есть и минус - после изменения значения ячейки на листе, ListBox себя автоматом обновляет и возвращает выделение на пред. выделенную строку, так что пришлось добавить небольшой код возврата активной строки, в итоге:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Private Sub lstFields_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  Dim lindx As Long

     lindx = Me.lstFields.ListIndex ' запоминаем тек. строку
     If optSBF.Value Then
        If Len(ThisWorkbook.Worksheets("wksSQL").Range("A" & Me.lstFields.ListIndex +  3 )) =  0  Then
           ThisWorkbook.Worksheets("wksSQL").Range("A" & Me.lstFields.ListIndex +  3 ) = "    Y"
        Else
           ThisWorkbook.Worksheets("wksSQL").Range("A" & Me.lstFields.ListIndex +  3 ) = ""
        End If
     End If
     Me.lstFields.ListIndex = lindx ' восстан. сбитую тек. строку
End Sub
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel Listbox Событие Click несколько раз / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]