【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?

あるExcelデータ(クライアント側)を起動時に自動的にサーバーにバックアップしようと思ってマクロを組んでいますが、なかなかウマくいきません。
何かいい方法はありませんか?
マクロはこんな感じです。
*****************************
Public Sub Auto_Open()

Dim ThisName As String 'バックアップ元ファイル名
Dim ThisPath As String 'バックアップ元パス名
Dim BackupName As String 'バックアップ先ファイル名
Dim BackupPath As String 'バックアップ先パス名

ThisPath = ThisWorkbook.Path
ThisName = ThisWorkbook.Name

BackupPath = "\\sv1\職員用\Backup"
BackupName = Left(ThisName, Len(ThisName) - 4) & Format(Now, "-yyyymmddhhmmss") & ".xls"

ThisWorkbook.SaveAs Filename:=BackupPath & "\" & BackupName

End Sub
*****************************
これだとバックアップした方のExcelが起動してしてしまうのですが・・・

A 回答 (5件)

こんばんは。

Wendy02です。

>ただ、ネットワークを切断してテストしてみると

すみません。それは、私は忘れていました。

簡単に、Dir でも出来たと思いますが、いくつか解決策があると思います。けれども、私の書いた骨子は、Excel外の外部コマンドでコピーをさせるということですから、Error トラップは考えていなかったけれども、アイデアとしては悪くはないかもしれません。

(私の環境は、途中までやってやめてしまったので、なかなか、ネットワーク化させませんもので、それは実験していないのです。)

ところで、このコードの説明がきちんとなされていなかったようですが、

If InStr(1, ThisPath, "BackUp", vbTextCompare) > 0 Then Exit Sub

バックアップは、ついうっかり、バックアップ側で開いてしまうことがありますね。その時、起動時のイベントマクロが働いては困るわけで、それで、そのブックの存在しているフォルダに、BackUpという単語があれば、自動起動はやめるということを考えています。
    • good
    • 0
この回答へのお礼

>簡単に、Dir でも出来たと思いますが、いくつか解決策があると思います。

そう言われてみれば、そうですね。
バックアップ(コピー)のことばかり気にしてて、すっかりDirについて忘れてました。(笑)

それから

If InStr(1, ThisPath, "BackUp", vbTextCompare) > 0 Then Exit Sub

のご説明、ありがとうございます。

漠然と、「バックアップしたファイルを開くと、さらにバックアップされてうっとうしいなぁ~」
とは思ってましたが、それを回避することまで想定なんてしていませんでした。

そこまで考えてプログラムは作らないといけないんですね。
勉強になりました。

A No.4のka_na_deさんのところにも書きましたが
また明日以降もいろいろと別の質問もしますが
懲りずにまた教えてください。
よろしくお願いします。

ありがとうございました。

お礼日時:2007/06/25 02:51

#2です。



少しでも参考にしていただけたなら幸いです。

コメントを拝見しましたが、当然予想される問題ですね。

こういった例外処理はおそらく定番だと思いますが、
私はド素人なもので、これ以上のコメントは控えさせて頂きます。

すっきりと解決されることを、お祈りいたします。
    • good
    • 0
この回答へのお礼

>こういった例外処理はおそらく定番だと思いますが、

定番の処理なんですね、こういうのは。
しっかり勉強します(汗)

>私はド素人なもので、これ以上のコメントは控えさせて頂きます。

ka_na_deさんがド素人なら、こちらはドドド素人ですね(笑)
プロフィールを拝見しましたが、35日で135件も回答されてるなんて
とても「ド素人」とは思えません。

また明日以降もいろいろと別の質問もしますが
懲りずにまた教えてください。
よろしくお願いします。

ありがとうございました。

お礼日時:2007/06/25 02:38

#1 です。



うっかり忘れていたことですが、

'Sub Auto_Open() の中で、ThisPath の後に、

'ThisPath = ThisWorkbook.Path

If InStr(1, ThisPath, "BackUp", vbTextCompare) > 0 Then Exit Sub

'なお、TextCompare を入れておきます。

そうしないと、Auto_Open が、また起動してしまいます。

この回答への補足

ありがとうございます。

文の内容や意味するところはわかるんですが
自分にはあまりにも高度な内容なので
なぜこの処理も必要なのかよくわかりません(泣)が
エラーにならないようにこの文も入れておきます。

とても助かりました。
これからもよろしくお願いします。
ありがとうございました。

補足日時:2007/06/24 21:55
    • good
    • 0
この回答へのお礼

すいません。
補足のところにお礼を入れちゃいました。
おっちょこちょいで、ホントに・・・

お礼日時:2007/06/24 21:57

ファイル操作に関して、全くの素人です。



ThisWorkbook.SaveAs Filename:=BackupPath & "\" & BackupName

ThisWorkbook.SaveCopyAs Filename:=BackupPath & "\" & BackupName
に変更する方法ではだめでしょうか?

スタンドアローンのPCで模擬テストしたところ
問題ないように見えましたが・・・

間違ってたらごめんなさい。
    • good
    • 0
この回答へのお礼

ありがとうございます。

「SaveAs」じゃなくて「SaveCopyAs」なんてモノがあるんですね。
まったく知りませんでした(泣)

テストしてみたら、正常な場合はできました。

ただ、ネットワークを切断してテストしてみると

'(ファイル名)'にアクセスできません。
ファイルは読み取り専用であるか、
または読み取り専用の場所にアクセスしようとしています。
または、サーバー上に保存されているドキュメントから
応答がありません。

というメッセージ(+再試行ボタンとキャンセルボタン)が表示されるので
スタンドアローンでならOKなんですかね、やっぱり。

もちろん、A No.1のWendy02さんの場合でも
エラー(番号 -2147023665)が起きてしまいますが
On Error ステートメントで全エラーを無視しちゃってます。
(ホントにいいかは?ですが・・・)

ありがとうございました。

お礼日時:2007/06/24 21:51

こんばんは。



>ThisWorkbook.SaveAs Filename:=BackupPath & "\" & BackupName

ここが変ですね。

SaveAs の後は、保存先側に、ブックが移ってしまいますから、もう一度、元のブックを戻すという方法もあるのですが、同じ、Auto_Open が働いてしまいます。
それを、オプションなどを加えて働かないようにする方法もあるとは思いますが、以下のように、Excelの適用範囲から外すことで、大幅なバックアップの時間の短縮になります。


>ThisWorkbook.SaveAs Filename:=BackupPath & "\" & BackupName

これを以下の変えてみたらどうでしょうか?Shell でもかまわないのですが、一応、FileSystemObjectを使いました。試してみてはいませんが、考え方は分かっていただけるかと思います。

Set objFso = CreateObject("Scripting.FileSystemObject")
 objFso.Copyfile ThisWorkbook.Path & "\" & ThisWorkbook.Name, BackupPath & "\" & BackupName, True
 Set objFso = Nothing
    • good
    • 0
この回答へのお礼

お~、すご~い!
見事にできました!
感動ものです!

ただ、

Set objFso = CreateObject("Scripting.FileSystemObject")
objFso.Copyfile ThisWorkbook.Path & "\" & ThisWorkbook.Name, BackupPath & "\" & BackupName, True
Set objFso = Nothing

が、何を意味してるかはさっぱりわかりませんが(笑)

わかるようにがんばって勉強していきます。

ありがとうございました。

お礼日時:2007/06/24 21:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報