dir函数,无效的调用过程或参数

caprason 2009-12-09 03:07:47
    Do
S = Dir$(Path01 & "\abc*", vbDirectory)
If (Len(S) = 11) Then
If (IsNumeric(Mid$(S, 4))) Then Exit Do
End If
S = Dir$()
Loop While (S > "")


S = Dir$() 这句话,有的机器运行没问题,有的机器运行就报“无效的调用过程或参数”。
请问这个哪里出错了?
...全文
863 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2009-12-12
  • 打赏
  • 举报
回复
Ding 猴哥 ..........
chinaboyzyq 2009-12-12
  • 打赏
  • 举报
回复

Do
S = Dir$(Path01 & "\abc*", vbDirectory)'1位置,此处如果找不到abc*,则S=""
If (Len(S) = 11) Then
If (IsNumeric(Mid$(S, 4))) Then Exit Do
End If
S = Dir$()'这个位置是递归查找,如果1位置S="",则无法继续递归,所以就会报错。
Loop While (S > "")

'所以你的程序结构应如下改动:
s = Dir(path01 & "\abc*", vbDirectory)
Do While s <> ""
If (Len(S) = 11) Then
If (IsNumeric(Mid$(S, 4))) Then Exit Do
End If
s = Dir()
Loop


'你的错误与操作系统无关。


chinaboyzyq 2009-12-11
  • 打赏
  • 举报
回复

Do
S = Dir$(Path01 & "\abc*", vbDirectory)'1位置,此处如果找不到abc*,则S=""
If (Len(S) = 11) Then
If (IsNumeric(Mid$(S, 4))) Then Exit Do
End If
S = Dir$()'这个位置是递归查找,如果1位置S="",则无法继续递归,所以就会报错。
Loop While (S > "")

'所以你的程序结构应如下改动:
Dim s As String, path01 As String
path01 = "c:\windows"
s = Dir(path01 & "\abc*", vbDirectory)
Do While s <> ""
Debug.Print path01 & "\" & s
s = Dir()
Loop


'你的错误与操作系统无关。
huanfengzhizhuo 2009-12-09
  • 打赏
  • 举报
回复
帮你顶顶!
huanfengzhizhuo 2009-12-09
  • 打赏
  • 举报
回复
帮你顶顶!
huanfengzhizhuo 2009-12-09
  • 打赏
  • 举报
回复
帮你顶顶!
贝隆 2009-12-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jhone99 的回复:]
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 不能连续地返回子目录。

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


[/Quote]

顶!

赵4老师 2009-12-09
  • 打赏
  • 举报
回复
我不用Dir
我用Shell("dir /b /a-d /on *.* >files.txt")
然后读files.txt文件的内容
好处是想怎么排序只要改/o选项就行了。
参考
c:\>dir /?
显示目录中的文件和子目录列表。

DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]
[/O[[:]sortorder]] [/P] [/Q] [/S] [/T[[:]timefield]] [/W] [/X] [/4]

[drive:][path][filename]
指定要列出的驱动器、目录和/或文件。

/A 显示具有指定属性的文件。
attributes D 目录 R 只读文件
H 隐藏文件 A 准备存档的文件
S 系统文件 - 表示“否”的前缀
/B 使用空格式(没有标题信息或摘要)。
/C 在文件大小中显示千位数分隔符。这是默认值。用 /-C 来
停用分隔符显示。
/D 跟宽式相同,但文件是按栏分类列出的。
/L 用小写。
/N 新的长列表格式,其中文件名在最右边。
/O 用分类顺序列出文件。
sortorder N 按名称(字母顺序) S 按大小 (从小到大)
E 按扩展名(字母顺序) D 按日期/时间(从早到晚)
G 组目录优先 - 颠倒顺序的前缀
/P 在每个信息屏幕后暂停。
/Q 显示文件所有者。
/S 显示指定目录和所有子目录中的文件。
/T 控制显示或用来分类的时间字符域。
timefield C 创建时间
A 上次访问时间
W 上次写入的时间
/W 用宽列表格式。
/X 显示为非 8dot3 文件名产生的短名称。格式是 /N 的格式,
短名称插在长名称前面。如果没有短名称,在其位置则
显示空白。
/4 用四位数字显示年

可以在 DIRCMD 环境变量中预先设定命令选项。通过添加前缀 - (破折号)
来替代预先设定的命令选项,例如,/-W。
jhone99 2009-12-09
  • 打赏
  • 举报
回复
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 不能连续地返回子目录。

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

caprason 2009-12-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dingyanwei 的回复:]
OFF97: 在 Visual Basic 帮助文件的 Dir 函数示例授予运行时错误"5"NT 系统上
http://support.microsoft.com/kb/200837/zh-cn
[/Quote]
看不懂……
就是把那几句IF改改?如何改?
dingyanwei 2009-12-09
  • 打赏
  • 举报
回复
OFF97: 在 Visual Basic 帮助文件的 Dir 函数示例授予运行时错误"5"NT 系统上
http://support.microsoft.com/kb/200837/zh-cn
caprason 2009-12-09
  • 打赏
  • 举报
回复
试了4台机器,1台2003,1台WIN7,2台XP
2003和XP没报错,顺利运行。
WIN7和另一台XP,报错“无效的调用过程或参数”。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