Access VBA使用MkDir创建桌面文件夹时报Path not found(错误76)求助
报错原因及修复方案
核心问题排查
你提供的代码存在几个明显的逻辑、语法问题,是触发运行时错误76的主要原因:
- 路径混用:前半段逻辑判断的是
C:\Users\ndemos\Documents\Test\路径,后半段实际创建文件夹用的是C:\Users\ndemos\Desktop\Test\路径,如果你只确认了其中一个父路径存在,另一个路径不存在时自然会报错 - 变量使用不规范:定义了
strTimeDateTeam变量但从未赋值,反而直接使用了未声明的strStudentID,如果模块开启了Option Explicit会直接触发变量未定义错误,值为空时会导致拼接的路径非法 - 未处理非法字符:如果
TimeDateTeam控件的值包含Windows文件名不允许的字符(/ \ : * ? " < > |),也会导致路径识别失败 - 冗余逻辑冲突:前面用原生
Dir+MkDir判断创建目录,后面又重复用FSO做了一遍相同逻辑,两者路径不一致的情况下会出现逻辑冲突
修复后可运行代码
' 建议放在模块顶部,强制变量声明,提前捕捉低级错误 Option Explicit Private Sub Create_File_Folder_Click() ' 统一配置父路径,只需要修改这里即可切换存储位置 Const strParent As String = "C:\Users\ndemos\Documents\Test\" Dim strFolderName As String Dim strFullPath As String Dim fso As Object ' 先判断表单字段是否为空 If IsNull(Me.TimeDateTeam.Value) Or Trim(Me.TimeDateTeam.Value) = "" Then MsgBox "条目标识不能为空,请先填写TimeDateTeam字段", vbCritical, "参数错误" Exit Sub End If strFolderName = Trim(Me.TimeDateTeam.Value) ' 过滤Windows文件名不允许的非法字符 strFolderName = Replace(strFolderName, "/", "") strFolderName = Replace(strFolderName, "\", "") strFolderName = Replace(strFolderName, ":", "") strFolderName = Replace(strFolderName, "*", "") strFolderName = Replace(strFolderName, "?", "") strFolderName = Replace(strFolderName, """", "") strFolderName = Replace(strFolderName, "<", "") strFolderName = Replace(strFolderName, ">", "") strFolderName = Replace(strFolderName, "|", "") ' 拼接完整路径,也可以用fso.BuildPath自动处理路径分隔符 strFullPath = strParent & strFolderName Set fso = CreateObject("Scripting.FileSystemObject") ' 先判断父路径是否存在,避免父路径丢失导致的报错 If Not fso.FolderExists(strParent) Then MsgBox "父路径" & strParent & "不存在,请先手动创建或修改路径配置", vbCritical, "路径错误" Set fso = Nothing Exit Sub End If ' 判断目标文件夹是否存在 If fso.FolderExists(strFullPath) Then MsgBox "指定文件夹已存在,将直接打开", vbInformation, "提示" Else fso.CreateFolder strFullPath MsgBox "文件夹创建成功", vbInformation, "提示" End If ' 路径加双引号避免名称含空格时识别失败 Shell "explorer.exe """ & strFullPath & """", vbNormalFocus ' 释放对象 Set fso = Nothing End Sub
额外优化建议
- 如果需要适配不同用户设备,不要写死用户目录路径,可以用
Environ("USERPROFILE")动态获取用户目录,比如父路径可以写成Environ("USERPROFILE") & "\Documents\Test\",换用户登录也不需要改代码 - 如果需要创建多级嵌套目录,不要用原生
MkDir,只能用FSO的CreateFolder配合递归逻辑,或者直接调用系统API创建层级路径 - 路径拼接可以直接用
fso.BuildPath(strParent, strFolderName)自动处理路径分隔符,避免多写或者漏写反斜杠的问题
内容的提问来源于stack exchange,提问作者ndemo
相关产品推荐
相关产品推荐

