教えて! goo のコンテンツに対する取り組みについて

いつもお世話になっています。目的を検索していますが、思い通りの結果が見つからないのでよろしくお願いします。

会社のPCでプログラム作成していますが、開発環境はエクセル、ワード等のVBAのみです。

一般的ではない画像処理ソフトで画像の輪郭を取る作業なのですが、エクセルVBAから画像処理ソフトをアクティブにし、座標の色を取得し、色によってクリックすることが目的です。

http://thom.hateblo.jp/entry/2015/11/21/002304
上記ページを参考に輪郭のクリックまではできるようになりましたが、輪郭を取るために近隣の座標で短時間にクリックを繰り返すのがダブルクリックとして処理されているようで、シングルクリックして破線で囲む作業が中断されます。
上記ページのプログラムに追記する形でマクロ処理中はダブルクリック禁止とすることはできないでしょうか?

質問者からの補足コメント

  • うれしい

    早速の回答ありがとうございます。
    確認が済むまでしばらくかかりそうなので、ベストアンサーはしばらくお待ちください。

      補足日時:2017/11/19 00:22
gooドクター

A 回答 (4件)

「Workbook_Open」の方は「初期マウス間隔 = GetDoubleClickTime」が無いとマウスのダブルクリックの間隔を GUI で変更していた時に対応できません(標準の 500ms にしてしまって良ければ無くてもかまいませんけど…)


「Workbook_BeforeClose」の方は、ダブルクリックを無効にしたままエクセルを閉じてしまうと、ダブルクリックが使えなくなって不便なのでそれの対応用です。もちろん GUI で変更すれば対応出来ますが、気づく人がいるでしょうか?
一番の問題は「タッチ操作」についてです。これはあくまでもマウスへの対応なのでタッチ動作には対応できていないと思います(テスト出来る環境が無いので、こちらでは実験が出来ません)なぜかというと「Win32 API」は 32ビット環境の時に作られたものでその頃はタッチ動作なんてなかったのでマウス動作とは内部的には別物だと思います。タッチ動作のも有るはずですが全ての Win32 API を知っているわけではないので、今のところ対応不可です。一応は探してみますが時間がかかるのと、出来てもこちらでは実験が出来ないので実際の確認はお任せする事になると思います。
    • good
    • 0
この回答へのお礼

丁寧にありがとうございました。
見通しが立ってきました。

お礼日時:2017/11/20 21:18

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)」
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
確認したいのですが、Workbook_Openと_BeforeCloseの部分は必要でしょうか。
上記URLのマクロを実行する際のみダブルクリックを無効としたいので、マクロの先頭でSetDoubleClickTime (1)、指定の座標で連続したクリック、EndSubの前でSetDoubleClickTime (500)と記述することは不具合がありますか。
また、ご教示いただいたマクロを自宅タブレットで実行してみたのですが、タッチ操作でダブルクリックするとダブルクリック無効のマクロが機能していないようです。マクロによるダブルクリックのみ無効とするマクロなのでしょうか。それともタッチパネルの操作とマウス操作の違いがあるのでしょうか。

お礼日時:2017/11/19 23:21

「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)をセットするものです。緊急時に使用してください。
    • good
    • 0

一応ダブルクリックを禁じるイベントプロシージャがあるにはあるのですが…



https://www.moug.net/tech/exvba/0150030.html

これはワークシート限定です。Excelの外に出てしまうと効きません。何しろシステムイベントだから、一律に禁止することはWindows自体も想定していないと思います。

一律的に効いて、かつ現実的な線ですぐやれる対策としては、Windowsの設定をいじってダブルクリックの間隔を短くすることが思い付きます。マクロ側で、それよりも長いクリック間隔を維持する必要はありますが。

ご存知でしょうけど、一応設定方法
https://dekiru.net/article/13340/
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

人気Q&Aランキング