プロが教える店舗&オフィスのセキュリティ対策術

毎月の集計表にデータクリアのマクロを記録し、クリアボタンを作ったのですが、
データクリアボタンを押した際、
すぐにクリアする前にメッセージボックスを出そうと思い、
ネット等で調べてコピーしてきたものを改良しながらやってみたのですが、
『はい』を押したときにはうまくデータをクリアしてくれるのですが、
『いいえ』を押したときにエラーが出ます。エラーの内容は

『実行時エラー'1004':
'Undo'メゾットは失敗しました:'_Application'オブジェクト』

と出て、デバッグを押すと、式中の『.Undo』が黄色くなっています。
しかし、意味も分からずコピーしてきた式なので、
どう直せばいいのかわかりません。
『.Undo』部分に'何もせずメッセージボックスを閉じる'という
意味合いの式を入れればいいんだとは思うのですが、
どういう式を入れればいいのでしょうか?
また当該式は、マクロの記録により得た式を
不用意にクリックして出来た『.Select』の式や、
スクロールさせた時に出来た式等を自分で削除しながら作った式なので、
式中で他におかしな部分があれば教えて下さい。
宜しくお願い致します。


ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

Sub データクリア()
'
' Macro1 Macro
' マクロ記録日 : 2007/11/18 ユーザー名 : #######
'
'
myYN = MsgBox("データクリアが押されました。 " & Chr(10) & _
"クリアしていいですか?", vbYesNo + vbQuestion)
If myYN = vbNo Then
With Application
.EnableEvents = False
.Undo           ←ここが黄色くなります。
.EnableEvents = True
End With
End If

Range( _
"AI26:AJ31,AI17:AJ20,AI8:AJ11,AR8:AS11,AR17:AS19,AR25:AS29,A87:R105,Y92:AC99,Y84:AC90,Y74:AC78,Y69:AC72,Y60:AC67,Y50:AC54,Y43:AC48,Y33:AC34,Y27:AC31,Y20:AC25,Y8:AC15,AD8:AD15,AD20:AD25,AD27:AD31,AD33:AD34,AD43:AD48,AD50:AD54,AD60:AD67,AD69:AD72,AD74:AD78" _
).Select
Range( _
"AJ81:AO83,AJ76:AO77,AJ64:AP71,AI51:AJ53,AI43:AJ45,AI37:AJ37,A87:R105,R52:R79").Select
Selection.ClearContents
Range("AI8").Select

A 回答 (1件)

たしか、UndoはExcelの「元に戻す」ボタンを押したときの処理ですよ。



試していませんが、下記でできると思います。
#不要そうなコードも削除してあります。

myYN = MsgBox("データクリアが押されました。 " & Chr(10) & _
"クリアしていいですか?", vbYesNo + vbQuestion)
If myYN = vbNo Then
Exit Sub
End If

Range("AJ81:AO83,AJ76:AO77,AJ64:AP71,AI51:AJ53,AI43:AJ45,AI37:AJ37,A87:R105,R52:R79").ClearContents

Range("AI8").Select
    • good
    • 0
この回答へのお礼

出来ました!^^
なんとすっきりした式になるのですね。
どうもありがとうございました。
又宜しくお願い致します。

お礼日時:2007/10/19 10:03

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