У меня есть ActiveXCombobox на одном из моих основных листов, который контролирует / обновляет серию диаграмм.
Private Sub cmBoxSelect_GotFocus()
Application.ScreenUpdating = False
With Me.cmBoxSelect
.List = Array("Grand Total", "Prod1", "Prod2", "Prod3", "Prod4", "Prod5")
.ListRows = 6
.DropDown
End With
Application.ScreenUpdating = True
End Sub
Private Sub cmBoxSelect_Change()
'series of codes which manipulates the charts, based on selection...
End Sub
Я заметил, что когда я щелкаю ComboBox и выбираю одно из его содержимого, он оставляет синюю подсветку в выделении. Чтобы этого не произошло, я добавил:
Private Sub cmBoxSelect_DropButtonClick()
Application.ScreenUpdating = False
ActiveCell.Activate
Application.ScreenUpdating = True
End Sub
Он успешно удалил подсветку.
Однако у него есть странный недостаток. cmbSelect не закрывается автоматически, когда пользователь не сделал выбирает что-либо (когда поле со списком становится активным и пользователь щелкает любую ячейку на листе, оно не закрывается). Он работал до того, как я добавил событие DropButtonClick.
Я что-то пропустил или сделал какие-то неправильные шаги выше? Спасибо за ваш вклад!
РЕДАКТИРОВАТЬ # 1
Кажется, я уже нашел решение методом проб и ошибок. Я только добавил пустую метку и выбрал ее, чтобы убрать фокус из ComboBox всякий раз, когда есть изменения. Я также поменял DropButtonClick на LostFocus.
Private Sub cmBoxSelect_GotFocus()
Application.ScreenUpdating = False
With Me.cmBoxSelect
.List = Array("Grand Total", "Prod1", "Prod2", "Prod3", "Prod4", "Prod5")
.ListRows = 6
.DropDown
End With
Application.ScreenUpdating = True
End Sub
Private Sub cmBoxSelect_LostFocus()
ActiveCell.Select
End Sub
Private Sub cmBoxSelect_Change()
'series of codes which manipulates the charts, based on selection...
Me.Label1.Select
End Sub
Потому что я заметил, что при включении и выключении обновления экрана на GotFocus наблюдается небольшое влияние (на скорость). Не уверен, почему.





Вам нужно установить для SelLength значение 0 в нескольких событиях, чтобы не выделять:
так:
Me.cmBoxSelect.SelLength = 0
в:
Private Sub cmBoxSelect_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Private Sub cmBoxSelect_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Private Sub cmBoxSelect_LostFocus()
Private Sub cmBoxSelect_DropButtonClick()
Private Sub cmBoxSelect_Change()
Private Sub cmBoxSelect_GotFocus()
(вы также можете добавить Me.cmBoxSelect.SelStart = 0)
Давайте попробуем это: Не инициируется событием изменением, а нажатием кнопки dropbuttonclick
Private Sub changingComboBox(String s)
'series of codes which manipulates the charts, based on selection...
End Sub
Private Sub cmBoxSelect_DropButtonClick()
Dim s As String
s = cmBoxSelect.SelText
If (cmBoxSelect.SelText = cmBoxSelect.Value) Then
cmBoxSelect.Value = ""
cmBoxSelect.Value = s
Else
call changingComboBox(cmBoxSelect.Value)
End If
End Sub
Как насчет этого ?
Трудно воспроизвести вашу проблему. Есть ли причина, по которой вы возитесь с приложением screenUpdating?