VBA 中COMBOBOX下拉列表的收起

<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,整个组件将会被更新到当前位置,然后将点击的单元格更新,再将列表弹出来。


猜你喜欢

转载自blog.csdn.net/wang_306/article/details/45396091
vba