次の方法で共有

SaveCopyAsで上書き保存できない

Anonymous
2013-10-28T09:16:02+00:00

こんにちは。いつも参考にさせていただいております。

Excel VBAのSaveCopyAsの使い方について質問させてください。

マクロを実行する前にSaveCopyAsでコピーを保存してから処理を続行しようと思っています。

過去スレを参考に、下記コードをマクロの最初の部分に追加しました。

Dim wPath As String

wPath = ThisWorkbook.Path

ThisWorkbook.SaveCopyAs wPath & "\バックアップ.xlsm"

実行すると「バックアップ.xlsm」というファイルができるのですが、同名のファイルが存在する状態で

再度実行するとエラーが出て、なおかつ存在していた「バックアップ.xlsm」ファイルが消えてしまいます。

消えた状態で実行すると、またファイルが作られて、エラーも出ません。

下記エラー内容です。


実行時エラー'1004'

ファイル'c\バックアップ.xlsm'にアクセスできません。次のいずれかの理由が考えられます。

?ファイル名またはパスが存在しません。

?ファイルが他のプログラムによって使用されています。

?保存しようとしているブックと同じ名前のブックが現在開かれています。


どうすればエラーが出ずに、バックアップを作成できるのでしょうか。

ご指導よろしくお願いいたします。

開発者テクノロジ | Visual Basic for Applications

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2013-10-29T08:46:15+00:00

できました。

アドバイスありがとうございました。

またよろしくお願いいたします。

    Dim myFile As String

    myFile = "バックアップ_" & Format(Date, "yyyy.mm.dd")

    Dim strFilePath As String

    Dim strFileName As String

    Dim FileNo As String

    strFilePath = ThisWorkbook.Path & ""

    strFileName = myFile

    FileNo = 2

      Do Until Dir(strFilePath & strFileName & ".xlsm") = ""

          strFileName = strFileName & "_" & FileNo

          FileNo = FileNo + 1

      Loop

    ThisWorkbook.SaveCopyAs strFilePath & strFileName & ".xlsm"

この回答は役に立ちましたか?

1 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2013-10-28T09:42:40+00:00

当然、ファイルが既存ならそういうことになるでしょうが、どうされたいのでしょうか?

例えば、既存のファイルがあったら、古いのは削除して新しいファイルを残すとか、既存のバックアップファイルが存在する場合、バックアップ02.xlsmとかの名前にして、複数世代残すとかです。

いずれにしろその状況を回避するのはユーザーが工夫する必要があるでしょう。

この回答は役に立ちましたか?

0 件のコメント コメントはありません

4 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2013-10-28T11:24:41+00:00

    返信ありがとうございます。

    操作を間違わなければ同じ日に2回実行することはないのですが・・・。

    間違えた時のためのバックアップなので、その可能性も考えた方が良いかも知れませんね。

    同名のファイルがあった場合に、ファイル名に更にナンバリングをするような方法を考えようと思います。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2013-10-28T10:31:57+00:00

    自己解決されたようですし、日付を付けるアイデアは正当なものだと考えます。

    しかし、同じ日に2回実行するというようなことは考えなくて良いのでしょうか?

    必要があれば、ファイルの存在チェックの手法などのアドバイスもできますが?

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2013-10-28T10:12:27+00:00

    自動で上書きできるものだと思っておりました。

    勉強不足でした。

    上書きメッセージを出ないようにして、日付をファイル名につけて保存するようにしました。

    Dim myFile As String

    Application.DisplayAlerts = False

    myFile = ThisWorkbook.Path & "" & "バックアップ_" & Format(Date, "yyyy.mm.dd") & ".xlsm"

    ThisWorkbook.SaveAs Filename:=myFile

    Application.DisplayAlerts = True

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません