| 
    
     |  | ▼ichinose さん: >こんばんは。
 >>やりたいと思っている処理は以下の通りです。
 >>1.現在セル(C2:E4)を選択しているとする。(選択の中心はC2)
 >>2.ショートカットキー(Alt+4)を押すと、2〜4行全体が削除される。
 >>3.その後、選択セルがC2に戻る。
 >>4.Undo(Ctrl+Zなど)を行えばきちんと前の状態に戻るようにする。
 >>
 >>※直接マクロで処理を行わず、Application.Sendkeysでコマンドを送っているのは、Undoを可能にするためです。
 >
 >ふ〜ん、これ本当ですか??
 >
 >Excel2002で例えば、
 >
 >Sub test1()
 >  With Rows(1)
 >    .Select
 >    .Value = 1
 >    End With
 >  Application.SendKeys "%ed"
 >  DoEvents
 >  'MsgBox "確認"
 >  Application.SendKeys "^z"
 >  DoEvents
 >  Range("a1:c1").Select
 >End Sub
 >
 >とすれば、1行目がSendkeysによって削除されますが、Undoは効きませんでした。
 >(エラーにはなりませんが)
 >これがバージョンによっては成功するのですか?
 >
 >Excel2002でUndoを成功させるには・・・、
 >
 >'===============================================
 >Sub test()
 >  With Rows(1)
 >    .Select
 >    .Value = 1
 >    End With
 >  With Range("a1:c1")
 >    .Value = 2
 >    .Select
 >    End With
 >  MsgBox "確認1"
 >  Application.ExecuteExcel4Macro "EDIT.DELETE(3)"
 >  MsgBox "確認2"
 >  Application.Undo
 >  Range("a1:c1").Select
 >End Sub
 >
 >
 >上記コードのようにExcel4Macroでの行削除はUndoが有効でした。
 >
 >バージョンが違うのなら、確認してみて下さい
 
 
 >ichinoseさん
 ありがとうございます。
 確かに1つ目の方法だとUndoが有効にならず、2つ目ではうまくいきました。
 僕のエクセルも2002なので、動作が同じでした。
 
 恐らく、セルに影響を与えるようなマクロの処理を挟んだ時点でそれまでの処理記録のようなものがなくなってしまうのではないかと思いました。
 
 test1は、
 Sub test1()
 Rows(1).Select
 Application.SendKeys "1^{Enter}"
 Application.SendKeys "%ed"
 '  DoEvents
 '  MsgBox "確認"
 '  Application.SendKeys "^z"
 '  DoEvents
 '  Range("a1:c1").Select
 End Sub
 とするとUndoが有効になりました。
 SendKeysでコマンドを送っているだけならUndoが有効なのでしょうか。
 
 あとichinoseさんのtest()を参考にすると、もしかしたら、Application.*に関してはUndoが有効になるのかとも思いました。
 ちょっと確認してみたいと思います。
 
 どうもありがとうございました。
 
 
 |  |