- ベストアンサー
エクセル2007で CellDragAndDrop の有効・無効を切り替える方法
- エクセル2007で CellDragAndDrop の有効・無効を切り替える方法について教えてください。
- ドラッグアンドドロップを禁止するために、Auto_Open() マクロで CellDragAndDrop を無効に設定し、終了時には有効に戻しています。
- しかし、終了時に[終了]-[キャンセル]を選択して再度作業を進めようとすると CellDragAndDrop が有効になってしまいます。Auto_Close() マクロで[終了]-[キャンセル]の場合だけ CellDragAndDrop を無効にする方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
なぜ質問のようになるかというと、 書き込み確認メッセージが出る前にAuto_Closeが処理されるからです。 で、代わりに、Workbook_BeforeCloseイベントで、 独自の書込み確認メッセージを表示してコントロールしてみたらどうでしょう。 確認メッセージにはデフォルトのメッセージと同様、 「はい」「いいえ」「キャンセル」の3つのボタンを表示させます。 また、Auto_OpenもWorkbook_Openに変えて統一しておくといいでしょう。 Atuo_OpenとAuto_Closeは削除して 以下のコードを、ThisWorkBookモジュールにコピペ。 '------------------------------------------- Private Sub Workbook_Open() Application.CellDragAndDrop = False End Sub '------------------------------------------- Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim msg msg = MsgBox(ThisWorkbook.Name & " を保存しますか?", vbYesNoCancel, "確認") Select Case msg Case vbYes Application.CellDragAndDrop = True ThisWorkbook.Save Case vbNo Application.CellDragAndDrop = True ThisWorkbook.Saved = True Case Else Cancel = True End Select End Sub '------------------------------------------------- Auto_CLoseではなぜ上記のことができないかはお分かりですね? 以上です。
その他の回答 (2)
- myRange
- ベストアンサー率71% (339/472)
またまた、myRangeです。 xl2007でも検証しました。 やはり、デフォルトの確認メッセージは出ません。 検証は、マクロを含んでいるブック(thisworkbook)ひとつで試しています。 当方のコードで、独自のメッセージとデフォルトのメッセージがでるとしたら どんな条件のときなのか当方としても知っておく必要がありますので 先の補足要求および、質問者の検証条件など、提示してください。 以上です。
お礼
お返事・お礼が遅くなって申し訳ありません。 ご指摘のとおり、Auto_Closeに図形を貼り付けるマクロが残っていました。 Auto_Closeを完全に削除し Workbook_BeforeCloseに以下のように書き込んで解決しました。 Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim msg msg = MsgBox(ThisWorkbook.Name & " を保存しますか?", vbYesNoCancel, "確認") Select Case msg Case vbYes Application.CellDragAndDrop = True Sheets("入力1").Shapes("A").Visible = True Sheets("入力2").Shapes("B").Visible = True Sheets("入力3").Shapes("C").Visible = True ThisWorkbook.Save Case vbNo Application.CellDragAndDrop = True Sheets("入力1").Shapes("A").Visible = True Sheets("入力2").Shapes("B").Visible = True Sheets("入力3").Shapes("C").Visible = True ThisWorkbook.Saved = True Case Else Cancel = True End Select End Sub お騒がせして本当に申し訳ありません。重ねてお礼とお詫びをいたします。 ありがとうございました。
- myRange
- ベストアンサー率71% (339/472)
回答1、myRangeです。 当方で試してみましたが、はい、いいえ、でもデフォルトのメッセージは表示されません。 ま、初めからそこら辺りは考慮したつもりですが。 但し、xl2007が手元にないのでxl2000での検証です。 で、確認。 (1)Auto_Closeは削除したか (2)当方の回答の外のところに、SaveやCloseなどのコードはないか (3)当方の回答部分をコピペしたはずですが、それを修正加筆してないか もしそうなら、その部分(Workbook_Closeイベント)をアップしてください 以上確認願います。
お礼
ありがとうございます! [終了]-[キャンセル]でもドラッグ・ドロップが無効のまま作業することができました。 ただ、「確認」のメッセージボックス[はい][いいえ]を選択すると、 「Microsoft Office Excel」の[はい][いいえ][キャンセル]メッセージが再度表示されてしまいます。 この表示が出ないようにすることはできるのでしょうか? 度々申し訳ありませが、ご教示いただけますでしょうか。 よろしくお願いします。