[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『オートシェイプに対する右クリックの無効化』(ナック28)
オートシェイプに対する右クリックを無効とすることはできますでしょうか。
プロパティのロックをオンとしてシートを保護することでクリックできなくなることは承知しています。
シートを保護しなくてもオートシェイプを右クリックしたことにより、図形編集の頂点と線分を表示させたくありません。
APIを使ってできる方法がありましたら、教えて頂けると助かります。
宜しくお願いします。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
邪道(?)ですが・・・
標準モジュールに。 一度だけ、Testを実行してください。 そのあとは、オートシェープをクリックしようとしても、「弾き飛ばされます」
Option Explicit Private Declare Function SetCursorPos Lib "User32" ( _ ByVal x As Long, _ ByVal y As Long _ ) As Boolean
Sub Test() Dim sp As Shape
For Each sp In ActiveSheet.Shapes If sp.Type = msoAutoShape Then sp.OnAction = "マウス移動" Next
End Sub
Sub マウス移動() SetCursorPos 10, 10 End Sub
(β) 2015/02/12(木) 18:42
↑ よく考えたら、「弾き飛ばさなくてもOK」でした。SetCursorPosは不要です。
Sub Test() Dim sp As Shape
For Each sp In ActiveSheet.Shapes If sp.Type = msoAutoShape Then sp.OnAction = "クリック無効" Next
End Sub
Sub クリック無効() End Sub
(β) 2015/02/12(木) 18:45
↑ あぁ、右クリック でしたね。 ちょっと考えてみます。
(β) 2015/02/12(木) 18:47
とりあえずの、これまた邪道(?)です。 オートシェープの上にマウスが来たら、はじきとばします。 裏で監視ループを回しますので、操作が若干重くなるかもしれませんが、とりあえず、手持ちの材料で書きました。 もっと、いい方法も探してみたいと思いますし、識者の方からの回答も期待しています。
監視をとめたければ 監視終了を実行してください。
標準モジュール
Option Explicit
Private Declare Function GetCursorPos Lib "User32" (lpPoint As POINTAPI) As Long Private Declare Function SetCursorPos Lib "User32" ( _ ByVal x As Long, _ ByVal y As Long _ ) As Boolean
Type POINTAPI x As Long y As Long End Type
Dim DoLoop As Boolean
Sub 監視開始() Dim vv As Object Dim MPt As POINTAPI
DoLoop = True
Do While DoLoop
GetCursorPos MPt Set vv = ActiveWindow.RangeFromPoint(MPt.x, MPt.y) If Not vv Is Nothing Then If TypeName(vv) <> "Range" Then If vv.ShapeRange.Type = msoAutoShape Then SetCursorPos 10, 10 End If End If End If
DoEvents DoEvents
Loop
End Sub
Sub 監視終了() DoLoop = False End Sub
(β) 2015/02/12(木) 19:25
こんなページがありました。
http://homepage1.nifty.com/rucio/main/tyukyu/tyukyu9.htm
VBですけど、なんとなく使えそうですね。でも、フック同様、なまはんかに使うと、影響が甚大かも。 私自身も、おもしろそうなので、よく読んで試してみようかとは思いますが、さて、どうなりますか。
(ナック28)さん もトライされますか?
(β) 2015/02/12(木) 19:42
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.