Excel VBA宏重命名含土耳其特殊字符文件时报Run-time error 53错误
故障原因
VBA内置的Name重命名语句采用系统默认ANSI编码处理路径,仅能识别当前系统区域对应字符集内的字符,你遇到的土耳其特殊字符不属于当前ANSI编码的支持范围,单元格内存储的Unicode文件名传入Name语句时会被自动转码为乱码,因此触发文件找不到的报错。
Excel的「自文件夹导入」功能原生支持Unicode字符解析,所以导入阶段可以正常识别带特殊字符的文件名。
修复方案
将原生Name语句替换为支持Unicode的FileSystemObject组件的移动文件方法即可,无需改动原有业务逻辑,修改后完整代码如下:
Sub RenameAllFiles() ' 声明FileSystemObject对象,后期绑定无需额外引用库 Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") With Application.FileDialog(msoFileDialogFolderPicker) .AllowMultiSelect = False If .Show = -1 Then selectDirectory = .SelectedItems(1) dDirectory = selectDirectory & Application.PathSeparator curRow = 2 dFile = Cells(curRow, "G") Do Until dFile = "" sFile = Cells(curRow, "A") sDirectory = Cells(curRow, "H") ' 替换原有Name语句,用FSO的MoveFile方法支持Unicode字符 fso.MoveFile sDirectory & sFile, dDirectory & dFile curRow = curRow + 1 dFile = Cells(curRow, "G") Loop End If End With ' 释放对象 Set fso = Nothing End Sub
注意事项
如果重命名后的新文件名也包含土耳其特殊字符,该代码同样可以正常支持,无需额外调整。
内容的提问来源于stack exchange,提问作者Jupp123
相关产品推荐
相关产品推荐

