
いつもお世話になっています。目的を検索していますが、思い通りの結果が見つからないのでよろしくお願いします。
会社のPCでプログラム作成していますが、開発環境はエクセル、ワード等のVBAのみです。
一般的ではない画像処理ソフトで画像の輪郭を取る作業なのですが、エクセルVBAから画像処理ソフトをアクティブにし、座標の色を取得し、色によってクリックすることが目的です。
http://thom.hateblo.jp/entry/2015/11/21/002304
上記ページを参考に輪郭のクリックまではできるようになりましたが、輪郭を取るために近隣の座標で短時間にクリックを繰り返すのがダブルクリックとして処理されているようで、シングルクリックして破線で囲む作業が中断されます。
上記ページのプログラムに追記する形でマクロ処理中はダブルクリック禁止とすることはできないでしょうか?
No.4ベストアンサー
- 回答日時:
「Workbook_Open」の方は「初期マウス間隔 = GetDoubleClickTime」が無いとマウスのダブルクリックの間隔を GUI で変更していた時に対応できません(標準の 500ms にしてしまって良ければ無くてもかまいませんけど…)
「Workbook_BeforeClose」の方は、ダブルクリックを無効にしたままエクセルを閉じてしまうと、ダブルクリックが使えなくなって不便なのでそれの対応用です。もちろん GUI で変更すれば対応出来ますが、気づく人がいるでしょうか?
一番の問題は「タッチ操作」についてです。これはあくまでもマウスへの対応なのでタッチ動作には対応できていないと思います(テスト出来る環境が無いので、こちらでは実験が出来ません)なぜかというと「Win32 API」は 32ビット環境の時に作られたものでその頃はタッチ動作なんてなかったのでマウス動作とは内部的には別物だと思います。タッチ動作のも有るはずですが全ての Win32 API を知っているわけではないので、今のところ対応不可です。一応は探してみますが時間がかかるのと、出来てもこちらでは実験が出来ないので実際の確認はお任せする事になると思います。
No.3
- 回答日時:
No.2 の「Sub ダブルクリック有効無効切替()」の改良版です。
他のモジュールから呼び出すときに便利なように「有効」「無効」を指定できるようにしました。'・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Sub ダブルクリック有効無効切替(Optional ダブルクリック無効 As Boolean)
If IsMissing(ダブルクリック無効) Then
If 初期マウス間隔 = 0 Then
MsgBox ("初期マウス間隔がセットされていません。一度閉じて再開してください。")
Else
If GetDoubleClickTime = 1 Then
If MsgBox("ダブルクリックを有効にしますか?", vbDefaultButton1 + vbYesNo) = vbYes Then
SetDoubleClickTime (初期マウス間隔)
End If
Else
If MsgBox("ダブルクリックを無効にしますか?", vbDefaultButton2 + vbYesNo) = vbYes Then
SetDoubleClickTime (1)
End If
End If
End If
Else
If 初期マウス間隔 = 0 Then
SetDoubleClickTime (0)
初期マウス間隔 = GetDoubleClickTime
End If
If ダブルクリック無効 Then
SetDoubleClickTime (1)
Else
SetDoubleClickTime (初期マウス間隔)
End If
End If
End Sub
'・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
※ 確認して切り替える場合は「Call ダブルクリック有効無効切替」
※ 確認せずに「無効」にするときは「Call ダブルクリック有効無効切替(True)」
※ 確認せずに「有効」にするときは「Call ダブルクリック有効無効切替(False)」
ご回答ありがとうございます。
確認したいのですが、Workbook_Openと_BeforeCloseの部分は必要でしょうか。
上記URLのマクロを実行する際のみダブルクリックを無効としたいので、マクロの先頭でSetDoubleClickTime (1)、指定の座標で連続したクリック、EndSubの前でSetDoubleClickTime (500)と記述することは不具合がありますか。
また、ご教示いただいたマクロを自宅タブレットで実行してみたのですが、タッチ操作でダブルクリックするとダブルクリック無効のマクロが機能していないようです。マクロによるダブルクリックのみ無効とするマクロなのでしょうか。それともタッチパネルの操作とマウス操作の違いがあるのでしょうか。
No.2
- 回答日時:
「Win32 API」を使ったものです。
(OS全体に影響が出ますので使用には注意してください)ダブルクリック判定用の時間を1msにしてほぼ不可能にしています。(通常のGUIでの設定では200ms位までしか出来ません)--------------------------------------------------------------------------------
'☆「ThisWorkbook」に
'・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Private Sub Workbook_BeforeClose(Cancel As Boolean)
SetDoubleClickTime (初期マウス間隔)
End Sub
'・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Private Sub Workbook_Open()
初期マウス間隔 = GetDoubleClickTime
SetDoubleClickTime (1) '起動時は有効にしたいときはこの行を削除してください
End Sub
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
'☆「標準モジュール」に
'・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Option Explicit
Public Declare Function GetDoubleClickTime Lib "USER32" () As Long
Public Declare Function SetDoubleClickTime Lib "USER32" (ByVal wCount As Long) As Long
Public 初期マウス間隔 As Long
'・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Sub ダブルクリック有効無効切替()
If 初期マウス間隔 = 0 Then
MsgBox ("初期マウス間隔がセットされていません。一度閉じて再開してください。")
Else
If GetDoubleClickTime = 1 Then
If MsgBox("ダブルクリックを有効にしますか?", vbDefaultButton1 + vbYesNo) = vbYes Then
SetDoubleClickTime (初期マウス間隔)
End If
Else
If MsgBox("ダブルクリックを無効にしますか?", vbDefaultButton2 + vbYesNo) = vbYes Then
SetDoubleClickTime (1)
End If
End If
End If
End Sub
'・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Sub ダブルクリック間隔初期化()
SetDoubleClickTime (0)
初期マウス間隔 = GetDoubleClickTime
End Sub
--------------------------------------------------------------------------------
※ Excel だけでなく他のアプリでもダブルクリックが効かなくなります。
※ 入力したら一度保存して閉じてください(初期値が保存できない為)
※「ダブルクリック間隔初期化」は何だかの原因で「初期マウス間隔」に変な値がセットされてしまった場合OSがもっている初期値(一般的に500ms)をセットするものです。緊急時に使用してください。

