2009-03-16 6 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で動作しない(図形) –

1

ファイルを閉じてから再度開くまで、このイベントが発生しないことを意味する未記載のフィーチャレットがあります。

これを試してください。

関連する問題