need to delete files

D

Dan

Hi,
I need to delete some files in a specific folder.
Some files are resaved with brackects and I need to keep the file with the
highest number in the brackect and delete the one that existed before.

For example If I have the following files in folder "Myfolder"

Myfile1.xls
Myfile2.xls
Myfile3.xls
Myfile2(2).xls
Myfile3(2).xls
Myfile3(3).xls

I should end up with
Myfile1.xls
Myfile2(2).xls
Myfile3(3).xls


Any idea?
Dan
 
B

Bernie Deitrick

Dan,

Try the macro below on a COPY of your folder - just to make sure that it works the way you expect.

Put the macro into a standard codemodule of an otherwise blank workbook, and save that file the
folder with the files to delete - in this case, the copy of MyFolder. Then run the macro "FindKill".

HTH,
Bernie
MS Excel MVP


Sub FindKill()
Dim i As Integer
Dim j As Integer
Dim sName As String
Dim myFind As Integer
Dim myIndex As Integer
Dim sName2 As String
Dim myFind2 As Integer
Dim myIndex2 As Integer
Dim Killed() As Boolean


With Application.FileSearch
.NewSearch
.LookIn = ThisWorkbook.Path
.SearchSubFolders = False
.FileType = msoFileTypeExcelWorkbooks
If .Execute() > 0 Then
MsgBox "There were " & .FoundFiles.Count & " file(s) found."
ReDim Killed(1 To .FoundFiles.Count)
For i = 1 To .FoundFiles.Count
Killed(i) = False
Next i
For i = 1 To .FoundFiles.Count - 1
myFind = InStr(1, .FoundFiles(i), "(")
If myFind = 0 Then
sName = Left(.FoundFiles(i), Len(.FoundFiles(i)) - 4)
myIndex = 0
Else
sName = Left(.FoundFiles(i), myFind - 1)
myIndex = Mid(.FoundFiles(i), myFind + 1, _
InStr(myFind, .FoundFiles(i), ")") - myFind - 1)
End If

For j = i + 1 To .FoundFiles.Count
myFind2 = InStr(1, .FoundFiles(j), "(")
If myFind2 = 0 Then
sName2 = Left(.FoundFiles(j), Len(.FoundFiles(j)) - 4)
myIndex2 = 0
Else
sName2 = Left(.FoundFiles(j), myFind2 - 1)
myIndex2 = Mid(.FoundFiles(j), myFind2 + 1, _
InStr(myFind2, .FoundFiles(j), ")") - myFind2 - 1)
End If

If sName = sName2 Then
If myIndex < myIndex2 Then
If Not Killed(i) Then
'Kill .FoundFiles(i)
Killed(i) = True
End If
Else
If Not Killed(j) Then
'Kill .FoundFiles(j)
Killed(j) = True
End If
End If
End If
Next j
Next i
Else
MsgBox "There were no files found."
End If

For i = 1 To .FoundFiles.Count
If Killed(i) Then Kill .FoundFiles(i)
Next i

End With

End Sub
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top