過去ログ

                                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列 処理が終了した行に"処理終了"という文字列を表示
 ───────────────────────────────────────  ■題名 : Re:エラーがエラーとして認識されないのですが...  ■名前 : こう <kou__@anet.ne.jp>  ■日付 : 03/2/26(水) 21:31  -------------------------------------------------------------------------
   だーちむ さん、こんにちわ。
レスが付かないのでフォローさせてください。

>共有違反などで移動できない場合は、エラーとして認識してくれず、
>エラー表示が出ません。
共有違反とは具体的にどのような状態なんでしょうか?
書き込み保護なので、移動(コピー元が削除)できないとかですか?
 ───────────────────────────────────────  ■題名 : Re:エラーがエラーとして認識されないのですが...  ■名前 : だーちむ  ■日付 : 03/2/27(木) 17:27  -------------------------------------------------------------------------
   こんにちわ。
お世話様です。

>だーちむ さん、こんにちわ。
>レスが付かないのでフォローさせてください。
>
>>共有違反などで移動できない場合は、エラーとして認識してくれず、
>>エラー表示が出ません。
>共有違反とは具体的にどのような状態なんでしょうか?
>書き込み保護なので、移動(コピー元が削除)できないとかですか?

そうですね。
サーバ上のファイルなので、
誰かが開いていたり、サーバのサービスでつかんでしまっていると、
コピー元が削除できない状態になります。
因みにOSはサーバ、クライアントともWindows系です。
 ───────────────────────────────────────  ■題名 : 移動前にLock状態を確認で  ■名前 : こう <kou__@anet.ne.jp>  ■日付 : 03/2/27(木) 21:36  -------------------------------------------------------------------------
   #種別が「他」になってました。

>誰かが開いていたり、サーバのサービスでつかんでしまっていると、
>コピー元が削除できない状態になります。
>因みに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
 ───────────────────────────────────────  ■題名 : Re:移動前にLock状態を確認で  ■名前 : だーちむ  ■日付 : 03/2/28(金) 17:06  -------------------------------------------------------------------------
   こうさん こんにちは。
## 間違って、「他」にしてしまいました。 (^_^)ゞ

ご指摘の通り、掴んでいるチェックをしたところ、
うまくいきました!
さらに掴んでいる場合はコピーロジックを回避するので、
レスポンスもよくなりました。

--ソース---
'ファイルがつかまれているかどうかをチェック
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ステートメントを記述しても、
エラーとして認識してくれない、ということですね。

すごく助かりました!
いろいろとありがとうございました。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 812