Page 812 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼エラーがエラーとして認識されないのですが... だーちむ 03/2/25(火) 14:06 ┗Re:エラーがエラーとして認識されないのですが... こう 03/2/26(水) 21:31 ┗Re:エラーがエラーとして認識されないのですが... だーちむ 03/2/27(木) 17:27 ┗移動前にLock状態を確認で こう 03/2/27(木) 21:36 ┗Re:移動前にLock状態を確認で だーちむ 03/2/28(金) 17:06 ─────────────────────────────────────── ■題名 : エラーがエラーとして認識されないのですが... ■名前 : だーちむ ■日付 : 03/2/25(火) 14:06 -------------------------------------------------------------------------
VBAを利用して、ファイルをサーバ間移動させようとしています。 エラーが発生したときは、セルにエラーの表示をさせています。 移動元のファイルが存在しない場合などはエラーとして認識してくれるのですが、 共有違反などで移動できない場合は、エラーとして認識してくれず、 エラー表示が出ません。 その際は、新旧両サーバにファイルが存在する(つまり、コピーしたのと同じ) という状況になってしまいます。 どうしてでしょうか? また、これをエラーとして認識させ、新サーバにはファイルがコピーされない ようにしたいのですが、どうしたらよいでしょうか? よろしくご教授お願い致します。 なお、以下はソースです。 Sub MoveFile() Dim oldserver As String Dim newserver As String Dim file As String Dim i As Integer Dim endmacro As Integer 'エラーは全てerror_handleラベルへ On Error GoTo error_handle i = 1 endmacro = 0 Do file = Cells(i, 1).Value oldserver = Cells(i, 2).Value newserver = Cells(i, 3).Value If file = "" Then endmacro = 1 Else Name "\\" + oldserver + "\folder\" + file As _ "\\" + newserver + "\folder\" + file Cells(i, 5).Value = "処理終了" End If i = i + 1 Loop Until endmacro = 1 Exit Sub error_handle: Cells(i, 4).Value = "エラー" Resume Next End Sub <シートの補足> A列 ファイル名 B列 移動元サーバ名 C列 移動先サーバ名 D列 エラーの場合、"エラー"という文字列を表示 E列 処理が終了した行に"処理終了"という文字列を表示 |
だーちむ さん、こんにちわ。 レスが付かないのでフォローさせてください。 >共有違反などで移動できない場合は、エラーとして認識してくれず、 >エラー表示が出ません。 共有違反とは具体的にどのような状態なんでしょうか? 書き込み保護なので、移動(コピー元が削除)できないとかですか? |
こんにちわ。 お世話様です。 >だーちむ さん、こんにちわ。 >レスが付かないのでフォローさせてください。 > >>共有違反などで移動できない場合は、エラーとして認識してくれず、 >>エラー表示が出ません。 >共有違反とは具体的にどのような状態なんでしょうか? >書き込み保護なので、移動(コピー元が削除)できないとかですか? そうですね。 サーバ上のファイルなので、 誰かが開いていたり、サーバのサービスでつかんでしまっていると、 コピー元が削除できない状態になります。 因みにOSはサーバ、クライアントともWindows系です。 |
#種別が「他」になってました。 >誰かが開いていたり、サーバのサービスでつかんでしまっていると、 >コピー元が削除できない状態になります。 >因みにOSはサーバ、クライアントともWindows系です。 良い方法かは不明ですが、移動前に元ファイルをLockモードでOPENして エラーなら誰かが掴んでいるという判断です。 If file = "" Then endmacro = 1 Else Open "\\" + oldserver + "\folder\"+ file For Binary Lock Read Write As #1 Close #1 Name "\\" + oldserver + "\folder\" + file As _ "\\" + newserver + "\folder\" + file Cells(i, 5).Value = "処理終了" End If #ネタ元 http://support.microsoft.com/default.aspx?scid=http://www.microsoft.com/japan/support/kb/articles/408/0/62.asp |
こうさん こんにちは。 ## 間違って、「他」にしてしまいました。 (^_^)ゞ ご指摘の通り、掴んでいるチェックをしたところ、 うまくいきました! さらに掴んでいる場合はコピーロジックを回避するので、 レスポンスもよくなりました。 --ソース--- 'ファイルがつかまれているかどうかをチェック Open "\\" + oldserver + "\folder\" + file For Binary Lock Read Write As #1 Close #1 Name "\\" + oldserver + "\folder\" + file As _ "\\" + newserver + "\folder\" + file next_proc: Cells(i, 5).Value = "処理終了" '中略////// error_handle: Cells(i, 4).Value = "エラー" GoTo next_proc ------- マイクロソフトのページに 排他制御方法(ロジック)が書かれているということは、 普通にOn Errorステートメントを記述しても、 エラーとして認識してくれない、ということですね。 すごく助かりました! いろいろとありがとうございました。 |