アプリ版:「スタンプのみでお礼する」機能のリリースについて

ExcelのVBAで、実行したマクロは、エクセルの戻る操作が出来ないように思います!!少なくとも私のスキルでは・・!!
で、考えたのですが、エクセルの機能の内、キー入力だけで実行できる操作であれば、キーバッファ(はるか昔にはこのように呼んでいたとおもいます。具体的には、キーボードで入力した情報を一時的に溜める部分)に模擬的にキー情報を転送すれば、エクセルの戻る機能が使えると思いました。で、どうすれば、いいのでしょうか?思いついたもののどのようにすればいいのか?解りません!
VBAもしくは、VBに詳しい方教えて頂けないでしょうか?宜しくお願い致します。できれば、マクロで、戻る操作が有効になる方法を教えて頂くと嬉しいです。よろしくお願いいたします。

A 回答 (2件)

あまり、難しいことを考えない方がいいのではないですか?



恐らく SendKeys とかkeybd_event API、または SendInput、
SendMessage、PostMessage あたりの API のことでしょう。

API はとりあえず横に置いておくとして、SendKeys について
書きます。Excel アプリケーションにとって、

 ・直接キーで入力された
 ・SendKeys で送信されたキー

の両者に違いはありません。したがって、SendKeys でキー
(ショートカットキー)を送信し、コマンドを実行する形
ならば、理屈上は Undo できるでしょう。。。

' // 下記コードも高い確率で Undo できます。
Sub sample()
  Range("A1").Copy
  Range("C5").Select
  SendKeys "^v"
End Sub

でも、せいぜい1回~2回のコマンド実行分までです。実用途に
は耐えないでしょうね。SendKeys は「失敗するもの」ですしね。
ご自身でいろいろと試してみると良いと思います。

なお、マクロの Undo を実現したいなら、マクロによる操作を全て
記録することです。例えば、

記録:A1セルの背景色 = 変更前 インデックス3
実行:A1セルの背景色 = インデックス5に変更
記録:B1セルの値 = 変更前 100
実行:B1セルの値 = 150 に更新
・・・・・・・・

などのように、操作前の状態を何らかの手法を用いて(ワークシート
などへ)記録していけば、Undo はその逆方向を実行すれば良いこと
になります。

しかしながら、今まで完全な Undo を実装したマクロを見たことは
残念ながらありませんが。。
    • good
    • 0
この回答へのお礼

御回答ありがとうございます。
マクロで操作を全て記録することは、思いついていました。しかし、折角エクセル本体にその機能があり、また、戻る確率も高い環境があるので、間接的にでも使えないものかと思い質問してみました。
とりあえずSendKeysで試行錯誤しながら確認してみます。ありがとうございました。

お礼日時:2007/08/16 09:45

こんにちは。



「元に戻る」ということは、必要な状態を保存していることに他ならないと思います。

だから、Excel VBAに限りることですが、それは、キーバッファやキーロガーというようなものではなく、VBAの実行前と実行後の元に戻すための、最小限のデータをどこかに確保すればよいのです。

例えば、数値を書き換えるなら、その数値を事前に、ファイル、または、テンポラリシート、または、グローバル変数等に保存してしまい、そして、マクロを実行します。

必要に応じて、元に戻す、というマクロを別に実行して、その保存したデータを取り戻せばよいわけです。そして、ブックを終了する前などに不要になったデータは、破棄するようにすればよいです。
    • good
    • 0

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