Excel VBA赢得';t从棒加载文件,但将从计算机加载。为什么?

Excel VBA赢得';t从棒加载文件,但将从计算机加载。为什么?,excel,vba,Excel,Vba,我正在尝试制作一个VBA excel宏,它将加载.mp3文件并重命名它们。当我从计算机上的文件夹加载文件时,它工作正常,但我遇到以下错误: Runtime error '53': File not found 这就是我的代码工作时的状态: fileDir = "C:\MyMusic" oldFileName = "test.mp3" newFileName = "test1.mp3" Name fileDir & "\" & oldFileName As fileDir &am

我正在尝试制作一个VBA excel宏,它将加载.mp3文件并重命名它们。当我从计算机上的文件夹加载文件时,它工作正常,但我遇到以下错误:

Runtime error '53':
File not found
这就是我的代码工作时的状态:

fileDir = "C:\MyMusic"
oldFileName = "test.mp3"
newFileName = "test1.mp3"
Name fileDir & "\" & oldFileName As fileDir & "\" & newFileName
这就是我的代码在不工作时的状态(使用闪存驱动器e):


我试图删除&“\”&,但仍然不起作用。有什么想法吗?谢谢

问题很可能根源于文件/Dir权限。以编程方式将文件重命名(或复制)到不在“您的域”中的任何文件夹(即MyDocumentsMyMusic等)。需要特定的访问权限。首先,尝试在任何其他目录(例如“C”驱动器)上执行此操作,并查看其工作原理。并且,确保文件路径中没有语法错误(看起来您的两条语句在这方面有所不同)。希望这会有所帮助,

如果您认为可能存在文件夹权限问题,请尝试直接在Windows资源管理器中编辑文件名。你应该能够很快判断你是否有访问权限

每当我在VBA中以编程方式处理文件时,我都会使用Microsoft脚本运行时。在VBA界面中,点击工具菜单,引用…,然后选中“[x]Microsoft脚本运行时”旁边的框

您可以使用以下方法测试对该文件夹的访问:

Dim FSO as Scripting.FileSystemObject
Dim SourceFolder as Scripting.Folder
Dim CurFile as Scripting.File
Set SourceFolder = FSO.GetFolder("E:\")
For Each CurFile in SourceFolder.Files
    MsgBox CurFile.Name
Next CurFile

如果您能够使用消息框显示文件名,那么您还应该能够通过使用CurFile.Name=“MyNewName.mp3”分配文件名来更改文件名。

这可能是一个非常有用的问题,但是我想,这个问题需要扩展。你能在棒上查看和写入文件吗?你是怎么做的?您正在运行的VB程序的权限是什么。它能读写到棒上吗?因为我是VBA新手,我不知道你需要使用VBA读写到棒上的权限。我怎么知道?很确定这是因为你要通过一个端口,而不是一个实际的驱动器。通信处理方式不同。你需要通过端口与USB驱动器“对话”,而不是像它是一个实际的驱动器。你的两个代码块是不可比较的-第一个代码块在
fileDir
上没有尾随的反斜杠,第二个代码块是:更改它,然后如果它仍然不起作用,则编辑你的帖子以显示修改后的版本。是的,就像@TimWilliams说的。。。第一个扩展为:Name“C:\MyMusic\test.mp3”作为“C:\MyMusic\Test1.mp3”,而第二个扩展为:Name“E:\\test.mp3”作为“E:\\Test1.mp3”
Dim FSO as Scripting.FileSystemObject
Dim SourceFolder as Scripting.Folder
Dim CurFile as Scripting.File
Set SourceFolder = FSO.GetFolder("E:\")
For Each CurFile in SourceFolder.Files
    MsgBox CurFile.Name
Next CurFile