Excel VBAの上書き保存を修正する方法とは?

このQ&Aのポイント
  • Excelデータを閉じる時にバックアップを取るためのVBAコードを作成しましたが、上書き保存されてしまいます。
  • (1)のデータを残すためにはどのように修正すれば良いでしょうか?
  • 解決策として、上書き保存ではなく別の場所に名前をつけて保存するように修正することで、(1)のデータを残すことができます。
回答を見る
  • ベストアンサー

Excel VBA 保存 上書き保存されてしまう

エクセルデータを閉じる時に元データとは違う場所にバックアップをとるように以下のようなコードを記述しました。(Excel内の一部のデータが何かしらのタイミングで消えてしまう現象が起き、どのタイミングで消えているのかを探るために誰かしらがデータを開いて閉じる時にその閉じた時間をファイル名にして保存させるというのが目的です) Sub Auto_Close() Worksheets("Sheet1").Select 'シート1を開く ThisWorkbook.Save '元データの保存場所に上書き保存 Filename = Format(Now(), "yyyy-mm-dd-hh-mm-ss") ThisWorkbook.SaveAs Filename:="\\●●\●●\●●\●●\●●\" & Filename & ".xlsm" '別の場所に名前をつけて保存 End Sub この別の場所に保存したデータ((1)とします)を開いて中身を確認してから閉じるともちろん再度閉じた時間をファイル名にして保存する((2))ことになるのですが、このとき上書きされるような形になってしまい(1)のデータが残りません。(1)が残るようにするにはどこを修正すればいいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

コードの中でわざわざ上書き保存していますからねぇ。 ↓この1行を削除してみてください。 ThisWorkbook.Save '元データの保存場所に上書き保存

oimoita
質問者

お礼

ご回答ありがとうございます。 確かに名前をつけて保存イコールデータを保存ですよね。 意味不明なことしていました。

