怎么在EXCEL里用VBA在某个盘的文件夹里搜索其中一个文件?

我的Q盘里按序建立有如下方式的文件,如A001,A002,A003。。。A1000放在A001~A1000的文件名下,A1001,A1002,A1003。。。A2000放在A1001~A2000文件夹下,A2001,A2002,A2003。。。A3000放在A2001~A3000文件夹下,如此样排序的文件夹现已排到A12000,还在不断增加中,由于工作需要每次要找某个号码的资料时要一个一个的文件打开才能找到,现在我想达到的功能是,比如我在B2栏里输入A2135,它就会自动去//Q/A2001~A3000下找到A2135并打开该文件夹。

用Dir函数

--------------------------------------------------------------------------------

返回一个 String,用以表示一个文件名、目录名或文件夹名称,它必须与指定的模式或文件属性、或磁盘卷标相匹配。

语法

Dir[(pathname[, attributes])]

Dir 函数的语法具有以下几个部分:

部分 描述
pathname 可选参数。用来指定文件名的字符串表达式,可能包含目录或文件夹、以及驱动器。如果没有找到 pathname,则会返回零长度字符串 ("")。
attributes 可选参数。常数或数值表达式,其总和用来指定文件属性。如果省略,则会返回匹配 pathname 但不包含属性的文件。

设置值

attributes 参数的设置可为:

常数 值 描述
vbNormal 0 (缺省) 指定没有属性的文件。
vbReadOnly 1 指定无属性的只读文件
vbHidden 2 指定无属性的隐藏文件
VbSystem 4 指定无属性的系统文件
vbVolume 8 指定卷标文件;如果指定了其它属性,则忽略vbVolume
vbDirectory 16 指定无属性文件及其路径和文件夹。

注意 这些常数是由 VBA 所指定的,在程序代码中的任何位置,可以使用这些常数来替换真正的数值。

说明

Dir 支持多字符 (*) 和单字符 (?) 的通配符来指定多重文件。

由于 Macintosh 不支持通配符,使用文件类型指定文件组。可以使用 MacID 函数指定文件类型而不用文件名。比如,下列语句返回当前文件夹中第一个TEXT文件的名称:

Dir("SomePath", MacID("TEXT"))

为选中文件夹中所有文件,指定一空串:

Dir("")

在 Microsoft Windows 中,如果在Dir函数中使用MacID函数,将产生错误。

任何大于256的attribute值都被认为是MacID 函数的值。

在第一次调用 Dir 函数时,必须指定 pathname,否则会产生错误。如果也指定了文件属性,那么就必须包括 pathname。

Dir 会返回匹配 pathname 的第一个文件名。若想得到其它匹配 pathname 的文件名,再一次调用 Dir,且不要使用参数。如果已没有合乎条件的文件,则 Dir 会返回一个零长度字符串 ("")。一旦返回值为零长度字符串,并要再次调用 Dir 时,就必须指定 pathname,否则会产生错误。不必访问到所有匹配当前 pathname 的文件名,就可以改变到一个新的 pathname 上。但是,不能以递归方式来调用 Dir 函数。以 vbDirectory 属性来调用 Dir 不能连续地返回子目录。

提示 由于文件名并不会以特别的次序来返回,所以可以将文件名存储在一个数组中,然后再对这个数组排序。追问

谢谢你,不过你说的实在太深了,我还不会,我现在需要具体的代码或操作步骤

追答

要是可以给加分哈...
Sub FindFile() '将此文件放在存放文件的最初始目录下
On Error Resume Next

Dim FirstPath As String '母目录,默认为此文件所在目录
Dim FfPath As String '第一过度路径
Dim SecondFile As String '第二层文件夹
Dim SsPath As String '第二过度路径
Dim FoundFile As String '找到的文件名
Dim FileName As String '要找的文件名
Dim DetectPart As String '文件名表示位,取前两位,文件名前两位与所在文件夹名前两位同
Dim FulPath As String '找到文件的全地址
Dim isFound As Boolean '是否找到

isFound = False

FirstPath = ThisWorkbook.Path
FileName = InputBox("Pls input your file name!", "Input Box", "A1234")
DetectPart = Mid(FileName, 1, 2)
FfPath = FirstPath & "\" & DetectPart & "*"
SecondFile = Dir(FfPath, vbDirectory)
SsPath = FirstPath & "\" & SecondFile & "\" & FileName & ".*"
FoundFile = Dir(SsPath, vbNormal)
If FoundFile "" Then isFound = True
If isFound Then
FulPath = FirstPath & "\" & SecondFile & "\" & FoundFile
If MsgBox("File is found,Open it?", vbYesNo + vbQuestion) = vbYes Then
Workbooks.Open FulPath
End If
Else
MsgBox "File is not found! Make sure input rightly...", vbOKCancel + vbExclamation
End If
End Sub

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-01
类似以下语句,bookname表示要搜索的文件名,应该用input语句输入文件名的,懒得写自己看吧。
sub ls()
dim bookname as string
If Dir(ThisWorkbook.Path & "\" & bookname, 16) = "" then
msgbox "文件存在"
else msgbox “文件不存在"
end if
end sub
第2个回答  2011-08-04
On Error Resume Next
MkDir "D:\xxx" ' 不存在就建一个,已存在则跳到下一句
第3个回答  2011-07-31
直接在盘中搜索不是更好吗。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网