Использование 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
Но когда я переименую файл2 и нажму «ОК»', Я получаю сообщение об ошибке:
Run-time error '53': File not found
и затем вход в отладчик показывает, что значение file2.name равно <File not found>
.
Я не уверен, что здесь происходит-- ссылка на объект теряется после переименования файла?Есть ли более простой способ переименовать пользователя из диалогового окна, в котором отображаются все файлы в целевом каталоге?Я также хотел бы предоставить новое имя по умолчанию для файла, но не могу понять, как бы я это сделал, используя этот метод.
edit: на данный момент я пытаюсь создать пользовательскую формусо списком, который заполняется с соответствующими именами файлов, и полем ввода со значением по умолчанию для ввода нового имени.Тем не менее, вы не знаете, как удерживать ссылку на объект после переименования файла.