ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 23118|回复: 16

[求助] EXCEL2007下Application.FileSearch使用

[复制链接]

TA的精华主题

TA的得分主题

发表于 2008-11-26 17:42 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:Application对象
怎样在2007下使用Application.FileSearch,可以在已经打开的EXCEL下运行VB,然后打开指定目录,指定名称的EXCEL文件?谢谢。求各位高手解决

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-11-27 13:05 | 显示全部楼层
谢谢您的热心回复。认真学习中。

TA的精华主题

TA的得分主题

发表于 2008-12-16 11:40 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-1-6 17:10 | 显示全部楼层

楼主,请教一个问题

看到你的宏代码, 因为我在做资料整理,
能不能提取文件夹中的所有资料,而不只是xls文件?

TA的精华主题

TA的得分主题

发表于 2008-11-26 18:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
你好:
我也是用了2007才發現不能用
這是我的替代方法  
Application.FileSearch 在Excel2007的替代方法

FileSearch 物件已從 2007 Microsoft Office 程式中去除(這麼好用的功能也拿掉了,真是給他..00XX),詳細的說明請參考
KB935402說明,在說明中微軟有提示可以使用Dir 函式或 FileSystemObject
類別來搜索檔案,今天就依這個提示來做一個類似Application.FileSearch的功能,可以設定是否搜尋子資料夾,詳細說明請參考程式碼….




Dim strArr() As String, rCount As Integer
Sub App_FileSearch()
'設定要搜尋檔案的關鍵字
'如果要列出所有檔案請設定為String = ""
Const keyword As String = "*.xls" '搜尋xls檔案
    'App_SearchSubFolder(keyword, True) '搜尋包含子資料夾
    'App_SearchSubFolder(keyword, False) '搜尋不包含子資料夾
    Call App_SearchSubFolder(keyword, True)
    If UBound(strArr) > 0 Then
        '以超連結的方式列出檔案
        For i = 0 To UBound(strArr)
            If strArr(i) <> "" Then
                ActiveSheet.Hyperlinks.Add Anchor:=Cells(i + 3, "A"), _
                        Address:=strArr(i), TextToDisplay:=strArr(i)
            End If
        Next i
    Else
        MsgBox "未發現檔案"
    End If
