Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Junior Member
 
Posts: 3
Default Range.Find problem

Hello everyone,

First time poster here, looking for some help with the following code:

Code:
        Set dupRange = Range("B5:B33000")
        dupSearch = Cells(r, 2) 

        Set dup = dupRange.Find(dupSearch)
            If dup Is Nothing Then
                Resume Next
            End If
This is part of some more code that I am writing which reads in a list of file names into a column, and then applies some logic to each value in that range to populate another column.

The next part of the code then renames the files with the new column values. The above code is called when the program tries to rename a file to a name that already exists. I then want to identify the other value (filename) and rename them both. However, the above code does not work correctly, i.e. it does not return "dup" when there is a matching value in the range.

I cannot understand why this problem occurs, I've read around a lot on the forums and google, but cannot find anything that helps. I am sure it is me doing something silly.

The range it is checking is populated by a large formula, I'm not sure if this could cause the problem.

Sorry if I am not explaining clearly, I'm pretty new to this.

For reference the entire code is below, I apologise for the messiness, it could probably be done much better.

Code:
Sub List_Files()
Dim MyFolder As String
Dim MyFile As String
Dim a As Integer

'Date Created Object
Dim oFS As Object

MyFolder = (Cells(2, 2).Value2 & "\")
MyFile = Dir(MyFolder & "*.*")
a = 4

Do While MyFile < ""
    a = a + 1
    Cells(a, 1).Value = MyFile
    
    'Date Modified code:
    Set oFS = CreateObject("Scripting.FileSystemObject")
    
    Cells(a, 3).Value = oFS.GetFile(MyFolder & MyFile).DateLastModified
    
    Set oFS = Nothing
    
    'End of Date Modified code
    
    MyFile = Dir
    Cells(3, 5).Value = a - 4
Loop
MsgBox "Success. Files imported: " & (a - 4)

End Sub

Sub ReName_Files()
On Error GoTo ErrHandler:
Dim MyFolder As String
Dim MyFile As String
Dim r As Integer
Dim e As Integer
Dim we As Integer
Dim d As Integer
Dim dupSearch As String
Dim dup As Range
Dim dupRange As Range

'Definition of counters
d = 0
e = 0
we = 0
'Folder locations
MyFolder = (Cells(2, 2).Value2 & "\")
MyFile = Dir(MyFolder & "*.*")
'Counter variable
r = 5

'Loop Through until cells are empty
Do Until IsEmpty(Cells(r, 1)) Or IsEmpty(Cells(r, 2))
    
    ' Short name (usually excluding number) catch
    If Len(Cells(r, 1)) < 14 Then
        e = e + 1
        Cells(12, 5).Value = e
        Cells(e + we + d + 2, 6).Value = Cells(r, 1) & " (Name is too short)"
        Cells(r, 4).Value = Cells(r, 4).Value & "Short Name "
    End If
    
    ' Catch for non pdf files
    If UCase(Cells(r, 12).Value) < "PDF" Then
        we = we + 1
        Cells(9, 5).Value = we
        Cells(e + we + d + 2, 6).Value = Cells(r, 1) & " (Not a PDF)"
        Cells(r, 4).Value = Cells(r, 4).Value & "Non PDF "
        Cells(r, 2).Value = Cells(r, 1).Value
    End If
    
    ' No underscore before last 9 digits in name
    If Cells(r, 14).Value < "_" Then
        e = e + 1
        Cells(12, 5).Value = e
        Cells(e + we + d + 2, 6).Value = Cells(r, 1) & " (Check name)"
        Cells(r, 4).Value = Cells(r, 4).Value & "Incorrect Format "
        Cells(r, 2).Value = Cells(r, 1).Value
        r = r + 1
    Else
' Renaming Code *IMPORTANT*
        Name MyFolder & Cells(r, 1).Value As MyFolder & Cells(r, 2).Value
        r = r + 1
        Cells(6, 5).Value = r - 5
    End If
    
Loop
MsgBox "All old file names in Column 'A' have now been renamed" & vbCr & _
        "to the adjacent new name in column 'B'." & vbCr & "Files renamed: " & (r - 5)
        
ErrHandler:
    If Err.Number = 58 Then
        
        '.Find solution
        d = d + 1
        Set dupRange = Range("B5:B33000")
        dupSearch = Cells(r, 2) '.Value
        MsgBox ("Duplicate Search is: " & dupSearch & " when r is: " & r & "The previous Cell is " & Cells(r - 1, 2))
        
        Set dup = dupRange.Find(dupSearch)
            If dup Is Nothing Then
                MsgBox ("Dup didn't find anything when r is: " & r)
                Resume Next
            Else
                MsgBox ("dup found: " & dup & " when r is: " & r)
            End If

        If Cells(r, 3).Value < dup.Offset(1, 0) Then
            Name MyFolder & Cells(r, 1).Value As MyFolder & "OLD" & d & "_" & Cells(r, 2).Value
            Name MyFolder & dup.Offset(0, -1) As MyFolder & "NEW" & d & "_" & dup
            Cells(15, 5).Value = d
            Cells(e + we + d + 2, 6).Value = "OLD" & d & "_" & Cells(r, 2) & " (Old Duplicate)"
            Cells(r, 4).Value = Cells(r, 4).Value & "Old Duplicate "
            Cells(r, 2).Value = "OLD" & d & "_" & Cells(r, 2).Value
            dup = "NEW" & d & "_" & dup
        Else
            Name MyFolder & Cells(r, 1).Value As MyFolder & "NEW" & d & "_" & Cells(r, 2).Value
            Name MyFolder & dup.Offset(0, -1) As MyFolder & "OLD" & d & "_" & dup
            Cells(15, 5).Value = d
            Cells(e + we + d + 2, 6).Value = "NEW" & d & "_" & Cells(r, 2) & " (New Duplicate)"
            Cells(r, 4).Value = Cells(r, 4).Value & "New Duplicate "
            Cells(r, 2).Value = "NEW" & d & "_" & Cells(r, 2).Value
            dup = "OLD" & d & "_" & dup
        End If
        
        Set dup = Nothing

        Resume Next
    End If
    
MsgBox Err.Description
    
End Sub
  #2   Report Post  
Junior Member
 
Posts: 3
Default

I am still having issues with this problem, if there is an alternative method of checking the range for a duplicate value I would be happy to use that.

Thank you for your time,

Tristan
  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 173
Default Range.Find problem

Hello,

Ozgrid.com has a great find function (http://www.ozgrid.com/forum/showthread.php?t=27240) to return a range of cells using the Find function. You could also adapt that function to instead return a boolean if you only care about whether a duplicate exists (and don't care where the duplicate resides on the sheet). Take a look at the thread above for the Range version. I have adapted the function to return a boolean below. For example, entering:

Find_Dup(Cells(r, 2), Range("B5:B33000"))

would return TRUE if a duplicate value exists and FALSE otherwise. Here is that code:

Function Find_Dup(Find_Item As Variant, _
Search_Range As Range, _
Optional LookIn As Variant, _
Optional LookAt As Variant, _
Optional MatchCase As Boolean) As Boolean

'Adapted from:
'http://www.ozgrid.com/forum/showthread.php?t=27240

Find_Dup = False

Dim c As Range
If IsMissing(LookIn) Then LookIn = xlValues 'xlFormulas
If IsMissing(LookAt) Then LookAt = xlPart 'xlWhole
If IsMissing(MatchCase) Then MatchCase = False

With Search_Range
Set c = .Find( _
What:=Find_Item, _
LookIn:=LookIn, _
LookAt:=LookAt, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=MatchCase, _
SearchFormat:=False)
If Not c Is Nothing Then
Find_Dup = True
End If
End With

End Function
  #4   Report Post  
Junior Member
 
Posts: 3
Default

I have now solved the issue.

For those interested the new code was:

Code:
Dim dup As Object
        Set dupRange = Range("B5:B" & r - 1)
        dupSearch = Cells(r, 2)
            
        dupRange.Select
    
        Set dup = Selection.Find(What:=dupSearch, After:=ActiveCell, LookIn:=xlValues, _
            LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False)
            If dup Is Nothing Then
                Resume Next
            End If
Quote:
Originally Posted by tris55 View Post
I am still having issues with this problem, if there is an alternative method of checking the range for a duplicate value I would be happy to use that.

Thank you for your time,

Tristan
Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Find function for a Range failing in excel 2003 and giving subscriptout of range error 9 problem but works fine in excel 2000 Prince Excel Programming 5 February 10th 09 05:47 PM
Find in Named Range problem (2nd Try) G.R. New Users to Excel 2 February 27th 08 08:17 PM
INTRICATE PROBLEM- How to find multiple text,excluding "H", in a multiple range of cells, then replacing 0 with another number in another cell Tourcat Excel Worksheet Functions 1 February 8th 05 06:26 PM
range.find method called into a VBA function (problem) Eros Pedrini Excel Programming 5 November 17th 04 12:34 PM


All times are GMT +1. The time now is 10:25 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"