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盘下呢?请指点迷津?
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盘下呢?请指点迷津?
其后 myfile = Dir()不为空就去读myfile。直至返回空串。
本示例使用 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的值变化是情理之中的事情。
'
'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
FSO速度奇慢~建议使用API