ファイルを閉じるとき(右上の[×]ボタンクリック時。)、
指定のパスに保存する方法を教えてください。
現在のファイルの内容、シートもそのままで、xlsx、xlsmの状態もそのまま。
但し、そのままのファイル名の末尾に"_今日の日付_時間"(_yyyymmdd_hh:mm)を付けるだけ。
画面に何も問合せを行わず、ユーザは何も感じないように。
(可能であれば)
ファイルを開いたフォルダ直下の「backup」フォルダを自動的に宛先に出来るでしょうか?
「backup」フォルダが存在しなければ新規作成して保存したいです。
つまり、元のファイルがいつも通りの場所にあれば、そこの「backup」フォルダに、日時が付与されたファイル名で保存。
ファイルが別のフォルダに移動されてた場合は、そこに「backup」フォルダを作成して保存。
見た目上何も確認やエラーが出ないように出来れば幸いです。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
#2 です
一応、アドバイスを、、、
私ならBookをそのままバックアップとして保存はしないと思います。
CSV形式などのテキストで必要なデータだけを保存します。
復元の時は、そのデータを読み込めば良いのでブックすべてでなくても良く無駄な容量を使わずに済みます。(処理速度の向上も図れます)
また、フォルダ内のバックアップファイルの保存期間などを設定して
過去のファイルを削除するようにすると思います(やっています)
この様な場合、元ファイルの設定自体を変える必要があるかも知れませんが、(以前の回答にCSVファイルで保存しては、と確か触れたような気がします)
私が良く作るシート構成
印刷、閲覧シート(印刷、PDF作成、配布資料に使う)
入力、操作シート(入力、情報修正、加工元データに使うなど)メイン
入出力データシート(データ保存や復元、情報ソース)複数シート
設定シートなど(ユーザー権限、使用期間、各種加工キーワードなど)
加工用シートなど(VBAでやるのでほぼ使わない)
何かの期会があれば、参考にされてください。
ありがとうございます。アドバイス非常に助かります。
シート構成も非常に勉強になります。
書き出しデータは効率よく最小限で行った方が良いのも同意です。
私は最初の作成まではやりますが、その後の運用のどこまで付き合うか分からないので、極力特殊性を省いた形で考えてます。
(個人的にはデータサイズを非常に気にしますが、ユーザは1MBも2MBもそんな気にしない。HDDが空いてたら何でもOKなので^^;)
ここでの質問ではありませんが、全データはGoogleドライブに置かれています。
ファイルストリームというツールで、ローカルドライブの様にマウントしてますが、ブラウザから辿って開けてしまいます。
(8割以上のファイルはいくつかのクラウドシステムからスプレッドシートへのリンクが張られているため、ブラウザで開くのは禁止!と言えないのです)
No.2
- 回答日時:
こんにちは
一連のご質問から、実行タイミングなどはご存知かと思います。
なさりたい事はこちらのサイトを参考にされると良いと思います。
https://valmore.work/about-file-system-object/
また、サンプルコードをお望みと思いますので、説明なしですが下記に
ざっくり書いてみました。ほぼ検証デバッグしていませんが、参考程度ならOKかな?
1点 ファイル名の:には問題があると思いますので _で
Option Explicit
Sub sample()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim bckPath As String
Dim Bk_name As String
bckPath = ThisWorkbook.Path & "\Backup"
Bk_name = ThisWorkbook.Name
On Error Resume Next
If fso.FolderExists(bckPath) Then
Call fileRename(bckPath & "\" & Bk_name)
Else
fso.CreateFolder (bckPath)
Call fileRename(bckPath & "\" & Bk_name)
End If
End Sub
Sub fileRename(Fol_File As String)
Dim fso As Object, f As Object
Dim Bk_name As String
Dim ext As String
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile ThisWorkbook.Path & "\" & ThisWorkbook.Name, _
Fol_File, True
Set f = fso.GetFile(Fol_File)
ext = fso.GetExtensionName(ThisWorkbook.Path & ThisWorkbook.Name)
Bk_name = fso.GetBaseName(Fol_File)
f.Name = Bk_name & Format(Date, "_yyyymmdd") & Format(Time, "_hh_mm") & "." & ext
Set f = Nothing
End Sub
同名(同じ時間(分)内に実行された場合)、フォルダ内の元ファイルが保存されます。次回実行時なくなります。これは、エラーによりリネームされない為です。ファイル内データは , True により上書きされます
No.1
- 回答日時:
こんにちは
VBAであれば、ThisWorkbookモジュールでWorkbook.BeforeCloseイベントを利用すれば可能と思います。
ただし、「×」印のクリックとコマンド等からの終了などを区別するのは難しいです。
このイベント内に、ご質問のような処理を記述しておけばよいでしょう。
>見た目上何も確認やエラーが出ないように出来れば幸いです。
確認表示等を出さなくすることも可能ですが、通常の SaveAs や Save メソッドで保存する場合はアラートが出されることはありませんので、こちらを利用すれば宜しいでしょう。
(Closeメソッドだと「変更を保存しますか?」の表示がでますけれど)
エラーが出ないようにするには、そのようなきちんとした(エラーのない)コードを組むしかないですね。
とは言え、保存処理を2回行うことになるので、通常の「閉じる」の場合に比べると、約2倍の時間がかかるのは避けられないので、ユーザがまったく気づかないかと言えば必ずしもそうではないかも知れません。
ありがとうございます。
>(Closeメソッドだと「変更を保存しますか?」の表示がでますけれど)
細かいご指摘ありがとうございます。
Excel上で通常表示されるメッセージはそのままで良いので大丈夫です。
>保存処理を2回行うことになるので、通常の「閉じる」の場合に比べると、約2倍の時間がかかるのは避けられない
大丈夫です。UI上というか表示画面の流れ上、変化が無ければ十分です。
たまに、ちょっと止まったっぽい動作の変化は日常茶飯事ですので(笑
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
ブックを開いたとき自動的にバックアップを取るマクロはどうするのですか?
Excel(エクセル)
-
【エクセル】自動保存先として別フォルダを指定する
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでファイルの最終更新...
-
Pivot table で集計されたデー...
-
VB.NETでEXCELファイルを開き、...
-
実行と保存の違いは。
-
Excel VBAでほかのアプリケーシ...
-
マイドキュメントのフォルダの...
-
沢山のフォルダにあるファイル...
-
セントボックスの中身が消えた!
-
USB内のフォルダが「ファイル」...
-
YAHAMA RTXシリーズのコマンド...
-
hamachiにログイン出来ません
-
vlan internal allocation poli...
-
ショットナビクレスト ゴルフ場...
-
【至急】コントロール+Zで消し...
-
パソコンがいきなり初期化され...
-
expectでコマンド実行結果を変...
-
USBデータの消失
-
システムの復元
-
system32にある、膨大なDLL。...
-
全角スペースを文字として検索...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでファイルの最終更新...
-
Excel VBAでほかのアプリケーシ...
-
読み取り専用ファイルを上書き...
-
Pivot table で集計されたデー...
-
Excel VBAで作成したマクロをxl...
-
VBAで、強制保存してブックを閉...
-
vbaでIEの名前を付けて保存(A)...
-
エクセルで「名前を付けて保存...
-
VB.NETでEXCELファイルを開き、...
-
VBScriptで日本語が変です
-
AccessVBAでレポートをPDFで出力
-
エクセル:マクロ:保存時に連...
-
ExcelVBAでデスクトップのPATH...
-
VB6.0でエクセル保存する時の保...
-
VBA メモ帳の上書き保存がしたい
-
ファイルのダウンロード保存先...
-
コードエディタの緑色の部分
-
コマンドプロンプトでデスクト...
-
FileSearchが使えなくなり困っ...
-
htmlから取り込んだ を消...
おすすめ情報
本質問と関係ないのですが、
現在、お礼を送信しようとすると
「△リクエストの有効期限が切れました。」と赤字アラートが出て、投稿できません。
それぞれにコメントしたいのですが出来ない状況です。ご了承ください。
明日以降再チャレンジしてみます。