none
Excelでプログラムからセルの内容を更新したあとでも元に戻す操作が使えるようにしたい RRS feed

  • 質問

  • Excel2007でVSTOを使用して入力支援用のアドインを作成しているのですが、このアドインからセルの内容を変更するとExcelのUndoリストがクリアされて元に戻せなくなってしまうのですが、これをクリアされなくなるようにすることは可能でしょうか?VSTOのフォーラムが終了していましたのでこちらに投稿いたしました。

    以下ThisAddInクラス内の抜粋したコードです。アドイン上でボタンをクリックしたときに現在のアクティブセルにある文章に追記できるように作っています。

    Dim rg As Excel.Range = Me.Application.ActiveCell
    Dim beforetext As String
    beforetext = rg.Value
    rg.Value = beforetext & txt

    環境については以下の通りです。

    開発環境
    WindowsVista+Excel2007+VisualStudio2010+VSTO
    実行環境
    WindowsXP+Excel2007+VSTO

    ※この現象ですがOSはどちらの環境でも同じような動作となりました。

    2013年5月27日 3:10

回答

  • 残念ながら Excel の場合、VBAやアドイン等からの操作を
    元に戻すことはできないはずです。また、操作履歴もクリアされます。

    戻せるのはユーザー操作のみなので、SendInput API や MSAA、
    SendKeys 等を用いて、マウスやキーボード操作をエミュレートしてやれば
    一応 Undo の対象とはなりますが…。

    • 回答としてマーク Y.Yamanouchi 2013年5月27日 13:21
    2013年5月27日 5:13

すべての返信

  • 残念ながら Excel の場合、VBAやアドイン等からの操作を
    元に戻すことはできないはずです。また、操作履歴もクリアされます。

    戻せるのはユーザー操作のみなので、SendInput API や MSAA、
    SendKeys 等を用いて、マウスやキーボード操作をエミュレートしてやれば
    一応 Undo の対象とはなりますが…。

    • 回答としてマーク Y.Yamanouchi 2013年5月27日 13:21
    2013年5月27日 5:13
  • 戻せるのはユーザー操作のみなので、SendInput API や MSAA、
    SendKeys 等を用いて、マウスやキーボード操作をエミュレートしてやれば
    一応 Undo の対象とはなりますが…。

    もしくはバックアップファイルを保存しとくとか...くらいでしょうかね。処理の重さを考えると、あまり現実的じゃないでしょうが。

    ひらぽん http://d.hatena.ne.jp/hilapon/

    2013年5月27日 8:00
    モデレータ
  • 回答ありがとうございます。

    プログラム上からの操作は無理なのですね・・・。

    2013年5月27日 13:16
  • 回答ありがとうございます。

    内容見て思いついたのはアドイン上にやり直しボタンを追加して、1回ぐらいはUndoを実装しておくというのは落とし所かもしれません。ちょっと考えてみたいと思います。

    2013年5月27日 13:19