- ベストアンサー
シートへのD&Dを禁止にする
- VBAでフォーム上のListViewにavi動画ファイルをD&Dすると、そのパスを読み取って、自動でプログラムを実行するマクロを作成しました。
- 途中でプログラムの実行を中断したりすると、そのavi動画ファイルをシート上にD&Dしたのと同じ状態になり、Excelでavi動画ファイルを開こうとしてしまいます。
- VBAかExcelの設定でシート上にファイルをD&Dしても読み込まない設定にする方法を教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
回答No.1 です。 ○effect 引数, AllowedEffects というのはどのように して使うのでしょうか? ここから先は私もサンプル組んで検証しないことには 何とも言えません。しかし、私としてもこれ以上は時間を 割きにくいので、これで私はギブアップにさせてください。 なお、回答No.3さんのアドバイスも問題解決案としては 魅力的なアイディアですよ。
その他の回答 (4)
回答No.1 です。追質問についてご回答します。 ○ListviewのOLEDragmodeを使っています ⇒ 失敬。OLEDrag なら OLEDragDrop イベントでしょう から effect 引数か AllowedEffects あたりで制御できな いでしょうか。(当方は未検証ですが) http://msdn.microsoft.com/ja-jp/library/cc482733.aspx ○On Error GoTo でどこでエラーが出たかを知ることはでき ないでしょうか? ⇒ 残念ながらできません。 デバッグ時は On Error GoTo をコメントアウトするか、 自分でどこまで実行したかを記録する変数でも作って、 処理を実行するごとに変数に『ここまで実行した』と 記録するコードをいちいち書くくらいしかできません。
- ap_2
- ベストアンサー率64% (70/109)
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
回答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
お礼
質問文にも書いていますが 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を置いて 処理を一時停止させれば、ある程度のデバッグはできるのですが どこでエラーが出たかを知ることはできないでしょうか?
そんなに難しく考えずに、On Error GoTo を使って バグがあってもデバッグモードに入ったり途中で止まら ないようにすれば良いのでは?
お礼
ありがとうございます。 On Error GoTo のことは知らなかったので調べてみたのですが プログラムが完成してこれ以上変更を行わない場合には使えそうですが 改良を行っている途中では使えないことないですか? 要は、エラーが出るとデバッグモードに入るわけですが それでプログラムの停止ボタンを押すと D&Dしたファイルが直接シートに読み込まれてしまうのです。 On Error GoTo を使って D&Dがなかったことにする、キャンセルすることってできないでしょうか?
お礼
effect 引数, AllowedEffects というのはどのようにして使うのでしょうか? AllowedEffects = False と入力してもうまくいかないのですが