

エクセルのBeforeCloseのイベントで以下のようなファイルコピーを実行しています
FSO.CopyFile ActiveWorkbook.Path & "\" & ActiveWorkbook.Name, _
BackUpPath & "\" & StrSavedFileName
やってることは、自分自身のファイルを別のバックアップ用フォルダにコピーしているのですが。
これをすると、次に同じファイルを開くと、VBProjectを開いた時バックアップした分VBProject名が残っています。
エクセルファイルを閉じた後、タスクマネージャにもExcelが残っています。
恐らく、BackUpPathのコピー先ファイルのVBProjectなのではと考えています。
試しに、この記述をコメント化すると、この現象はなくなります。
そこで質問ですが、このCopy先のVBProjectを閉じる方法はありますでしょうか?
または代替案など・・ありましたら、ご教授して頂きたいです。
よろしくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
#1の回答者です。
#1の方法では、後からみると、あまり意味がないと思います。
Before_Close のイベントなど不要だからです。あえて、Before_Close にこだわっただけです。
こんなことを書いても、本件には意味のない話かと思いますが。
もう少し、加えさせていただきます。
私は、この辺りのことは、何年も使い続けてきましたので、FileSystemObject という考え方は間違いではないと思います。
もちろん、VBA内部コマンドであれば、いかようにも問題はないと思います。しかし、そのメリットとしては、外部オブジェクトを利用すると、何倍ものスピードでバックアップが可能になります。何より、VBAの動きを気にせずに動かせるからです。実際のこちらのファイルサイズは、10M程度ですが、それでも、待たされることは一度もありませんでした。
しかし、問題になるのは、その実体のファイルそのもなのだと思います。私が起動時にバックアップを取った意味もお分かりになるかと思います。
Before_Close の段階では、実体ファイルはないはずなのです。
(あるという人もいるのでしょうけれども、まるごと含めた実体ファイルは存在していないはずです。だから、そういう結果になったとも言えます。)
早い話、一旦Excelを抜けて、エクスプローラー辺りで、開いているファイルのタイムスタンプを見ればわかりますでしょう。
本筋に話を戻すと、
>このCopy先のVBProjectを閉じる方法はありますでしょうか?
これは、ある意味エラーが発生していると思うのです。今現在のコードで、バックアップされたものが、本当に、up to date(最新)のものか調べてみてください。そうしたら、私の話の意味が分かってくれるかと思います。
No.2
- 回答日時:
Workbook_BeforeClose という微妙?なイベントで
FilesystemObjectという外部オブジェクトを起動してやっているので
変なことになっているのかも?(こちらでは再現できていません)
以下だとどうじゃろね?当方Excel2010。
保存に時間の掛る重たいファイルやネットワーク上のフォルダでの検証は
行っていません。
投稿用にタブインデントの代わりに全角スペースを代用しています。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim BK As Workbook
Set BK = ThisWorkbook
If BK.Saved = False Then
Select Case MsgBox("保存する?", vbYesNoCancel)
Case vbCancel
Cancel = True
Exit Sub
Case vbNo
BK.Saved = True
Case vbYes
BK.Save
BK.SaveCopyAs _
BK.Path & "\" _
& Left(BK.Name, InStrRev(BK.Name, ".") - 1) _
& Format(Now, "\_yymmdd\_hhnnss") _
& Right(BK.Name, InStrRev(BK.Name, ".") - 1)
End Select
End If
Set BK = Nothing
End Sub
No.1
- 回答日時:
>エクセルのBeforeCloseのイベントで以下のようなファイルコピーを実行しています
終了中に、VBAで手間の掛かる作業をさせて終了を送らせるというマクロをさせてみましたが、再現はできませんでした。だから、私の発言は、想像の範囲になってしまうことをお許し下さい。
それと、以下の文章は、読みにくいと思いますが、勘弁してください。
残ったVBProjectは、必ずしも、バックアップの対象となっているファイルでしょうか?アドインなどで、紐付になったものとは限らないでしょうか。
ともかく、私の知識の範疇ですが、BeforeClose で、FSO.CopyFile という方法は考えません。直感的に、バックアップはうまく行かないような気がします。
Excelというのは、仮想メモリに展開しているはずですから、そちらのものを取り出さないと、Close 自体では、バックアップは取り出せないはずです。一旦、保存の命令を出さないとHDDなりに実体化しないはずです。
だから、BeforeClose で、Save イベントが働くなどした時に、ファイルが実体化させ、そのファイルをコピーするなら可能だと思います。
BeforeClose イベントだけだと、バックアップは成功しないのではないかと思いました。
一例です。実際に、私が試みた段階のコードです。実務的には、Workbook_Openに設けることに落ち着きました。
ハングしたり書き換えた後のバックアップよりも、本日の最初に開けた時に、自然に開けたのなら、その健全なファイルを残そうというものです。だから、これに、日付の比較をして、同日なら保存はしないとします。
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FilesystemObject")
objFSO.CopyFile ThisWorkbook.Path & "\" & ThisWorkbook.Name, ThisWorkbook.Path & "\Backup\" & ThisWorkbook.Name
Set objFSO = Nothing
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Saved = False
End Sub
p.s.
それと、ActiveWorkbookというのは、同じようだけれども、イベント型としては、対象がちょっと違うかな?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
- グループウェア 一太郎がイントラで開けません。対処方法を知りたいです。 3 2023/04/04 13:30
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/04 17:58
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
- Excel(エクセル) マクロの付いたExcelが開けません 3 2023/02/01 10:54
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
VBAを一度起動するとずっと出てきます。
Access(アクセス)
-
EXCELのVBAで作業ファイルを閉じてもメモリの解放をしなくて困っています
Excel(エクセル)
-
-
4
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
5
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
6
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
7
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
8
バックグラウンドのプロセスのエクセルを閉じる方法
Visual Basic(VBA)
-
9
DoEventsが必要な理由について
Visual Basic(VBA)
-
10
Application.Runエラー(1004)
Excel(エクセル)
-
11
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
12
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
13
Excelのプロセスが消えません
Excel(エクセル)
-
14
Filter関数を用いた結果、何も検索されなかった場合
Visual Basic(VBA)
-
15
エクセルを閉じた時、ノッペラボウの画面が残ることがありますが、なぜでしょうか?
Excel(エクセル)
-
16
2画面表示でのVBAのボタン押下後のform表示の位置
Excel(エクセル)
-
17
【ExcelVBA】各セルをダブルクォーテーションで括ってCSV保存したい
Visual Basic(VBA)
-
18
別インスタンスのエクセルを制御したい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PCに保存していた写真を見られ...
-
拡張子をつくる
-
スマホでHTMLファイルを開いて...
-
<a href="file:///フォルダ名/...
-
ExcelのVBProjectがExcelを開く...
-
OpenFileDialogを使った後にも...
-
どのページにも同じメニューを...
-
Excelで外部のファイルの場所を...
-
MkDir パス名が無効です
-
ファイルの作成日時について
-
メモリマップドファイルは動作...
-
秀丸のタグジャンプがうまくで...
-
無料ファイル転送サービス(ギガ...
-
SQLplusでedコマンドが使えない
-
Excelファイルの特定のシートを...
-
Tomcatで見えるファイルがWepAp...
-
EXCEL VBAのDir関数について
-
ネットワークコンピュータの共...
-
ビデオキャプチャ(VHS to DVD...
-
エクセルで二つのファイルで情...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PCに保存していた写真を見られ...
-
<a href="file:///フォルダ名/...
-
拡張子をつくる
-
ExcelVBAでリンク先の対象のフ...
-
OpenFileDialogを使った後にも...
-
MkDir パス名が無効です
-
スマホでHTMLファイルを開いて...
-
Excelで外部のファイルの場所を...
-
同名フォルダを作成し、そのフ...
-
ExcelのVBProjectがExcelを開く...
-
秀丸のタグジャンプがうまくで...
-
Excelファイルの特定のシートを...
-
「~$ファイル名.doc」というフ...
-
参照元Excelファイルをバックグ...
-
EXCEL VBAのDir関数について
-
Git bashが開かなくなってしま...
-
メモリマップドファイルは動作...
-
ビデオキャプチャ(VHS to DVD...
-
CSVファイルをブラウザで表示さ...
-
ファイルの作成日時について
おすすめ情報