3

理由はわかりませんが、次のコードが不明なエラーをスローし始めています。マクロが実行されると、Excelは応答を停止します。

  • このエラーが発生するのはなぜですか?
  • 同じ機能を持つ代替ルートは何ですか?

このコードは、Windows7マシンのExcel2010xlsmファイル内にあります。

 Sub CopyFolderToCasinoDirectory()

        'reference Microsoft Scripting Runtime
        On Error Resume Next

        Dim fso As Scripting.FileSystemObject
        Set fso = New Scripting.FileSystemObject
        fso.CopyFolder _
              "\\xxxfileserve\department$\DBA\Opers\All Operators\yyy", _
              "\\xxxfileserve\department$\DBA\Cas\yyy", _
              True

        On Error GoTo 0
        Set fso = Nothing

    End Sub

わかりました-より少ないファイルを移動しようとするように経路を変更しました-そしてそれは躊躇しますが、最終的には実行されます。指定されたディレクトリにファイルが多すぎるため、上記が失敗しているのではないかと思います。現在753個のファイルがあります-多分多すぎますか?

RonDeBruinは、ロジックをテストまたは変更する方法について多くのアイデアを与えてくれました。1つの可能性は、最初に宛先フォルダーでDeleteFolderを使用し、次にターゲットフォルダーでCopyFolderを使用することです。

4

2 に答える 2

2

返信が遅くなってすみません。ネットワークディレクトリを取得できなかったので、投稿する前にコードをテストしたかったのです:)

これを試して。実行しSub Sample()ますか?それでもハングしますか?また、Windowsダイアログボックスでファイルが転送されるのを確認できます。

Private Declare Function SHFileOperation _
Lib "shell32.dll" Alias "SHFileOperationA" _
(lpFileOp As SHFILEOPSTRUCT) As Long

Private Type SHFILEOPSTRUCT
    hWnd As Long
    wFunc As Long
    pFrom As String
    pTo As String
    fFlags As Integer
    fAborted As Boolean
    hNameMaps As Long
    sProgress As String
End Type

Private Const FO_COPY = &H2

Sub Sample()
    Dim path1 As String, path2 As String

    path1 = "\\xxxfileserve\department$\DBA\Opers\All Operators\yyy"
    path2 = "\\xxxfileserve\department$\DBA\Opers\All Operators\yyy"

    If CopyFolder(path1, path2) Then
        MsgBox "Copied"
    Else
        MsgBox "Not copied"
    End If
End Sub

Private Function CopyFolder(ByVal sFrom As String, _
ByVal sTo As String) As Boolean
    Dim SHFileOp As SHFILEOPSTRUCT
    On Error GoTo Whoa
    CopyFolder = False
    With SHFileOp
        .wFunc = FO_COPY
        .pFrom = sFrom
        .pTo = sTo
    End With
    SHFileOperation SHFileOp
    CopyFolder = True
    Exit Function
Whoa:
    MsgBox "Following error occurred while copying folder " & sFrom & vbCrLf & _
    Err.Description, vbExclamation, "Error message"
End Function
于 2012-06-01T18:25:57.753 に答える
1

fso.CopyFolderこの方法に関していくつかのポイントがあります。

  • 宛先が存在しない場合は、ソースフォルダーとそのすべての内容がコピーされます。これは通常のケースです。
  • 宛先が既存のファイルの場合、エラーが発生します。
  • 宛先がディレクトリの場合、フォルダとそのすべての内容をコピーしようとします。
  • ソースに含まれるファイルが宛先にすでに存在する場合、上書きがFalseの場合はエラーが発生します。それ以外の場合は、既存のファイルにファイルをコピーしようとします。
  • 宛先が読み取り専用ディレクトリの場合、既存の読み取り専用ファイルをそのディレクトリにコピーしようとして上書きがFalseの場合、エラーが発生します。

これらのいずれかがあなたの邪魔になっていないことを確認してくださいsub

しかし、このように別の方法でテストしてください

fso.CopyFolder _
              "\\xxxfileserve\department$\DBA\Opers\All Operators\yyy\*", _
              "\\xxxfileserve\department$\DBA\Cas\yyy", _
              True

お役に立てれば。

于 2012-06-02T04:34:20.873 に答える