End Sub
Function App_SearchSubFolder(keyword As String, rSearchSubFolders As Boolean)
Dim fd As Object
Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    '開啟Excel內建的資料夾瀏覽方塊
    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
    If fd.Show = -1 Then
        rLookIn = fd.SelectedItems(1)
    Else
        MsgBox "未選取資料夾": Exit Function
    End If
    rFilename = Dir$(rLookIn & "\" & keyword)
    rCount = 0
    '建立動態陣列
    ReDim Preserve strArr(rCount)
    '第一階資料夾
    Do While rFilename <> vbNullString
        strArr(rCount) = rLookIn & "\" & rFilename
        rCount = rCount + 1
        ReDim Preserve strArr(rCount)
        rFilename = Dir$()
    Loop
    If rSearchSubFolders Then    '判斷是否搜尋子資料夾
        '搜尋第二階以後的子資料夾
        Call App_NextSubFolder(fso.GetFolder(rLookIn), keyword)
    End If
    Set fd = Nothing
    Set fso = Nothing
End Function

Private Sub App_NextSubFolder(ByRef Folder As Object, _
        ByRef keyword As String)
Dim SubFolder As Object
    For Each SubFolder In Folder.SubFolders
        rFilename = Dir$(SubFolder.Path & "\" & keyword)
        Do While rFilename <> vbNullString
            strArr(rCount) = SubFolder.Path & "\" & rFilename
            rCount = rCount + 1
            ReDim Preserve strArr(rCount)
            rFilename = Dir$()
        Loop
        Call App_NextSubFolder(SubFolder, keyword)
    Next
End Sub


[ 本帖最后由 chijanzen 于 2008-11-26 18:22 编辑 ]

D0068.rar

24.1 KB, 下载次数: 484

TA的精华主题

TA的得分主题

发表于 2009-4-3 16:39 | 显示全部楼层
从中收益很多,不知道你有没有关于excel 2007 application这一块的资料,如果有的话,能否发一份给我呢?我的邮箱地址:yangqinghua2002@hotmail.com

TA的精华主题

TA的得分主题

发表于 2009-4-8 09:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢二楼的详细回复,这段正在为filesearch不能用而不解,不过我用的是2003,莫非跟那个系统补丁有关???  看了一下你的代码,非常有用FSO DIR  谢谢

TA的精华主题

TA的得分主题

发表于 2011-1-19 13:40 | 显示全部楼层
收藏一下,我最近也要用到该方法了

TA的精华主题

TA的得分主题

发表于 2009-12-7 00:29 | 显示全部楼层

回复 2楼 chijanzen 的帖子

请大侠帮助修改代替FileSearch的程序(未解决)
如何在EXCEL2007中用FSO代替FileSearch(循环遍历)?
原代码:
With Application.FileSearch
        .LookIn = ThisWorkbook.Path
        .FileType = msoFileTypeExcelWorkbooks
        If .Execute() > 0 Then
            For i = 1 To .FoundFiles.Count
                If .FoundFiles(i) <> ThisWorkbook.FullName Then
                    Workbooks.Open .FoundFiles(i)
请写出利用FileSystemObject对象替代的代码:

TA的精华主题

TA的得分主题

发表于 2010-1-22 00:56 | 显示全部楼层
感谢三戒高手提供的好东西,我在国外的好多Excel论坛上都有人抱怨这个问题,我试了很多他们提供的代码,这个是比较经典的一个。转过来大家一起享受!

Excel
VBA
Application.FileSearch
2003
2007

'!!!! Replacement solution including searching in subdirectories !!!


//------------------------------------------------------------------------------------------------

Sub FileSearchByHavrda_Example_of_procedure_calling()
'
' Example of FileSearchByHavrda procedure calling as replacement of missing FileSearch function in the newest MS Office VBA
' 01.06.2009, Author: P. Havrda, Czech Republic
'

Dim FileNameWithPath As Variant
Dim ListOfFilenamesWithParh As New Collection    ' create a collection of filenames

' Filling a collection of filenames (search Excel files including subdirectories)
Call FileSearchByHavrda(ListOfFilenamesWithParh, "C:\Temp", "*.xls", True)

' Print list to immediate debug window and as a message window
For Each FileNameWithPath In ListOfFilenamesWithParh    ' cycle for list(collection) processing
        Debug.Print FileNameWithPath & Chr(13)
        MsgBox FileNameWithPath & Chr(13)
Next FileNameWithPath

' Print to immediate debug window and message if no file was found
If ListOfFilenamesWithParh.Count = 0 Then
    Debug.Print "No file was found !"
    MsgBox "No file was found !"
End If

End Sub

//------------------------------------------------------------------------------------------------

Private Sub FileSearchByHavrda(pFoundFiles As Collection, pPath As String, pMask As String, pIncludeSubdirectories As Boolean)
'
' Search files in Path and create FoundFiles list(collection) of file names(path included) accordant with Mask (search in subdirectories if enabled)
' 01.06.2009, Author: P. Havrda, Czech Republic
'

Dim DirFile As String
Dim CollectionItem As Variant
Dim SubDirCollection As New Collection

' Add backslash at the end of path if not present
pPath = Trim(pPath)
If Right(pPath, 1) <> "\" Then pPath = pPath & "\"

' Searching files accordant with mask
DirFile = Dir(pPath & pMask)
Do While DirFile <> ""
pFoundFiles.Add pPath & DirFile  'add file name to list(collection)
DirFile = Dir ' next file
Loop

' Procedure exiting if searching in subdirectories isn't enabled
If Not pIncludeSubdirectories Then Exit Sub

' Searching for subdirectories in path
DirFile = Dir(pPath & "*", vbDirectory)
Do While DirFile <> ""
    ' Add subdirectory to local list(collection) of subdirectories in path
    If DirFile <> "." And DirFile <> ".." Then If ((GetAttr(pPath & DirFile) And vbDirectory) = 16) Then SubDirCollection.Add pPath & DirFile
    DirFile = Dir 'next file
Loop

' Subdirectories list(collection) processing
For Each CollectionItem In SubDirCollection
     Call FileSearchByHavrda(pFoundFiles, CStr(CollectionItem), pMask, pIncludeSubdirectories) ' Recursive procedure call
Next

End Sub

//------------------------------------------------------------------------------------------------
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-22 04:56 , Processed in 0.034596 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表