• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:シートへのD&Dを禁止にする)

シートへのD&Dを禁止にする

このQ&Aのポイント
  • VBAでフォーム上のListViewにavi動画ファイルをD&Dすると、そのパスを読み取って、自動でプログラムを実行するマクロを作成しました。
  • 途中でプログラムの実行を中断したりすると、そのavi動画ファイルをシート上にD&Dしたのと同じ状態になり、Excelでavi動画ファイルを開こうとしてしまいます。
  • VBAかExcelの設定でシート上にファイルをD&Dしても読み込まない設定にする方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
noname#212058
noname#212058
回答No.5

回答No.1 です。 ○effect 引数, AllowedEffects というのはどのように  して使うのでしょうか? ここから先は私もサンプル組んで検証しないことには 何とも言えません。しかし、私としてもこれ以上は時間を 割きにくいので、これで私はギブアップにさせてください。 なお、回答No.3さんのアドバイスも問題解決案としては 魅力的なアイディアですよ。

その他の回答 (4)

noname#212058
noname#212058
回答No.4

回答No.1 です。追質問についてご回答します。 ○ListviewのOLEDragmodeを使っています  ⇒ 失敬。OLEDrag なら OLEDragDrop イベントでしょう    から effect 引数か AllowedEffects あたりで制御できな    いでしょうか。(当方は未検証ですが)    http://msdn.microsoft.com/ja-jp/library/cc482733.aspx ○On Error GoTo でどこでエラーが出たかを知ることはでき  ないでしょうか?  ⇒ 残念ながらできません。    デバッグ時は On Error GoTo をコメントアウトするか、    自分でどこまで実行したかを記録する変数でも作って、    処理を実行するごとに変数に『ここまで実行した』と    記録するコードをいちいち書くくらいしかできません。

DUOUIS
質問者

お礼

effect 引数, AllowedEffects というのはどのようにして使うのでしょうか? AllowedEffects = False と入力してもうまくいかないのですが  

  • ap_2
  • ベストアンサー率64% (70/109)
回答No.3

Dropでファイルを開くのは基本機能なので、禁止は難しそうですね。。。 おそらく、どこかでD&Dをキャンセルしているはずです。その前に処理が止まることで問題が起きるのなら、なるべくその処理を先に持ってきたらいいです。 まずは、どこまで進めばOKなのか確認してみてください。 Object.Clearみたいな方法でキャンセルされるなら、さっさとパス取得&クリア。もし、Dropイベントを完全に抜けないとダメなら、Application.Ontimeでメイン処理を遅延実行。Ontimeはスマートでよいかも。 'Ontime使用例 main終了直後にhogeが実行される Sub main()  Application.Ontime Now, "hoge" '並行処理されないので時間はNowでいい  MsgBox "main" End Sub Sub hoge()  MsgBox "hoge" End Sub

noname#212058
noname#212058
回答No.2

回答No.1 です。追質問についてご回答します。 ○改良を行っている途中では使えないことないですか?  ⇒ 改良を行っている場合は、On Error Goto はコメント    アウトすることも多いです。そこは開発の方法次第で。 ○On Error GoTo を使ってD&Dがなかったことにする、  キャンセルすることってできないでしょうか?  ⇒ Drag&Drop の処理を実行しているイベントは何で    しょう? BeforeDropOrPaste なら引数 Cancel    に True を入れれば既定の動作はキャンセルされます。    http://msdn.microsoft.com/ja-jp/library/office/gg264583%28v=office.15%29.aspx

DUOUIS
質問者

お礼

質問文にも書いていますが ListviewのOLEDragmodeを使っています。 BeforeDropOrPaste は BeforeDropOrPaste = False のようにして使えば良いのでしょうか? これでもD&Dがキャンセルされないようなのですが http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=49886;id=excel このページには 「そのイベントはControlのドラッグ&ドロップだと思います。」 とかかれており、Listviewのものとは別のものだと書かれています。 On Error GoTo で飛んだ場所にStopを置いて 処理を一時停止させれば、ある程度のデバッグはできるのですが どこでエラーが出たかを知ることはできないでしょうか?

noname#212058
noname#212058
回答No.1

そんなに難しく考えずに、On Error GoTo を使って バグがあってもデバッグモードに入ったり途中で止まら ないようにすれば良いのでは?

DUOUIS
質問者

お礼

ありがとうございます。 On Error GoTo のことは知らなかったので調べてみたのですが プログラムが完成してこれ以上変更を行わない場合には使えそうですが 改良を行っている途中では使えないことないですか? 要は、エラーが出るとデバッグモードに入るわけですが それでプログラムの停止ボタンを押すと D&Dしたファイルが直接シートに読み込まれてしまうのです。 On Error GoTo を使って D&Dがなかったことにする、キャンセルすることってできないでしょうか?

関連するQ&A