
Oいつもお世話になります
VBAで実行した処理はUNDOがないので、処理前にBookをC:\tempにBackupしておいて
「戻る」ボタンを押すと作業中のシートをBackUpファイルからActiveSheet.Pasteで
張り替えるいう無謀なプログラムを組んでみました
Book2が作業中のファイルです
(BackUpを取るときのプログラム)・・Book2が作業中のファイルです
Option Explicit
Public orgFileName As String '...BackUpするファイル名
Public orgExtName As String '...BackUpするファイルの拡張子
Public BakFileName As String '...BackUpファイル名
Public sFile As String '...BackUpするファイルのフルネーム
Sub MakeBackUpFile()
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WSH = CreateObject("WScript.Shell")
sFile = Book2.FullName
orgFileName = FSO.GetBaseName(Book2.Name)
orgExtName = FSO.GetExtensionName(Book2.Name)
BakFileName = "c:\temp\" & orgFileName & "_" & Format(Now(), "yyyymmdd") & "Bak." & orgExtName
Book2.SaveCopyAs BakFileName '...BackUpファイルの保存(コピーして保存)
End Sub
(UNDOプログラム)・・BakCsNameがUNDOするシートです
Sub UndoForBook2()
Dim Book3 As Workbook
Workbooks.Open BakFileName '...BackUpファイルOpen
Set Book3 = Workbooks(ActiveWorkbook.Name)
Worksheets(BakCsName).Activate
Cells.Select
Selection.Copy '...BackUpファイルのシートをコピー
Book2.Activate '...作業ファイル
Worksheets(BakCsName).Activate
Cells.Select
ActiveSheet.Paste '...シート全体をコピー
Application.DisplayAlerts = False
Book3.Close '...バックアップファイルをクローズ
Application.DisplayAlerts = True
End Sub
初めてActiveSheet.Pasteを使うのですが、式、リンク等が変化しないかがちょっと
心配です
こんな愚策でいいのか皆さんの意見を聞きたくて投稿しました
ぜひ皆さんの意見を教えてください

- 画像を添付する (ファイルサイズ:10MB以内、ファイル形式:JPG/GIF/PNG)
- 今の自分の気分スタンプを選ぼう!
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
力業を好む私はBackUpを作成して戻すという事は私もします
以前 こちらで VBA処理を戻す質問に回答した記憶があります
処理の内容にもよりますが 処理前に処理対象の現状をStatic変数や配列や
テキスト、シートやブックに書き出し保持する事で処理回数分、順に処理結果を戻すことが出来ますね
テキストファイルやcsvで追記記録すると該当処理に関しては復元できることになります
Add・・メソッドなどを戻すのは大変ですけれど処理内容が分かっていれば(わかるように記録すれば)できますね・・
いずれにしても取得するタイミングや保持、どこで破棄するかは考察する必要がありますね
No.2
- 回答日時:
No1です。
>間違いがあったときに、一度だけUNDOが出来るように考えました
>処理時間は早くて気になりませんの大丈夫です
「ある固定処理に対して、UNDOが一度だけ可能なようにする」
ということで良いのでしょうかね・・
もしそうなら、固定処理開始時に同一ブック内の非表示シートに控え(=コピー)をとっておくだけでも良さそうに思います。
「一度だけ」なので、控え用シートは一つで済みます。
(わざわざ別にブックを作成するまでもなさそうに感じられます)
控えが同一ブック内であれば、No1で挙げた参照の問題も解消することが期待できます。
「一度だけ」とのことなので、控え用のシートは設置したままで使い回しても良さそうですが、気持ちが悪ければ、終了時に削除するようにしておけば宜しいかと。
No.1
- 回答日時:
こんにちは
使い方がイマイチ想像できませんけれど・・・
セルのコピペは手操作でのコピペと同じですので、大抵のものは問題なくコピペできると思います。
ただし、自ブック内の他シートへのリンクや参照が含まれる場合、参照先がBackUp内のシートへと変換されてしまいますので注意が必要でしょう。
場合によっては、参照式やリンク等に関してはその部分を文字列としてコピーすることが必要になるかもしれませんね。
あるいは、逆に固定値のセルだけをコピペするか・・
(同一シート内への参照であれば、シートをまとめてコピペすれば大丈夫です)
使用する頻度にもよりますが、シートのActivateやSelectを使用すると画面のチラつきの原因になり易いと考えられます。
セルのコピペで良ければ、
SorceSheet.Cells.Copy DestSheet.Cells
の1センテンスで、画面を変えることなくコピペが可能です。
(ScreenUpdatingを停止すればチラつき防止はできますけれど・・)
また、毎回BackUpブックを「開く/閉じる」の処理をすることで、画面が変わってしまいますし処理時間もかかるので、常時開きっぱなしにしておく方が良さそうに思います。(メモリは食いますけれど・・)
上記の場合、BackUpブックは非表示にしておきたいところですが、同一スレッド内では1ブックだけを非表示にはできないようですので、別スレッドで開いておいて、そちらのスレッドを非表示にしておくことで、バックグラウンドの様に振る舞わせることも可能になります。
(後始末を忘れると、見えないスレッドが残りますのでご注意)
いつもお世話様です
早速のご意見ありがとうございます
特殊なコピーが出来るようにプログラムにいろいろ工夫をしました
間違いがあったときに、一度だけUNDOが出来るように考えました
処理時間は早くて気になりませんの大丈夫です
SorceSheet.Cells.Copyは初めてみるコードなので
トライしてみます
本当にありがとうございます
これからもよろしくお願い申し上げます
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでCOPYを繰り返すと、処理が...
-
vba textboxへの入力について教...
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】シートの変数へ入れ...
-
【VBA】 結合セルに複数画像と...
-
Vba Array関数について教えてく...
-
vbsでのwebフォームへの入力制限?
-
複数のExcelファイルをマージす...
-
Vba セルの4辺について罫線が有...
-
VBAでセルの書式を変えずに文字...
-
VBA ユーザーフォーム ボタンク...
-
【マクロ】並び替えの範囲が、...
-
pdfファイルの複数添付 引数の型
-
【マクロ】売上一覧YYYYMMDDHHS...
-
エクセルのマクロについて教え...
-
VBA 最終行の取得がうまくいか...
-
WindowsのOutlook を VBA から...
-
VBA 円グラフ 特定条件に一致し...
-
[VB.net] ボタン(Flat)のEnable...
-
【ExcelVBA】値を変更しながら...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vba Array関数について教えてく...
-
VBAでCOPYを繰り返すと、処理が...
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】シートの変数へ入れ...
-
vbsでのwebフォームへの入力制限?
-
エクセルのマクロについて教え...
-
【マクロ】並び替えの範囲が、...
-
Vba セルの4辺について罫線が有...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
VBAでユーザーフォームを指定回...
-
【マクロ】開いているブックの...
-
エクセルの改行について
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
算術演算子「¥」の意味について
-
Excelのマクロについて教えてく...
-
改行文字「vbCrLf」とは
-
ワードの図形にマクロを登録で...
-
VBAの「To」という語句について
-
【マクロ】変数を使った、文字...
おすすめ情報