You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Access VBA中Dir函数默认属性会读取只读文件?

解决VBA Dir函数无法排除只读文件的问题

你的问题出在对Dir函数attributes参数的理解偏差上,微软文档的描述存在歧义,实际行为和你预期的不一样:

  • 你使用vbNormal作为参数,以为会只返回无任何属性的文件,但实际上vbNormal的实际作用是返回非系统、非隐藏、非目录的文件,不管文件是否带有只读或存档属性(存档属性是绝大多数文件默认拥有的)。所以你的只读文件test.xlsx会被正常返回。

要实现排除只读文件的需求,需要手动检查每个文件的属性,修改后的代码如下:

Dim targetPath As String
Dim fileName As String
targetPath = "C:\Users\" '注意:这里建议替换为具体的子目录,比如"C:\Users\你的用户名\"
fileName = Dir(targetPath & "*.*", vbNormal)

Do While fileName <> ""
    ' 检查当前文件是否带有只读属性
    If Not (GetAttr(targetPath & fileName) And vbReadOnly) Then
        Debug.Print fileName
    End If
    fileName = Dir
Loop

关键说明:

  • 使用GetAttr函数获取文件的属性值,通过按位与运算GetAttr(...) And vbReadOnly判断文件是否为只读:如果结果非零,说明文件带有只读属性,跳过输出;否则正常输出。
  • 注意路径的准确性:C:\Users\通常是用户目录的根目录,里面存放的是各个用户的子文件夹,而非直接的文件,建议确认目标路径是否正确。

内容的提问来源于stack exchange,提问作者TheMountainThatCodes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 16:35:20