Avatar of David Phelops
David PhelopsFlag for United Kingdom of Great Britain and Northern Ireland

asked on 

Error using "Cells.Find(What:="Vendor Fare".....)" VBA Excel

Macro designed to search through a worksheet, find the header row and the "Vendor Fare" column. This is because the column arrangement and header position are a movable feast from time-to-time  Do not want it hard-coded.

The following Code gives a 91 Error, "Object Variable or With Block variable not set" at the line:
colFare = Cells.Find(what:="Vendor Fare", after:=Cells(1, 1), lookat:=xlWhole).Column

Open in new window


Whole routine:
Option Explicit

Sub FindFare()
'This routine loops through a column of values and counts the number of errors in the column

Dim rowHeader As Integer
Dim colFare As Integer
Dim rowActive As Integer
Dim ErrCount As Integer

rowHeader = Cells.Find(what:="Client_Code", after:=Cells(1, 1), lookat:=xlWhole).Row
'colFare = 13
colFare = Cells.Find(what:="Vendor Fare", after:=Cells(1, 1), lookat:=xlWhole).Column
rowActive = rowHeader

'Count Errors
ErrCount = 0
'Loop through data
Do Until Cells(rowActive, colFare) = ""
    If Cells(rowActive, colFare) Like "Err?*" Then
        ErrCount = ErrCount + 1
    End If
    rowActive = rowActive + 1
Loop
Debug.Print ErrCount
End Sub

Open in new window

I am sure there is a simple explanation, but I am blind to it... Can anyone enlighten me, please?
Please see attached file.
Thank you
David
RunTime-91-error-with-FIND.xlsm
Microsoft ExcelVisual Basic Classic

Avatar of undefined
Last Comment
David Phelops
Avatar of Phillip Burton
Phillip Burton

It gives Error 91 if the "Vendor Fare" does not exist in that sheet.

That's because the Find returns Nothing, and Nothing.Column doesn't make sense.
SOLUTION
Avatar of Norie
Norie

Blurred text
THIS SOLUTION IS ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
Avatar of David Phelops
David Phelops
Flag of United Kingdom of Great Britain and Northern Ireland image

ASKER

But why does the Find return nothing? Column 13 has "Vendor Fare"  as the header
Thanks
SOLUTION
THIS SOLUTION IS ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
SOLUTION
Avatar of Jacques Geday
Jacques Geday
Flag of Canada image

Blurred text
THIS SOLUTION IS ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
Avatar of Jacques Geday
Jacques Geday
Flag of Canada image

