ActiveX组合框不会自动关闭

时间:2018-08-14 09:46:59

标签: vba excel-vba activex

我的一个主表中有一个declare @tmp varchar(10)=CHAR(10) EXEC SearchAndReplace @tmp, ' + ' ActiveX,用于控制/更新一系列图表。

Combobox

我注意到,当我单击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事件之前,它一直在工作。

我是否错过了上面的任何内容或任何错误的步骤?感谢您的输入!

EDIT#1

似乎我已经通过反复试验找到了解决方案。我仅添加了一个空白Label,并选择了它,以便在发生更改时将焦点从ComboBox中移出。我也将DropButtonClick更改为DropButtonClick

LostFocus

2 个答案:

答案 0 :(得分:0)

您需要在多个事件中将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)

答案 1 :(得分: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

那怎么样?