No.1
- 回答日時:
一応ダブルクリックを禁じるイベントプロシージャがあるにはあるのですが…
https://www.moug.net/tech/exvba/0150030.html
これはワークシート限定です。Excelの外に出てしまうと効きません。何しろシステムイベントだから、一律に禁止することはWindows自体も想定していないと思います。
一律的に効いて、かつ現実的な線ですぐやれる対策としては、Windowsの設定をいじってダブルクリックの間隔を短くすることが思い付きます。マクロ側で、それよりも長いクリック間隔を維持する必要はありますが。
ご存知でしょうけど、一応設定方法
https://dekiru.net/article/13340/
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel ハイパーリンク設定について 教えてください 例なんですが、 VBAにてファイル1の列Gに
- トレパク疑惑をかけられにくくするには ここ最近いわゆるトレパク警察のいいがかりがが厳しくなったようで
- 3つのプロシージャをまとめたら実行時エラー発生で対応不能
- ここでの ②if($su_d<>"")の比較演算子 を使う理由は
- Vba 互換モードでのAppActiveについて教えてください
- Outlook VBAについて
- エクセルでcsvファイルを開いてVBAを使いたい
- エクセルVBA 特殊フォルダのパスを取得の方法を教えてください
- Excel VBAについてです。 少しだけ知識はあるのですが、 うまくいかなかったので 質問させてい
- プログラムの勉強のおすすめは
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
Excel保護セルでダブルクリックを一時的に無効にする方法。
Excel(エクセル)
-
Excelのマクロボタンをダブルクリックされて困っています
Visual Basic(VBA)
-
シングルクリックとダブルクリックのイベントについて
Access(アクセス)
-
-
4
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
5
Accessフォームのボタンの二度押し禁止
Access(アクセス)
-
6
コマンドボタンに二回目のマクロ実行しない設定を
Visual Basic(VBA)
-
7
EXCELマクロ 保護されているシートのダイアログを表示させない方法
Visual Basic(VBA)
-
8
【EXCEL】【VBA】空欄は飛ばして処理する方法を教えて下さい。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マウスが壊れているかどうかを...
-
マウスをコンコンして使う人
-
光るマウスのLEDを消したい!
-
BALB/cマウスとはどんなマウス...
-
入社2年目の下っ端がマイマウ...
-
マウスを2つ繋げて同時に2つ...
-
モニター切り替え後マウスが動...
-
突然マウスの操作が逆になって...
-
Excel2010で横スクロールが出来...
-
マウスのホイールが上に回して...
-
マウスの電磁波について
-
マウスをつなぐとピーッと異音...
-
マウスコンピュータの評判
-
白いマウスの汚れについて
-
マウスのカチッカチッ音を消したい
-
マウスを動かすと CPU使用率が...
-
反出生主義についてどう感じま...
-
マウスが勝手に動くのですが
-
マウスが暴れるのですが…
-
コーンスネークのえさ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マウスをコンコンして使う人
-
光るマウスのLEDを消したい!
-
マウスを2つ繋げて同時に2つ...
-
突然マウスの操作が逆になって...
-
HPとマウスコンピューターのデ...
-
マウスを動かすと電子音が聞こ...
-
マウスの速度が戻る
-
モニター切り替え後マウスが動...
-
入社2年目の下っ端がマイマウ...
-
マウスの操作音について
-
マウスの動きが一瞬止まります。
-
thunderbird クリックするだけ...
-
BALB/cマウスとはどんなマウス...
-
白いマウスの汚れについて
-
マウスの電磁波について
-
1台のPCに2つのUSBマウス
-
反出生主義についてどう感じま...
-
バッチファイル 自動クリック
-
wordのテキストボックスのサイ...
-
マウスポインタが小刻みに揺れる
おすすめ情報
早速の回答ありがとうございます。
確認が済むまでしばらくかかりそうなので、ベストアンサーはしばらくお待ちください。