2012-02-01 6 views
2

VBA를 사용하여 Word 2003에서 프로젝트를 개발 중입니다. 몇 가지 항목 (날짜)가있는 다중 선택 ListBox가 있습니다. rightclick에서 사용자가 선택한 날짜를 변경할 수있는 곳으로 입력 상자가 나타나게하고 싶습니다. 이것은 특정 항목이 이미 집중되어있는 한 (선택뿐만 아니라 초점이 맞춰져있는 한) 효과가 있습니다. 그러나 포커스가없는 항목을 마우스 오른쪽 버튼으로 클릭하면 상자가 나타나고 포커스가 지정된 항목의 날짜가 변경됩니다. 항상 마우스 오른쪽 버튼으로 클릭 한 항목이 아닙니다.Word VBA의 오른쪽 클릭 목록 상자 항목 선택

이 답변 (http://www.vbarchiv.net/tipps/tipp_920-rechtsklick-in-der-standard-listbox-erkennen.html)이 발견되었지만 VBA에서는 불가능합니다. VBA에 대한 해결책이 있습니까?

실제로 상자가 나타나기 전에 마우스 오른쪽 버튼으로 초점을 맞춘 항목을 변경해야합니다.

이 보통리스트 박스가 지원하지 않는 히트 테스트로 이루어집니다

답변

2

는, 여기 해키 방법입니다 주셔서 감사합니다;

는 빈 흰색 상자처럼 보이는 때까지 BorderStyle 속성을 클릭 더블 어딘가에 양식 lbTest라는 또 다른 목록 상자를 추가, 설정된 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 
+0

와우,이 꽤 멋지다. 신속하고 유능한 답변을 주셔서 대단히 감사합니다. 짧은 테스트는 정확히 원하는 결과를 나타 냈습니다. – phippu