- ベストアンサー
Excel_VBAでキーバッファへのデータの転送
- ExcelのVBAで実行したマクロにおいて、エクセルの戻る操作ができない状況に困っています。キーバッファを利用して戻る機能を実現する方法について教えてください。
- VBAやVBの知識がある方に質問です。エクセルのVBAで実行したマクロにおいて、戻る操作を有効にする方法はありますか?キーバッファを使用してデータを転送することで戻る機能を実現できるのではないかと考えています。具体的な手順について教えていただけると助かります。
- ExcelのVBAでマクロを実行した場合、戻る操作ができない問題に直面しています。キーバッファを利用してデータを転送することで、戻る機能を実現できるのではないかと考えています。VBAやVBに詳しい方に教えていただきたいです。マクロを実行した後でも戻る機能を有効にする方法を教えてください。
- みんなの回答 (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 を実装したマクロを見たことは 残念ながらありませんが。。
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 「元に戻る」ということは、必要な状態を保存していることに他ならないと思います。 だから、Excel VBAに限りることですが、それは、キーバッファやキーロガーというようなものではなく、VBAの実行前と実行後の元に戻すための、最小限のデータをどこかに確保すればよいのです。 例えば、数値を書き換えるなら、その数値を事前に、ファイル、または、テンポラリシート、または、グローバル変数等に保存してしまい、そして、マクロを実行します。 必要に応じて、元に戻す、というマクロを別に実行して、その保存したデータを取り戻せばよいわけです。そして、ブックを終了する前などに不要になったデータは、破棄するようにすればよいです。
お礼
御回答ありがとうございます。 マクロで操作を全て記録することは、思いついていました。しかし、折角エクセル本体にその機能があり、また、戻る確率も高い環境があるので、間接的にでも使えないものかと思い質問してみました。 とりあえずSendKeysで試行錯誤しながら確認してみます。ありがとうございました。