<span style="background-color: rgb(255, 255, 255);"></span><pre name="code" class="vb"><span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">在使用VBA的COMBOBOX组件的时候,想制作一个点击单元格即自己弹出下拉列表,点击其它单元格,即收起列表的功能。</span>
COMBOBOX提供了DROPDOWN的方法,但是却没有提供收起列表的方法,所以如果你点击了第一个单元格,自动弹出列表,并且你没有选择其中任何一项的时候,再点击第二个单元格,下拉列表是不会自己收起来的……
在网上也搜了很多的解决办法,包括mousemove方法和sendkeys方法的联合使用,或者定义全局变量,判断前后两次点击的单元格是否是同一个单元格等等,都没能完全的解决问题,后经自己尝试,找到了下面的办法,特记录如下:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With ComboBox1
.Visible = False
If Target.Count = 1 Then
If Target.Column = 2 Then
.Visible = True
.Width = Target.Width + 15
.Left = Target.Left + Target.Width
.Top = Target.Top
.Height = Target.Height
.Activate
Target.Activate
.DropDown
Else
.Visible = False
End If
End If
End With
End Sub
解决办法实际就是运用activate这个方法,因为在实际中发现,COMBOBOX组件实际是被分离了两个部分,分别是下拉按钮和下拉列表,所以就算你把VISIBLE调成false,也只隐藏了下拉按钮,列表还在。
所以直接就不隐藏,让它整个组件处于活动状态,那么当你点击不同的单元格的时候,就会随着你的点击更新到对应的位置。这里先将控件activate,整个组件将会被更新到当前位置,然后将点击的单元格更新,再将列表弹出来。