有没有办法通过VBA切换组合框的下拉列表? .Dropdown
是一种方法,它只适用于一个方向。我正在寻找以下功能:
MyCombo.Dropdown = True
MyCombo.Dropdown = False
显然上面的内容在MS Access中不起作用。我猜我需要使用某种黑客/解决方法。我想避免使用.Requery
。这可能会有效,但可能会有一个主要的性能损失取决于组合框的来源。
答案 0 :(得分:2)
如何将焦点设置为表单上的另一个控件?这应该关闭组合框,就好像用户已将焦点移动到表单上的其他位置一样。
答案 1 :(得分:2)
我今天正在处理此问题,经过大量的试验和错误,我发现以下内容在Access 2010中可以很好地工作:
With m_cboLookup
.ListWidth = .ListWidth ' Close combo box
'If Len(strSearch) > 3 Then .Dropdown
End With
基本上,您只是将列表宽度设置为现有列表宽度,但是组合框已关闭,大概是为准备使用其他尺寸的重绘做准备。
答案 2 :(得分:1)
我也正在处理这个问题。我能想到的最好的方法如下。它发送两次ALT键,这将关闭组合框,而不会触发撤消或将焦点移到另一个控件。
SendKeys "%"
SendKeys "%"
答案 3 :(得分:0)
你有没有想过
SendKeys "{TAB}"
不需要您将焦点发送到任何特定控件,但会将焦点从这个控件移开
答案 4 :(得分:0)
我已尽一切努力来实现所需的组合框行为。我终于找到了一种对我有用的方法。太复杂了,无法成为理想的解决方案,但是它确实有效。我尝试了Adam的listwidth重置方法,但在Access 2013中对我不起作用。我尝试了Sendkeys方法,但是这导致我的客户的Num Lock被关闭。这段代码为我提供了完美的组合框行为。
'The following code goes in a non-class module.
Public booListOpen As Boolean
Public sub subDropDown()
If booListOpen = False Then
Screen.ActiveControl.Dropdown
booListOpen = True
End If
End Sub
'The following code goes in the form module.
Private Sub cboList_Enter()
booListOpen = False
End Sub
Private Sub cboList_Change()
subDropDown
End Sub
Private Sub cboList_Click()
booListOpen = True
End Sub
答案 5 :(得分:0)
我知道这是一个旧线程,但是我遇到了同样的问题,并尝试了几种解决方案。 .ListWidth对我不起作用。它确实关闭了下拉列表,但是在下拉列表关闭后,它在组合框的“文本框”部分中显示了绑定列的值(ID)。我的也是绑定到多值字段的多选组合框;可能与OP不同。
我能够通过执行.Requery