在Word VBA中右键单击选择ListBox项

时间:2012-02-01 14:29:32

标签: vba listbox word-vba right-click

我正在使用VBA在Word 2003中开发一个项目。我有一个带有一些条目(日期)的多选ListBox。在右键单击我想要弹出一个InputBox,用户可以在其中更改所选日期。这很有效,只要特定项目已经聚焦(不仅选择,而且聚焦)。但是,如果您右键单击没有焦点的项目,则该框会显示并更改焦点条目的日期,而不是您右键单击的日期。

我找到了这个答案(http://www.vbarchiv.net/tipps/tipp_920-rechtsklick-in-der-standard-listbox-erkennen.html),但这在VBA中是不可能的。有人为VBA提供解决方案吗?

我实际上需要在显示框之前右键单击更改焦点项目。

谢谢

1 个答案:

答案 0 :(得分:3)

这通常使用Hitbox不支持的Hit Testing来完成,这是一种hacky方式;

在表单上的某处添加另一个名为lbTest的列表框,双击其BorderStyle属性,直到它看起来像一个空白框,将其visible设置为false

Private LBI_HEIGHT As Long

Private Sub UserForm_Initialize()
   'get the height of a single list item in twips based on the fact the box will resize itself automatically;
   With lbTest
       .Width = 100
       .Height = 1
       .AddItem "X"
       LBI_HEIGHT = .Height
   End With

   'add test data
   Dim i As Long
   For i = 1 To 50
       ListBox1.AddItem "item " & i
   Next
End Sub

Private Sub ListBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
   'get the item at the Y coord based on the scroll position & item height
   Dim derivedIndex As Long
   derivedIndex = (Y \ LBI_HEIGHT) + ListBox1.TopIndex

   Me.Caption = derivedIndex & " = " & ListBox1.List(derivedIndex)
End Sub