ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Why does a find wrongly return true when I search a variable? (https://www.excelbanter.com/excel-programming/405533-why-does-find-wrongly-return-true-when-i-search-variable.html)

StraightEight

Why does a find wrongly return true when I search a variable?
 
Hi,

Can anyone help with me a problem I am having with the find function
in VBA? The following code seems to work...

On Error Resume Next

X = Cells.Find(What:="Name", After:=ActiveCell, LookIn:=xlFormulas,
LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:=False).Activate

MsgBox (X)

If "Name" is present, this will return true, if name is not present,
the message box is blank.

This is fine, but I need to loop through this statement as I am trying
to automate the process of todying up data from an unformatted txt
file to another worksheet. There are not always the same amount of
names in the sheets so it needs to be able to keep searching until
there are no more matches. So my idea was this (obviously I want to do
more than just display a message box when I find the cell, but you get
the idea...)

On Error Resume Next

Dim i
i = 1

Do

X = Cells.Find(What:="Name" & i, After:=ActiveCell,
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:=False).Activate

MsgBox (X)

i = i +1

Loop Until x < "True"

It now seems to continuously return true, even when the value does not
appear on the page. Maybe I am going about this all the wrong way, but
has anyone come up against this sort of need for a loop, and could you
help me with why this won't work, or indeed advise of another way of
what I need to do. If you need me to be any more specific, just let me
know, but I think this covers it.

Cheers
KK

Jim Cone

Why does a find wrongly return true when I search a variable?
 

Review the example code in Help for the Find method.
Note the use of the Set statement and the FindNext method...
'--
With Worksheets(1).Range("a1:a500")
Set c = .Find(2, lookin:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Interior.Pattern = xlPatternGray50
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address < firstAddress
End If
End With
'--

Also, avoid the use of On Error Resume Next.
--
Jim Cone
San Francisco, USA
http://www.realezsites.com/bus/primitivesoftware
(Excel Add-ins - "Find and List" - find multiple items on multiple sheets)




"StraightEight"
wrote in message
Hi,
Can anyone help with me a problem I am having with the find function
in VBA? The following code seems to work...

On Error Resume Next
X = Cells.Find(What:="Name", After:=ActiveCell, LookIn:=xlFormulas,
LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:=False).Activate
MsgBox (X)

If "Name" is present, this will return true, if name is not present,
the message box is blank.
This is fine, but I need to loop through this statement as I am trying
to automate the process of todying up data from an unformatted txt
file to another worksheet. There are not always the same amount of
names in the sheets so it needs to be able to keep searching until
there are no more matches. So my idea was this (obviously I want to do
more than just display a message box when I find the cell, but you get
the idea...)
On Error Resume Next

Dim i
i = 1
Do

X = Cells.Find(What:="Name" & i, After:=ActiveCell,
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:=False).Activate
MsgBox (X)
i = i +1
Loop Until x < "True"

It now seems to continuously return true, even when the value does not
appear on the page. Maybe I am going about this all the wrong way, but
has anyone come up against this sort of need for a loop, and could you
help me with why this won't work, or indeed advise of another way of
what I need to do. If you need me to be any more specific, just let me
know, but I think this covers it.
Cheers
KK

StraightEight

Why does a find wrongly return true when I search a variable?
 
My apologies for the delayed response, this was indeed (after a bit of
tweaking, headaches and frustration!) the correct method for the task
I was needing to do. Many thanks for pointing me where I should have
looked first!

Regards,
Str8

On 4 Feb, 13:37, "Jim Cone" wrote:
Review the example code in Help for the Find method.
Note the use of the Set statement and the FindNext method...
'--
With Worksheets(1).Range("a1:a500")
* * Set c = .Find(2, lookin:=xlValues)
* * If Not c Is Nothing Then
* * * * firstAddress = c.Address
* * * * Do
* * * * * * c.Interior.Pattern = xlPatternGray50
* * * * * * Set c = .FindNext(c)
* * * * Loop While Not c Is Nothing And c.Address < firstAddress
* * End If
End With
'--

Also, avoid the use of On Error Resume Next.
--
Jim Cone
San Francisco, USAhttp://www.realezsites.com/bus/primitivesoftware
(Excel Add-ins - "Find and List" - find multiple items on multiple sheets)



All times are GMT +1. The time now is 12:05 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com