Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 7778|回复: 12

[已解决]FileSearch只能在2003中有效吗

[复制链接]
发表于 2010-3-30 15:47 | 显示全部楼层 |阅读模式
Application.FileSearch在2007版中错误提示如下,是何因?

FileSearch只能在2003中有效吗

FileSearch只能在2003中有效吗

最佳答案
2010-3-30 19:04

FileSearch已被FileSystemObject对象取代了,FileSearch能做的所有操作FileSystemObject都能完成,而且更有效率.

就象Collection被dictionary取代一样,按照规律,Collection也将会在一个合适的版本在EXCEL中消失,EXCEL VBA的诞生是为了取代宏表,听说EXCEL2010版将抛弃古老的宏表.

这不但不是退步,恰恰是种进步,因为后者除了具备前者的所有功能外,更加有效率,更加强大

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2010-3-30 15:56 | 显示全部楼层
回复

使用道具 举报

发表于 2010-3-30 16:00 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2010-3-30 16:07 | 显示全部楼层

杯具啊[em19]
回复

使用道具 举报

发表于 2010-3-30 18:04 | 显示全部楼层

以下从MS网上找到的(原代码是在VB中运行,已改可在excel中运行,需要建立窗体,内命令按钮标签列表框 各一个,并引用microsoft scripting runtime),是用递归:

Option Explicit
Dim fso As New FileSystemObject
Dim fld As Folder

Private Function FindFile(ByVal sFol As String, sFile As String, _
   nDirs As Long, nFiles As Long) As Currency
   Dim tFld As Folder, tFil As File, FileName As String
  
   On Error GoTo Catch
   Set fld = fso.GetFolder(sFol)
   FileName = Dir(fso.BuildPath(fld.Path, sFile), vbNormal Or _
                  vbHidden Or vbSystem Or vbReadOnly)
   While Len(FileName) <> 0
      FindFile = FindFile + FileLen(fso.BuildPath(fld.Path, _
      FileName))
      nFiles = nFiles + 1
      ListBox1.AddItem fso.BuildPath(fld.Path, FileName)  ' Load ListBox
      FileName = Dir()  ' Get next file
      DoEvents
   Wend
   Label1 = "Searching " & vbCrLf & fld.Path & "..."
   nDirs = nDirs + 1
   If fld.SubFolders.Count > 0 Then
      For Each tFld In fld.SubFolders
         DoEvents
         FindFile = FindFile + FindFile(tFld.Path, sFile, nDirs, nFiles)
      Next
   End If
   Exit Function
Catch:  FileName = ""
       Resume Next
End Function
Private Sub CommandButton1_Click()
Dim nDirs As Long, nFiles As Long, lSize As Currency
   Dim sDir As String, sSrchString As String
   sDir = InputBox("Type the directory that you want to search for", _
                   "FileSystemObjects example", "C:\")
   sSrchString = InputBox("Type the file name that you want to search for", _
                   "FileSystemObjects example", "vb.ini")
   Label1.Caption = "Searching " & vbCrLf & UCase(sDir) & "..."
   lSize = FindFile(sDir, sSrchString, nDirs, nFiles)
   MsgBox Str(nFiles) & " files found in" & Str(nDirs) & _
          " directories", vbInformation
   MsgBox "Total Size = " & lSize & " bytes"
End Sub

回复

使用道具 举报

发表于 2010-3-30 18:12 | 显示全部楼层

这个还好,毕竟在MS网上还出个例程。而WORD、PPT中用于图表的datasheet,在07及以后变成chartdata,而这个chartdata在帮助中根本就没有!网上也只找到一段文字说明,说变成了chartdata。[em06][em06][em06]
回复

使用道具 举报

发表于 2010-3-30 19:03 | 显示全部楼层

用API递归一下.

回复

使用道具 举报

发表于 2010-3-30 19:04 | 显示全部楼层    本楼为最佳答案   

FileSearch已被FileSystemObject对象取代了,FileSearch能做的所有操作FileSystemObject都能完成,而且更有效率.

就象Collection被dictionary取代一样,按照规律,Collection也将会在一个合适的版本在EXCEL中消失,EXCEL VBA的诞生是为了取代宏表,听说EXCEL2010版将抛弃古老的宏表.

这不但不是退步,恰恰是种进步,因为后者除了具备前者的所有功能外,更加有效率,更加强大

回复

使用道具 举报

发表于 2010-3-31 12:18 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2010-3-31 12:30 | 显示全部楼层

2010中还有宏表,也增加了些64位支持,下面是帮助文件中的

Application.HinstancePtr 属性
返回由指定的 Application 对象表示的 Microsoft Excel 2010 实例的句柄。只读 Variant

版本信息
 已添加版本:  Excel 2010

语法

表达式.HinstancePtr

表达式   一个代表 Application 对象的变量。

说明

此属性在 32 位和 64 位版本的 Excel 中均返回正确的句柄。它扩展了 Application 对象的 Hinstance 属性的功能,Hinstance 属性仅适用于 32 位版本的 Excel。

用于此属性的理想数据类型为 LongPtr 数据类型。按照预期,将此属性返回的值分配给 LongPtr 变量同样适用于 32 位和 64 位版本的 Excel。出于内部实现原因,此属性被定义为 Variant。不过,在 32 位系统上它始终返回 32 位的值,在 64 位系统上始终返回 64 位的值。

此属性仅在自 Excel 2010 之后的版本中适用,且只有 64 位版本的 Excel 才需要它。如果必须编写同样适用于 Excel 早期版本的代码,为了避免编译错误,请在 #if Win64 条件编译指令下读取此属性,然后在 #else 指令下使用 Hinstance 属性。

请注意,此属性同时适用于自 Excel 2010 之后的 32 位和 64 位环境。因此,如果计划将您的代码仅用于 Excel 2010 或更高版本(32 位或 64 位),则可以读取此属性,无需条件编译。

有关如何在 64 位环境中使用 VBA 的详细信息,请参阅 64 位 Visual Basic for Applications 概述

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-20 13:27 , Processed in 0.168145 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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