Excel VBA中MkDir执行触发运行时错误'76'求助
解决VBA中MkDir运行时错误'76'(路径未找到)的方案
错误原因拆解
运行时错误'76'本质是指定路径无法被系统识别,你的代码里存在几个核心问题:
MkDir只能创建单级目录,若父目录(比如Class Actions)因意外未创建成功,直接创建子目录会触发报错;- 硬编码
C:\Users\拼接用户目录,在非英文系统(如中文系统的C:\用户\)下会失效; - 若
ClientFolder单元格内容包含文件名非法字符(\/:*?"<>|),会导致生成的路径无效。
修复后的代码方案
改用Scripting.FileSystemObject的CreateFolder方法替代MkDir,它支持直接创建多级目录,同时用Environ("USERPROFILE")获取用户根目录,彻底避免路径拼接错误:
Dim StartingWS As Worksheet Dim ClientFolder As String Dim PreparedDate As String Dim sFolderPath As String Dim SCAFolderPath As String Dim UserProfilePath As String Dim oFSO As Object ' 获取用户根目录,兼容所有Windows系统 UserProfilePath = Environ("USERPROFILE") Set StartingWS = ThisWorkbook.Sheets("Starting Page") Set oFSO = CreateObject("Scripting.FileSystemObject") ' 创建Class Actions主目录 SCAFolderPath = oFSO.BuildPath(UserProfilePath, "Desktop\Class Actions") If Not oFSO.FolderExists(SCAFolderPath) Then oFSO.CreateFolder SCAFolderPath End If ' 处理客户文件夹名称中的非法字符 ClientFolder = StartingWS.Range("I10").Value Dim invalidChars As Variant invalidChars = Array("\", "/", ":", "*", "?", """", "<", ">", "|") Dim char As Variant For Each char In invalidChars ClientFolder = Replace(ClientFolder, char, "") Next char ' 创建客户子目录 PreparedDate = Format(Now, "mm.yyyy") sFolderPath = oFSO.BuildPath(SCAFolderPath, ClientFolder & " - " & PreparedDate) If Not oFSO.FolderExists(sFolderPath) Then oFSO.CreateFolder sFolderPath End If ' 清理对象释放资源 Set oFSO = Nothing Set StartingWS = Nothing
额外优化点
- 复用同一个
FileSystemObject对象,避免重复创建浪费资源; - 用
ThisWorkbook替代ActiveWorkbook,确保操作的是当前代码所在的工作簿; - 增加非法字符过滤逻辑,避免用户输入的内容导致路径失效。
内容的提问来源于stack exchange,提问作者Wallenbees
相关产品推荐
相关产品推荐

