错误70 Excel 2013计数文件时 - 不打开文件,只计算

时间:2014-09-11 05:48:27

标签: excel vba

我有一个在其他机器上工作正常的宏,尤其是我办公室的Win XP SP3上的Excel 2010。但是,尝试使用Excel 2013在我的Win 8.1笔记本电脑上运行完全相同的代码,我一直得到一个"错误70:权限被拒绝"

我研究过,大多数讨论的重点是尝试访问打开或锁定的文件。在这种情况下,我计算文件和子文件夹。

完整的代码在这里:

   Option Explicit

Private FSO As Object
Private cFiles(1 To 3) As Long
Private cFolders(1 To 3) As Long

Sub Folders()
    Dim i As Long
    Dim sFolder As String
    Dim iStart As Long
    Dim iEnd As Long
    Dim fOutline As Boolean

    cFiles(1) = 0: cFiles(2) = 0: cFiles(3) = 0
    cFolders(1) = 0: cFolders(2) = 0: cFolders(3) = 0
    Set FSO = CreateObject("SCripting.FileSystemObject")
    sFolder = "N:\E-Pros Admin\NEW HUB\Division 4 Order Processing\Contracts\CONTRACTS PRIOR TO 05-07-14\"
    SelectFiles sFolder
    MsgBox "# of files: " & cFiles(1) & vbNewLine & _
    "# of folders with files: " & cFiles(2) & vbNewLine & _
    "# of folders with no files " & cFiles(3) & vbNewLine & _
    "# of folders: " & cFolders(1) & vbNewLine & _
    "# of folders with subfolders: " & cFolders(2) & vbNewLine & _
    "# of folders with no subfolders: " & cFolders(3)
    Set FSO = Nothing

End Sub

 '-----------------------------------------------------------------------
Sub SelectFiles(Optional sPath As String)
     '-----------------------------------------------------------------------
    Dim oSubFolder As Object
    Dim oFolder As Object

    If FSO Is Nothing Then
    End If

    Set oFolder = FSO.GetFolder(sPath)
    cFiles(1) = cFiles(1) + oFolder.Files.count
    If oFolder.Files.count > 0 Then
        cFiles(2) = cFiles(2) + 1
    Else
        cFiles(3) = cFiles(3) + 1
    End If

    cFolders(1) = cFolders(1) + 1
    If oFolder.SubFolders.count > 0 Then
        cFolders(2) = cFolders(2) + 1
        For Each oSubFolder In oFolder.SubFolders
            SelectFiles oSubFolder.Path
        Next
    Else
        cFolders(3) = cFolders(3) + 1
    End If


End Sub

抛出错误的代码位于以下函数/代码中:

Sub SelectFiles(Optional sPath As String)
         '-----------------------------------------------------------------------
        Dim oSubFolder As Object
        Dim oFolder As Object

        If FSO Is Nothing Then
        End If

        Set oFolder = FSO.GetFolder(sPath)
        cFiles(1) = cFiles(1) + oFolder.Files.count   **<== This line throws Error 70 Permission Denied**
        If oFolder.Files.count > 0 Then
            cFiles(2) = cFiles(2) + 1
        Else

我已经检查了所有权限,DCOM 32和64位,所有权限都超出了Excel(每个人都可以访问所有内容,但仍然没有。完全沮丧。

真的很感激任何帮助。

谢谢,杰夫

1 个答案:

答案 0 :(得分:0)

所谓的“交接点”NTFS“符号链接”是这个错误的罪魁祸首。 请参阅:http://support.microsoft.com/kb/930128/en

我用我的Windows 7系统试过了。从Windows XP中更新。然而,例如"C:\Users\axel\Documents\Eigene Bilder"有这样的交接点。如果FSO获得与Folder对象这样的连接点,它将获得一个空白Files集合的Folder对象,而不包含任何方法或属性。 SubFolders集合也是如此。但他们并不是什么都不是。它们是物体。如果程序尝试访问这些集合,则会抛出Error 70 "Access denied"

作为一种解决方案,您可以在访问.Files和.SubFolders之前使用On Error Resume Next,并在访问后使用此类交接点和On Error Goto 0。但是不会计算交接点。

问候

阿克塞尔