2009-03-16 3 views
1

약간의 Excel + VBA 응용 프로그램을 사용하고 있는데 막혔습니다. 나는 그것을 알고있다Excel + VBA : 도형 위를 클릭하면 오른쪽 클릭 메뉴가 변경됩니다.

Application.CommandBars("Cell").Controls.* 

나는 (물론 추가 코드가있는) 특정 셀에 대한 특정 옵션 만 보여주기 위해 오른쪽 클릭 메뉴를 변경할 수있다.

그러나 도형 위를 마우스 오른쪽 버튼으로 클릭하면 메뉴가 변경되는 방법이 있습니까?

내가

(...) 
'checking autoshape position 
sh_le = sh.Left 
sh_to = sh.Top 
sh_ri = sh.Left + sh.Width 
sh_do = sh.Top + sh.Height 

'checking clicked cell position 
cc_le = cel.Left 
cc_to = cel.Top 
cc_ri = cel.Left + cel.Width 
cc_do = cel.Top + cel.Height 

If (sh_le <= cc_le) And (sh_to <= cc_to) And (sh_ri >= cc_ri) And (sh_do >= cc_do) Then 
'build custom menu 
end if 

이 좋아 보인다 같은 것을 사용하고있다 (적어도 나는 :) 그렇게 생각 -하지만 난 모양 위에 클릭하고 때 Worksheet_BeforeRightClick이 시작되지 않습니다. 그렇게 할 수있는 다른 방법이 있습니까? 나는 모든 정보에 대해 감사 할 것입니다.

+1

http://www.experts-exchange.com/Software/Office_Productivity /Office_Suites/MS_Office/Q_20166603.html – THEn

답변

0

이렇게 구현했습니다. 코드에서와 같이 OnAction = "openOrder" 여기서 openOrder은 공용 모듈입니다.

당신은. ("모양")로하는 CommandBars을 제어합니다. 을 CommandBars ("셀")를 변경 제어 할 수

Private Sub Workbook_Deactivate() 
    On Error Resume Next 
    Application.CommandBars("Cell").Controls("View order").Delete 
    On Error GoTo 0 
End Sub 

     Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 

     Dim cBut As CommandBarButton 

     On Error Resume Next 

     If IneedCustomMenu=TRUE Then 
      On Error Resume Next 
      Set cBut = Application.CommandBars("Cell").Controls.Add(Temporary:=True) 
       With cBut 
        .Caption = "View order" 
        .Style = msoButtonCaption 
        .OnAction = "openOrder" 
       End With 
      On Error GoTo 0 
     Else 
       On Error Resume Next 
       With Application 
         .CommandBars(Cell).Controls("View order").Delete 
       End With 
     End If 
     End Sub 
+1

CommandBars에서 작동하지 않는다 ("Shapes") –

1

파일을 닫은 후 다시 열 때까지이 이벤트가 발생하지 않을 수 있음을 나타내는 문서화되지 않은 기능이 있습니다.

시도해보십시오.