関連するQ&A

  • VBAでの " の使い方をお教え下さい

     ThisWorkbook.SaveAs Filename:="C:???.xlsm"(???はファイル名です)をVBAの式に直す方法をお教えください。なお、???はセルを参照することにしています。具体的にはRange("O1")です。  ThisWorkbook.SaveAs Filename:="""C:" & "Range(""O1"").xlsm"""とすると、ファイル名に : は使えないというエラーメッセージが出ました。  " の使い方が分かりづらく、悩んでいます。正しい使い方はどのように考えれば良いかも教えていただければ幸いです。よろしくお願いします。

  • Excelで最終行の空白を削除にする

    ExcelのVBAでつまづいています。 以下のようにコードを書きました。 Sub Auto_Close() Worksheets("Sheet1").Select 'シート1を開く If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData End If 'フィルタをすべてチェックする Filename = Format(Now(), "yyyy-mm-dd-hh-mm-ss") ThisWorkbook.SaveAs Filename:="\\●●●●\●●●●\●●●●\●●●●\●●●●\" & Filename & ".xlsm" 'Excelデータをバックアップ ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select '一番左下の空白セルに移動 ActiveWorkbook.Save '開いているセルを上書き保存 End Sub 次に開いたときにはA列最終行の空白がアクティブになっているはずなのですが、うまくいきません。 バックアップのコードを削除するとうまくいくのですが、なぜそうなるのか意味がわかりません。 どこがおかしいですか?

  • Excelシート1シートのみを指定フォルダへ保存

    Excelのシート1のみを、本日の日付と名前の入ったセル(I7)を保存する時の名前にして指定したフォルダへ保存したいと思っています。 1、シートは本日の日付+I7セルに入っている値を名前にする。 2、フォルダはCではなくV:\○○\○○\○○\○○\○○\○○\○○に格納 3、シート1以外のシート2、シート3は保存せず閉じる 4、格納後○○に保存しました。と表示 試行錯誤し、下記のように記述してみたのですが、 Sub Macro1() 'Option Explicit Sub Sample() Dim xSheet As Worksheet Dim myFile As String Dim myName As String Set xSheet = ActiveSheet ThisWorkbook.Worksheets("シート名").Copy 'myName = ActiveWorkbook.Worksheets(1).Name 'myFile = ThisWorkbook.Path & "\" & myName & ".xls" myFile = ThisWorkbook.Path & "\" & xSheet.Range("I7").Value & ".xls" Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:=myFile Application.DisplayAlerts = True ActiveWorkbook.Close End Sub 日付を指定して保存 Sub test()  Dim Filename As String  Filename = Format(Date, "yyyy年mm月dd日") & ".xls"  ActiveWorkbook.SaveAs "C:\My Documents\" & Filename End Sub 日付とI7セルの名前を合せてブックの名前としたい場合どうVBEで記述すればいいのかわからないので詳しい方がおられましたら、 よろしくお願いいたします。 あまり詳しくないので、そのままコピーできるか、○○の部分を指定フォルダ名に変えてください。等の注釈を付けていただけると助かります。

  • 他のPCでも保存できるパス

    エクセルシート1~5のうち 5シート(シート名:一覧)だけを保存したいので マクロを作りました。 Sub 一覧保存() ' ' 一覧保存 Macro ' ' Sheets("一覧").Select Sheets("一覧").Copy ActiveWorkbook.SaveAs Filename:="C:\Users\●●●\Desktop\データー\一覧.xlsm" _ , FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False End Sub これを使って自分のPCでは保存出来るのですが 他のPCに持って行くと●●●(PC名)部分が違うので保存が出来ません。 これを他のPCでも使えるように書き換えたいのです。 マクロボタンでどのPCにも対応できるマクロを書きたいのですが。。 あと保存名を同時に自動でカウント?(日付や連番など)できるようにするにはどうすればいいでしょうか。 よろしくお願いします。

  • 「VBA} XLSMのファイルをXLSX保存したい

    いろいろとVBAが入っているシート1.xlsmがあります。 シート1の内容をXLSXで保存したいのですが、うまくいきません。 解決に向けてご教授ください。 <ステップ1 XLSMでは保存できます。> Private Sub hachu_Click() '担当者名取得(C4) Dim s As String s = Range("C4").Value Debug.Print (s) ActiveWorkbook.SaveCopyAs Filename:= _ "c:\ " & Format(Date, "mmdd") & "_" & Format(Time, "hhmmss") & s & ".xlsm" '1013_161712木村.XLSM End Sub <ステップ2 XLSXで保存できますが、ファイルを開くときにエラーが出ます。>  FIG.1 Private Sub hachu_Click() '担当者名取得(C4) Dim s As String s = Range("C4").Value Debug.Print (s) ActiveWorkbook.SaveCopyAs Filename:= _ "c:\ " & Format(Date, "mmdd") & "_" & Format(Time, "hhmmss") & s & ".xlsm" '1013_161712木村.XLSM End Sub <ステップ3 マクロのないシート2にあたい張り付けして、シート2だけ保存> 保存の際にFIG.2の様なアラートが出て、手作業が必要です。> 'シートの複製(複製すると新しいブックが立ち上がります) Worksheets(2).Copy '名前を付け、ファイル形式も決めて特定の場所に保存する。 ActiveWorkbook.SaveAs _ Filename:="c:\ " & Format(Date, "mmdd") & "_" & Format(Time, "hhmmss") & s & ".xlsx", _ FileFormat:=xlOpenXMLWorkbook

  • Andloid エクセルで上書き保存出来ない

    はじめまして タブレッド(docomo d-52C)にエクセルをインストールしました。 以前のデータを開き、入力し、上書き保存しようとすると、 必ず 元のデータ名(1)になり、別データになってしまいます。 何が原因なのか、どうしたら上書き保存出来るのか、アドバイス お願いします。 Android 12です。

  • エクセルVBAでファイルをCSV保存の仕方

    エクセルのシートをCSVファイルに保存するため以下のようなマクロを書きました。 Sub Macro1() Cells.Select Selection.Copy Workbooks.Add ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.SaveAs FileName:="C:\WINDOWS\デスクトップ\Book1.csv", FileFormat _ :=xlCSV, CreateBackup:=False ActiveWindow.Close ThisWorkbook.Activate End Sub 一応これで保存できるのですが、自動記録でやったためファイルの名前が出てしまいました。 この部分をわたし以外の誰でも任意の名前をつけ、任意のフォルダーに保存できるように書き換えたいのです。 どのように記述すれば良いかお教えください。お願いします。

  • EXCEL/VBA:WORDファイルの上書き保存を確認する方法

    以下のvbaを実行すると、次のように動作します。   test1.xlsを開いて、Atest1.xlsの名前で保存するときに、既にファイルが存在する場合、excelでは上書き保存するか聞いてきます。  しかし、test1.docを開いて、Atest1.docの名前で保存するときは、いきなり上書き保存されます。 wordの場合も上書き保存するか聞くようにするには、どうしたら良いか教えてください。 Workbooks.OpenText Filename:="test1.xls" ActiveWorkbook.SaveAs Filename:="Atest1.xls" ActiveWindow.Close Dim wordApp As Word.Application Dim wordDoc As Word.Document Dim wordRange As Word.Range Set wordApp = New Word.Application wordApp.Visible = True Set wordDoc = wordApp.Documents.Open(ThisWorkbook.Path & "\test1.doc") Set wordRange = wordDoc.Content wordDoc.SaveAs Filename:="Atest1.doc" wordDoc.Close wordApp.Quit

  • エクセル シートのみ 保存

    過去の質問も参照しましたが 当てはまる物が無くて質問しました! シート上にボタンを作成して クリックするとそのシートのみ 指定するファイルにコピーさせたいです! 下記の部分で何処を変化させればよいのでしょうか? (1)~(2)の部分で困っています。 Private Sub CommandButton1_Click() Dim FileName As String Dim FileExt As String ’(1)の質問!○=の部分をSheets(セルのA1の値をファイル名に入れたいです) FileName = "○"& Format(Now, "yyyy-mm") & ".XLS" '==== FileName = InputBox(FileName & "と言う名前で保存します" & vbCr & "よろしければこのままOKをクリックしてください", "保存ファイル名の確認", FileName) If FileName = "" Then Exit Sub Else If Right(FileName, 4) <> ".XLS" Then MsgBox "ファイル名が異常です。" Exit Sub End If End If '==== FileName = "D:\保存\ケア\計画\" & FileName If Dir(FileName) <> "" Then '##ファイルが既に存在する If MsgBox("既に指定のファイルが存在します。 上書きしますか?", vbOKCancel, "上書きの確認") = vbCancel Then '##保存せずに終了 Exit Sub ElseIf ThisSheets.FullName = FileName Then '##現在開いているファイルと同じなら上書き保存 ThisSheets.Save Else '##指定ファイルを削除した後保存 Kill FileName ThisSheets.SaveCopyAs FileName:=FileName End If Else '##ファイルを新規保存 ThisSheets.SaveCopyAs FileName:=FileName End If ThisSheets.Saved = True End Sub (2)ThisSheets&指定してもう一つだけ  保存先にコピーしたいです!つまり  2つのSheetのみ保存させたいのですが・・  ここからどのようにしたら良いのか  お願いします!教えて下さい。  

  • エクセル VBA シート保存ボタン

    Sheet上にボタンを作成 ボタンを押すと保存するようにしています! 以前ここでSheet2枚をコピー出来るような 記述教えてもらったのですが・・ 1枚ならどう変化して良いか・・ 記述を書きましたが 何処が違うか教えて下さい! Private Sub CommandButton1_Click()   Dim FileName  As String   Dim FileExt   As String   Dim BkName   As String   Dim OldWkbook  As Workbook   Dim NewWkbook  As Workbook   Const StName1  As String = "ko"      '   Application.DisplayAlerts = False   Set OldWkbook = ActiveWorkbook   '   'ファイル名を取得   BkName = OldWkbook.Sheets(StName1).Range("A1").Value   FileName = BkName & Format(Now, "yyyy-mm") & ".XLS"   '   FileName = InputBox(FileName & "と言う名前で保存します" & vbCr & "よろしければこのままOKをクリックしてください", "保存ファイル名の確認", FileName)   If FileName = "" Then     Exit Sub   Else     If Right(FileName, 4) <> ".XLS" Then       MsgBox "ファイル名が異常です。"       Exit Sub     End If   End If   '   OldWkbook.Sheets(Array(StName1)).Copy   Set NewWkbook = ActiveWorkbook   For wIx = 1 To NewWkbook.Sheets(1).Shapes.Count     NewWkbook.Sheets(1).Shapes(wIx).Delete    Next   NewWkbook.Sheets(1).Name = StName1   '   FileName = "D:\保存\計画\" & FileName   '   If Dir(FileName) <> "" Then     '##ファイルが既に存在する     If MsgBox("既に指定のファイルが存在します。 置き換えますか?", vbOKCancel, "置き換えの確認") = vbCancel Then       NewWkbook.Close savechanges:=False       '##保存せずに終了       Exit Sub     End If     '##指定ファイル置き換え保存     NewWkbook.SaveAs FileName:=FileName   Else     '##ファイルを新規保存     NewWkbook.SaveAs FileName:=FileName   End If   '   NewWkbook.Close savechanges:=False   Application.DisplayAlerts = True End Sub 教えて下さい!

専門家に質問してみよう