使用 VBA。我的脚本将文件移动到目录中。如果该文件名已存在于目标目录中,我希望在执行移动之前提示用户重命名源文件(正在移动的文件)。
因为我希望用户知道目录中已经有哪些其他文件(所以他们不会选择已经存在的另一个文件的名称),我的想法是打开一个列出目录内容的 FileDialog 框,以便用户可以使用 FileDialog 框的本机重命名功能。然后我将循环该 FileDialog,直到源文件和目标文件名不再相同。
这是一些示例代码:
Sub testMoveFile()
Dim fso As FileSystemObject
Dim file1 As File
Dim file2 As File
Dim dialog As FileDialog
Set fso = New FileSystemObject
fso.CreateFolder "c:\dir1"
fso.CreateFolder "c:\dir2"
fso.CreateTextFile "c:\dir1\test.txt"
fso.CreateTextFile "c:\dir2\test.txt"
Set file1 = fso.GetFile("c:\dir1\test.txt")
Set file2 = fso.GetFile("c:\dir2\test.txt")
Set dialog = Application.FileDialog(msoFileDialogOpen)
While file1.Name = file2.Name
dialog.InitialFileName = fso.GetParentFolderName(file2.Path)
If dialog.Show = 0 Then
Exit Sub
End If
Wend
file1.Move "c:\dir2\" & file1.Name
End Sub
但是当我重命名 file2 并单击“确定”时,出现错误:
Run-time error '53': File not found
然后进入调试器显示 file2.name 的值为<File not found>
.
我不确定这里发生了什么——文件重命名后对象引用是否丢失?有没有更简单的方法让用户从显示目标目录中所有文件的对话框中重命名?我还想为文件提供一个默认的新名称,但我看不出如何使用这种方法来做到这一点。
编辑:此时我正在考虑制作一个用户窗体,其中包含一个列表框,该列表框填充了相关文件名,以及一个带有用于输入新名称的默认值的输入框。不过,仍然不确定如何在文件重命名后保留对象引用。