[[20130213091711]] 『ローカルとネットワークで同時に保存』(にゃの) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ローカルとネットワークで同時に保存』(にゃの)

 Excel2010です。お教えください。

 毎日使って毎日データを更新するブックがあります。

 普段私しか使わないのでローカルに置いて使っていますが、うちの会社がなぜか頻繁にブレーカーが
 落ちてPCのローカルのデータが消えたことが何度もありました…

 なので社内ネットワーク上にも置きたいのですが、そっちはそっちでサーバーがよくダウンして使えないことがあります。

 そういう微妙な環境なので、ローカルとネットワークと両方に同じブックを置いて、保存時に
 両方をまとめて保存したいです。

 ネットワーク上にあるファイルを上書き保存→名前を付けてローカルに保存(同じ名前のファイルがあるので
 上書き確認のメッセージが出るので「はい」を選択)

 という動作を「マクロの記録」でやり、少し内容をいじったのが下記のコードです。

 Sub 同期保存()

    Dim ms As Integer

    ActiveWorkbook.Save

    ms = MsgBox("ローカルデータも更新しますか?", vbYesNo, "確認")

    If vbYes Then

    ChDir "C:\Users\OWNER\Desktop\私の作業用"
    ActiveWorkbook.SaveAs Filename:="C:\Users\OWNER\Desktop\私の作業用\◎日々データ.xlsm", _
        FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False

    End If
 End Sub

 しかしこれでは「ネットワークのファイルを使用しているとき」しか使えません。

 理想は、Excelの「上書き保存」ボタンを押したときに
 「同時保存しますか?」のメッセージを出して両方を上書き保存したいのですが
 (いいえの場合は開いているフォルダのもののみを保存)
 できますでしょうか?

 「上書き保存」アイコンでできなければコマンドボタンをシート上に置いてそこで保存でもいいです。

 よろしくお願いします。

 変なところに反応してしまいますが、
 >うちの会社がなぜか頻繁にブレーカーが落ちて
 電気容量が足りていないんでしょうね。PC にはやさしくない環境なので、
 UPS をいれるか、容量を増やしてもらうか、節電するかでしょうか。

 肝心の質問内容ですけれど、このファイルは にゃの さんしか使わないのですか?
 個人専用であれば、ThisWorkbook の下に
 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Const NetWorkPath = "\\Server\Data\"
    Const LocalPath = "C:\Users\OWNER\Desktop\私の作業用\"

    If InStr(ThisWorkbook.Path, ":") <> 2 Then '// 条件は適宜変更
        If MsgBox("ローカルデータも更新しますか?", vbYesNo, "確認") = vbYes Then _
            ThisWorkbook.SaveCopyAs LocalPath & ThisWorkbook.Name
    Else
        If MsgBox("サーバデータも更新しますか?", vbYesNo, "確認") = vbYes Then _
            ThisWorkbook.SaveCopyAs NetWorkPath & ThisWorkbook.Name
    End If
 End Sub
 のような形でできるしょうか。

 他の人も使うファイルであれば、個人用マクロに Active なブックを二つの
 パスに保存するようにしてもよさそうです。
 (Mook)

 Mook様ありがとうございます。

 試してみたのですが、

 ・ローカルで開いた場合→「ローカルデータも更新しますか?」→YES→ローカルデータしか更新されない
 ・サーバで開いた場合→「サーバデータも更新しますか?」→YES→サーバデータしか更新されない

 なので

 >If InStr(ThisWorkbook.Path, ":") = 2 Then '// 条件は適宜変更
 ここを
 If InStr(ThisWorkbook.Path, ":") = 1 Then
 にしたところ

 ・ローカルで開いた場合→「サーバデータも更新しますか?」→YES→ローカルデータしか更新されない
 ・サーバで開いた場合→「ローカルデータも更新しますか?」→YES→サーバデータしか更新されない

 のようになります。

 >このファイルは にゃの さんしか使わないのですか?
 はい、そうです。

 同時に更新するにはどうしたらいいでしょうか…

 ※ちなみに、ブレーカーが頻繁に落ちるのはすっごい老朽化した木造社屋で建築資材の化学薬品を扱っていて
 たまに漏電することがあるそうです…

 ※追記
 今 InStr 関数について調べてみました。2番目のテストは無意味でしたね…

 (にゃの)


 すみません、パスの設定が不完全でした。
 パスを設定しなおしたらできました。
 ありがとうございました!

 (にゃの)

 あっ、条件が反対でしたね。(修正済み)
 失礼しました。
 (Mook)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.