Dim m_lngFileCount As Long '注释:定义计数器
Dim m_objFSO As New Scripting.FileSystemObject '注释:定义文件系统对象Sub CheckFolder(strPath As String)
    Dim objFolder As Scripting.Folder     '注释:文件夹对象
    Dim objLoopFolder As Scripting.Folder '注释:文件夹对象
    Dim objFile As Scripting.File         '注释:文件对象
    Dim objSubdirs As Scripting.Folders   '注释:文件夹集合对象    Set objFolder = m_objFSO.GetFolder(strPath)  '***
    For Each objFile In objFolder.Files
        If UCase$(Right$(objFile.Path, 4)) = ".xls" Or UCase$(Right$(objFile.Path, 4)) = ".XLS" Then
            m_lngFileCount = m_lngFileCount + 1
            '读取操作,可以声明EXCEL对象,来完成操作。
        End If
    Next objFile
    
    Set objSubdirs = objFolder.SubFolders
    For Each objLoopFolder In objSubdirs
        CheckFolder objLoopFolder.Path
    Next objLoopFolder
    
    Set objSubdirs = Nothing
    Set objFolder = Nothing
End SubPrivate Sub Command1_Click()
    CheckFolder "D:"
    MsgBox "共找到" & m_lngFileCount & "个文件!", vbInformation, "信息提示"
End Sub
为何在上我指定找D盘下所有Excel文件,可运行到'***这句时得到的是我这个工程保存时的路径,而不是D盘下呢?请指点迷津?

解决方案 »

  1.   

    不必如此复杂:第一次 myfile = Dir(yourpath & "\*.xls")
    其后   myfile = Dir()不为空就去读myfile。直至返回空串。
      

  2.   

    Dir 函数示例
    本示例使用 Dir 函数来检查某些文件或目录是否存在。在 Macintosh 计算机上,默认驱动器名称是 “HD” ,并且路径部分由冒号取代反斜线隔开。而且 Microsoft Windows 的通配符在 Mac 中可以作为有效字符出现在文件名中。也可以使用 MacID 函数来指定文件组。Dim MyFile, MyPath, MyName' 返回“WIN.INI” (如果该文件存在)。
    MyFile = Dir("C:\WINDOWS\WIN.ini")   ' 返回带指定扩展名的文件名。如果超过一个 *.ini 文件存在,
    ' 函数将返回按条件第一个找到的文件名。
    MyFile = Dir("C:\WINDOWS\*.ini")' 若第二次调用 Dir 函数,但不带任何参数,则函数将返回同一目录下的下一个 *.ini 文件。
    MyFile = Dir' 返回找到的第一个隐式 *.TXT 文件。
    MyFile = Dir("*.TXT", vbHidden)' 显示 C:\ 目录下的名称。
    MyPath = "c:\"   ' 指定路径。
    MyName = Dir(MyPath, vbDirectory)   ' 找寻第一项。
    Do While MyName <> ""   ' 开始循环。
       ' 跳过当前的目录及上层目录。
       If MyName <> "." And MyName <> ".." Then
          ' 使用位比较来确定 MyName 代表一目录。
          If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
             Debug.Print MyName   ' 如果它是一个目录,将其名称显示出来。
          End If
       End If
       MyName = Dir   ' 查找下一个目录。
    Loop
    至于你的那段代码,在我这里运行是正常的!
    你的代码用了直接递归。
    至于strPath的值变化是情理之中的事情。
      

  3.   

    '----------------------------------------------------------------------------
    '
    'Author:lihonggen0
    'Date:2003-6-20
    '功能:把一个目录下的文件名
    '----------------------------------------------------------------------------Private Function AutoListFiles(ByVal sDirName As String, ByVal FileFilter As String) As Boolean    On Error GoTo RF_ERROR
            Dim sName As String, sFile As String, sExt As String
        Dim sDirList() As String, iDirNum As Integer, I As Integer
        
        '首先枚举所有文件
        sFile = Dir(sDirName + FileFilter, vbNormal + vbArchive + vbHidden)
        I = 1
        Do While Len(sFile) > 0
            sFile = UCase(Trim(sFile))
            Debug.Print sFile
            I = I + 1
            sFile = Dir '下一个文件
        Loop
            
        Exit Function
    RF_EXIT:
        AutoListFiles = True
    RF_ERROR:
        MsgBox Err.Description, vbCritical, ""
        Resume RF_EXIT
    End Function
    Private Sub Command1_Click()
    Dim bln   As Boolean
    '将c:\盘根目录下的所有xls文件 列出来
    bln = AutoListFiles("c:\", "*.xls")
    End Sub
      

  4.   

    UP
    FSO速度奇慢~建议使用API