ok GOT Your error !!!
when you get the error check what is the string that you have it may be something like:
' Vendor  Fare' (note between Vendor and Fare you have 2 spaces and not 1. reason why you get this error !!!

If you need a fix let me know.
gowflow
Avatar of Jacques Geday
Jacques Geday
Flag of Canada image

This is your fix the system will warn you if the header is not found and will exit the routine.

Sub FindFare()
'This routine loops through a column of values and counts the number of errors in the column

Dim rowHeader As Integer
Dim colFare As Integer
Dim rowActive As Integer
Dim ErrCount As Integer
Dim cCell As Range

'-------
'Idenitfy Header Row and Relevant Column
Set cCell = Cells.Find(what:="Client_Code", after:=Cells(1, 1), lookat:=xlWhole)
If Not cCell Is Nothing Then
    rowHeader = cCell.Row
Else
    MsgBox ("Please check your header it should be 'Client_Code' routine will exit")
    Exit Sub
End If
'colFare = 13
Set cCell = Cells.Find(what:="Vendor Fare", after:=Cells(1, 1), lookat:=xlWhole)
If Not cCell Is Nothing Then
    colFare = cCell.Column
Else
    MsgBox ("Please check your header it should be 'Vendor Fare' routine will exit")
    Exit Sub
End If
'Set active row for Loop
rowActive = rowHeader
'-------
'Count Errors
ErrCount = 0
'Loop through data
Do Until Cells(rowActive, colFare) = ""
    If Cells(rowActive, colFare) Like "Err?*" Then
        ErrCount = ErrCount + 1
    End If
    rowActive = rowActive + 1
Loop
'-------
'Print the error count
Debug.Print ErrCount

End Sub

Open in new window


pls chk the attached file.
gowflow
RunTime-91-error-with-FIND-V01.xlsm
ASKER CERTIFIED SOLUTION
Avatar of David Phelops
David Phelops
Flag of United Kingdom of Great Britain and Northern Ireland image

Blurred text
THIS SOLUTION IS ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
Avatar of Jacques Geday
Jacques Geday
Flag of Canada image

Sorry but seems you missed something !!!
Did you see my post ????

Reason why you had an Error 91 is simply because it did not find the occurrence 'Vendor Fare' and exacly like this. The version I posted will prevent this error. You could have had this error simply because inadvertently a space was either placed between the 2 words or at the beginning.

Did you check my solution ??
gowflow
Avatar of David Phelops
David Phelops
Flag of United Kingdom of Great Britain and Northern Ireland image

ASKER

Yes, indeed I checked your post; in my original file, there was only one space between "Vendor" and "Fare".  I tried it several ways, both copying and pasting the actual text into the vba routine; I tried typing it in; I tried copying and pasting from the vba routine to the spreadsheet, so as to ensure that the text being searched  was available.  I tried, in the worksheet, itself, to compare the two strings with "=Vendor Fare = X6" .... and so on.  Apologies for not commenting on your post.

Cheers
David
Avatar of Jacques Geday
Jacques Geday
Flag of Canada image

ok fine what you tried. But the way your routine is you may run into this situation (error 91) in the future.
UNLESS
if you change the code for the one I posted.

Your choice.
gowflow
Avatar of David Phelops
David Phelops
Flag of United Kingdom of Great Britain and Northern Ireland image

ASKER

I understand completely that I need error checking code there and I appreciate what you have written.  My puzzlement was that I could see no reason for the error in the first place. In fact, the error itself was an error!

I thought i was missing something obvious, but the machine was  playing its own game.

Again, my apologies for not giving your comment more credit.
David
Avatar of Jacques Geday
Jacques Geday
Flag of Canada image

Still your not getting it !!!!

Do not care about the points.

the code the way it is will generate error if for some reason 'Vendor  Fare' or 'Client_Code' are not strictly written like this. and to prevent that is the code I posted. you should never have a statement like you have:

rowHeader = Cells.Find(what:="Client_Code", after:=Cells(1, 1), lookat:=xlWhole).Row
as this has no escape but possibly produce an error if the searched string is not found.

hope above clarifies.
gowlfow
Avatar of David Phelops
David Phelops
Flag of United Kingdom of Great Britain and Northern Ireland image

ASKER

Ok, I thought I understood what you are saying.

As I understand it you are saying that my routine is a dead end and will produce an error if the exact form of my search is not present. I agree with that.

The thing is, your code is great and will return a message to the user.
The problem, as I see it, is that if the machine is mistakenly causing an error, then it does not matter how many messages are generated, if the solution is not a solution.  Does that make sense?

i'm trying to understand what you are telling me.
Thanks for taking the time to help.
Avatar of Jacques Geday
Jacques Geday
Flag of Canada image


The problem, as I see it, is that if the machine is mistakenly causing an error, then it does not matter how many messages are generated, if the solution is not a solution.  Does that make sense?

What do you mean by that ??
The data get changed all byitself without human intervention ? or you mean to say this data is populated by some automated routine that sometimes does not populate exactly this same strings ??

there is a solution for your problem but first you need to tell me if yes you agree there is a problem or no it was just a mishap and you needed to reboot your machine?

gowflow
Avatar of David Phelops
David Phelops
Flag of United Kingdom of Great Britain and Northern Ireland image

ASKER

gowflow.... I think that it is a problem with the machine, not the code, or the data.

It was a mishap and worked when I rebooted the machine.


I rebooted the pc and the instruction worked, as it should.  The data is correct and the code is correctly reflecting that data.

I now have a different problem, which seems to underline my problem.

Overnight, my pc had automatic MS updates installed.  It shut down my pc and retarted it.  Now, none of my activex controls are working at all and I am unable to insert new activex objects.  This is most disturbing.  I am awaiting my IT manager to roll back my pc to pre-update settings.

Thanks again for your efforts.
Avatar of Jacques Geday
Jacques Geday
Flag of Canada image

Uninstall Office and re-install.
gowflow
Avatar of David Phelops
David Phelops
Flag of United Kingdom of Great Britain and Northern Ireland image

ASKER

That's next on the agenda. Thanks!
Avatar of David Phelops
David Phelops
Flag of United Kingdom of Great Britain and Northern Ireland image

ASKER

All I can say is D'oh! I shall never comprehend the myriad ways that computers find to stop you in your tracks
Visual Basic Classic
Visual Basic Classic

Visual Basic is Microsoft’s event-driven programming language and integrated development environment (IDE) for its Component Object Model (COM) programming model. It is relatively easy to learn and use because of its graphical development features and BASIC heritage. It has been replaced with VB.NET, and is very similar to VBA (Visual Basic for Applications), the programming language for the Microsoft Office product line.

165K
Questions
--
Followers
--
Top Experts
Get a personalized solution from industry experts
Ask the experts
Read over 600 more reviews

TRUSTED BY

IBM logoIntel logoMicrosoft logoUbisoft logoSAP logo
Qualcomm logoCitrix Systems logoWorkday logoErnst & Young logo
High performer badgeUsers love us badge
LinkedIn logoFacebook logoX logoInstagram logoTikTok logoYouTube logo