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の名前を変更して[OK]をクリックすると、エラーが発生します。
Run-time error '53': File not found
次にデバッガーに入ると、file2.nameの値が。であることがわかります<File not found>
。
ここで何が起こっているのかわかりません。ファイルの名前が変更されると、オブジェクト参照が失われますか?ターゲットディレクトリ内のすべてのファイルを表示するダイアログからユーザーに名前を変更させる簡単な方法はありますか?また、ファイルのデフォルトの新しい名前を指定したいのですが、この方法を使用してそれを行う方法がわかりません。
編集:この時点で、関連するファイル名が入力されるリストボックスと、新しい名前を入力するためのデフォルト値を含む入力ボックスを使用してユーザーフォームを作成することを検討しています。ただし、ファイルの名前が変更された後、オブジェクト参照を保持する方法はまだわかりません。