人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ExcelのVBAでお願いします。

FileCopy SourceFile, TargetFile
を使って、ファイルのコピー(正確にはパスを変更だけして移動)を処理しています。
このとき、SourceFileが開かれている場合は、当然のごとくエラーが発生し、処理が止まりますが、
「SourceFileが開かれている場合、閉じるまで待ち、その後実施」
というようにしたいとき、どのように記述すべきでしょうか。

閉じるのは自分ではなく別の端末からであり、必ずいつかは閉じられることを前提に
VBAからは待ちの姿勢をとるような記述がよいです。

どうぞよろしくお願い致します。

●質問者: yoshifuku
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● poppyday
●100ポイント ベストアンサー

つたないサンプルコードですが、こんな感じでしょうか。

エラー発生時にOnErrorGotoで例外処理を書き、エラーコードを判断します。

一定時間停止は、WindowsAPIのSleep関数を外部から呼び出すことで実現します。

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Function filecpy()

On Error GoTo er

FileCopy "c:\a.doc", "c:\aa.doc" ←ここは必要なファイルコピー対象にどうぞ

a = 0

On Error GoTo 0

Exit Function

er:

a = Err.Number

On Error GoTo 0

Exit Function

End Function

Sub test()

top:

xxx = filecpy()

If (xxx <> 70) Then ←エラーコード70番は「書き込みできません」です。

Sleep (1000)

DoEvents

GoTo top

End If

End Sub

必要に応じてエラーコードの判断は追加してください。

http://support.microsoft.com/kb/146864/ja

にエラーコード一覧が載っています。


yoshifukuさんのコメント
ありがとうございます!! かなりよい感じなのですが、条件に該当すると、Sleepに入るのは確認できたのですが、該当ファイルを閉じてみたのですが、ファイルのコピー(移動)が再開しないようでした。ずっとループが続いている模様。うーむ。

yoshifukuさんのコメント
いただいた記述に誤りがあるようにも思えないので、こちらでも検証してみます!

yoshifukuさんのコメント
いろいろやってみて以下のコードになりました。 er1はうまく飛ぶのですが、どうしてもer2に飛ばずにエラーでひっかかるのです。 On Error GoTo er1 FileCopy SourceFile, TargetFile On Error GoTo 0 Exit Sub er1: 'MsgBox Err.Number Sleep 60000 On Error GoTo 0 On Error GoTo er2 FileCopy SourceFile, TargetFile ←←←←←ここでエラーコード70でひっかかる On Error GoTo 0 Exit Sub er2: 'MsgBox Err.Number Sleep 60000 On Error GoTo 0

poppydayさんのコメント
当方の例示では、function内で例外処理を完結していたので不要でしたが、 ご提示の例ではエラー発生後に再度エラー発生するとハンドリングができません。 一度例外を無効にする必要があります。 OnErrorGoto er2の前に「On Error Goto -1」と入れることで例外を無効化して、以降の例外発生時には例外処理できるようになります。 また、Sleep処理は待ちたい時間をそのままSleepさせるのではなく、1秒Sleep+「DoEvents」を秒数分繰り返した方が良いです。 ずっとSleepしっぱなしですと、他のWindowsイベント処理がたまってしまいますので。

yoshifukuさんのコメント
「On Error Goto -1」 が目から鱗でした!上手くいきました! ベストアンサー贈ります! またどうぞよろしくお願い致します。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