Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 179
Default The Find Method

Brad

The After argument takes a range argument, so

Set rngBottomZero = rngRacf.Find(
What:="0000", _
After:=Worksheets("Inquries").Range(strMaxRange), _
LookIn:=xlValues, _
SearchDirection:=xlPrevious)


should work.

--
Dick Kusleika
MVP - Excel
www.dicks-clicks.com
Post all replies to the newsgroup.

"Brad" wrote in message
...
Good afternoon,

I'm completely stumped here. What I need is to find a
certain value, by searching from the bottom of the
spreadsheet in a single column. Then take that cell
location of where the value is found, and cut (from cut
and paste) columns A - G and paste them in another
worksheet that I created.


Set rngRacf = Worksheets("Inquiries").Range("C2:" &
strMaxRange)
Set rngBottomZero = rngRacf.Find(
What:="0000", _
After:=strMaxRange, _
LookIn:=xlValues, _
SearchDirection:=xlPrevious)

strMaxRange is the second to last cell value that has
data. Assuming that the "After" designation will begin
the search in the very last cell, searching backwards for
an instance of the value "0000" that I'm searching for.

I want rngBottomZero to have the cell location where the
criteria is found. If I just use a variant "BottomZero"
the data that I get back is just the "0000" value it
searched for. In this particular code I receive "Unable
to get the Find property of the range class." Which is
even more confusing to me because I thought Find was a
method, not a property. But I'm not sure how to designate
it otherwise.

I'm numb from troubleshooting and I'm getting nowhere.
Any help would be greatly appreciated.

-Brad



  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 7
Default The Find Method

Thank you for the help Dick. However, after I modified my
code to include your addition, I received: "Subscript out
of range".

Debugging it, I find that "strMaxRange" is "C4116" out of
4117 rows of data in the range specified. I even changed
the strMaxRange variable to a literal "C100" to see what
would happen, and I got the same error: "Subscript out of
Range". I can't make any sense of the help file's
description of the error message, which was:

<<<<<<
Subscript out of range (Error 9)


Elements of arrays and members of collections can only be
accessed within their defined ranges. This error has the
following causes and solutions:

You referenced a nonexistent array element.
The subscript may be larger or smaller than the range of
possible subscripts, or the array may not have dimensions
assigned at this point in the application. Check the
declaration of the array to verify its upper and lower
bounds. Use the UBound and LBound functions to condition
array accesses if you're working with arrays that are
redimensioned. If the index is specified as a variable,
check the spelling of the variable name.

You declared an array but didn't specify the number of
elements. For example, the following code causes this
error:
Dim MyArray() As Integer
MyArray(8) = 234 ' Causes Error 9.
Visual Basic doesn't implicitly dimension unspecified
array ranges as 0 - 10. Instead, you must use Dim or ReDim
to specify explicitly the number of elements in an array.

You referenced a nonexistent collection member.
Try using the For Each...Next construct instead of
specifying index elements.

You used a shorthand form of subscript that implicitly
specified an invalid element.
For example, when you use the ! operator with a
collection, the ! implicitly specifies a key. For example,
object!keyname.value is equivalent to object.item
(keyname).value. In this case, an error is generated if
keyname represents an invalid key in the collection. To
fix the error, use a valid key name or index for the
collection.

The actual range I'm trying the find in is exactly one
cell larger than the subscript I'm using, and herein lies
the source of my confusion.

Also, after re-reading the description of the
parameter "After" for the 50th time I see that it says "If
you don't specify this argument, the search starts after
the cell in the upper-left corner of the range." And
since I'm saying "xlPrevious" in the direction, it should
automatically start at the bottom and this entire logic is
a waste of time and resources. And when I do that, it
doesn't give me an error, and it just returns "0000" to
rngBottomZero instead of the actual Cell address. Even
though the return of the method, according to the help
file, is "Finds specific information in a range, and
returns a Range object that represents the first cell
where that information is found". Finally, when I
add ".Address" to the end of it, in an attempt to get a
cell location instead of a value, it gives me an "Object
Required" error.

Any recommendations for corrections or other method
implementation are very welcome at this time.

Thanks for reading my spam and your patience with a VBA
newbie.

-Brad

-----Original Message-----
Brad

The After argument takes a range argument, so

Set rngBottomZero = rngRacf.Find(
What:="0000", _
After:=Worksheets("Inquries").Range

(strMaxRange), _
LookIn:=xlValues, _
SearchDirection:=xlPrevious)


should work.

--
Dick Kusleika
MVP - Excel
www.dicks-clicks.com
Post all replies to the newsgroup.

"Brad" wrote in message
...
Good afternoon,

I'm completely stumped here. What I need is to find a
certain value, by searching from the bottom of the
spreadsheet in a single column. Then take that cell
location of where the value is found, and cut (from cut
and paste) columns A - G and paste them in another
worksheet that I created.


Set rngRacf = Worksheets("Inquiries").Range("C2:" &
strMaxRange)
Set rngBottomZero = rngRacf.Find(
What:="0000", _
After:=strMaxRange, _
LookIn:=xlValues, _
SearchDirection:=xlPrevious)

strMaxRange is the second to last cell value that has
data. Assuming that the "After" designation will begin
the search in the very last cell, searching backwards

for
an instance of the value "0000" that I'm searching for.

I want rngBottomZero to have the cell location where the
criteria is found. If I just use a variant "BottomZero"
the data that I get back is just the "0000" value it
searched for. In this particular code I receive "Unable
to get the Find property of the range class." Which is
even more confusing to me because I thought Find was a
method, not a property. But I'm not sure how to

designate
it otherwise.

I'm numb from troubleshooting and I'm getting nowhere.
Any help would be greatly appreciated.

-Brad



.

  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 179
Default The Find Method

Brad

Look at Dave Petersons response. You're correct (and he's one step ahead of
us) that you don't need to specify after because the xlPrevious is doing
what you want anyway. Dave does specify an After argument, but as you said
the top left is the default. There may be an advantage to specifying it,
but I'm not sure.

If you want to understand the Subscript error, post the code that gives you
the error. Subscript errors are usually pretty easy to troubleshoot.
Screwing up a range reference (syntactically) generally gives you an
"Application defined error", so the likely culprit is in your
Worksheets(...), such as misspelling "Inquiries."

I'm not sure what's causing the Object Required error, but here's a little
info on Ranges: You are setting a variable to a range with the Set
statement. Presumably you have Dimmed the variable as Range. That variable
is an object variable. Object variables are set using the Set statement
while scalar variables (String, Long, Boolean) are set without the Set
statement. A statement like this

Set rngFound = rngLook.Find(What:...)

sets the object variable rngFound to a particular range (or to Nothing).
This variable now points to the range, it doesn't contain the cell address
or the value or anything like that, it just points to that range. Once set,
you can now retrieve any property of that range (like cell address or
value). Maybe a couple of examples would help

Dim rngFound as Range

Set rngFound.Address = rngLook.Find(What:...)

This won't work for a variety of reasons. First the Address property is
read only - you don't get to set a range's address only retrieve it. Even
if it wasn't read only, you wouldn't use the Set statement to assign a
non-object variable. If you wanted to retrieve the address, you could do it
like this

Dim strFound as String

strFound = rng.Look.Find(What:...).Address

The Address property returns a string so we assign it to a string variable
and don't use the Set statement. The Find method returns a range object, so
we can use the Address property directly on the Find method. The problem
with this method is that if nothing is found, you will get an error.

In Dave's example, he "Sets" the Find method to a Range, then tests the
Range against "Is Nothing" before accessing any properties of the Range.
Nothing is a keyword in VBA that means that the object variable doesn't
point to an object. If the result of the Find method returns Nothing, then
you can have a nice message that says nothing was found or do something else
in the code. If the Find method returns Not Nothing (points to an actual
range) then you can access the properties and methods of the range object
depending on what you intend to do in the code. Dave accesses the Row
property of the range.

Sorry for the long post. Post back if you need further clarification.

--
Dick Kusleika
MVP - Excel
www.dicks-clicks.com
Post all replies to the newsgroup.

"Brad" wrote in message
...
Thank you for the help Dick. However, after I modified my
code to include your addition, I received: "Subscript out
of range".

Debugging it, I find that "strMaxRange" is "C4116" out of
4117 rows of data in the range specified. I even changed
the strMaxRange variable to a literal "C100" to see what
would happen, and I got the same error: "Subscript out of
Range". I can't make any sense of the help file's
description of the error message, which was:

<<<<<<
Subscript out of range (Error 9)


Elements of arrays and members of collections can only be
accessed within their defined ranges. This error has the
following causes and solutions:

You referenced a nonexistent array element.
The subscript may be larger or smaller than the range of
possible subscripts, or the array may not have dimensions
assigned at this point in the application. Check the
declaration of the array to verify its upper and lower
bounds. Use the UBound and LBound functions to condition
array accesses if you're working with arrays that are
redimensioned. If the index is specified as a variable,
check the spelling of the variable name.

You declared an array but didn't specify the number of
elements. For example, the following code causes this
error:
Dim MyArray() As Integer
MyArray(8) = 234 ' Causes Error 9.
Visual Basic doesn't implicitly dimension unspecified
array ranges as 0 - 10. Instead, you must use Dim or ReDim
to specify explicitly the number of elements in an array.

You referenced a nonexistent collection member.
Try using the For Each...Next construct instead of
specifying index elements.

You used a shorthand form of subscript that implicitly
specified an invalid element.
For example, when you use the ! operator with a
collection, the ! implicitly specifies a key. For example,
object!keyname.value is equivalent to object.item
(keyname).value. In this case, an error is generated if
keyname represents an invalid key in the collection. To
fix the error, use a valid key name or index for the
collection.

The actual range I'm trying the find in is exactly one
cell larger than the subscript I'm using, and herein lies
the source of my confusion.

Also, after re-reading the description of the
parameter "After" for the 50th time I see that it says "If
you don't specify this argument, the search starts after
the cell in the upper-left corner of the range." And
since I'm saying "xlPrevious" in the direction, it should
automatically start at the bottom and this entire logic is
a waste of time and resources. And when I do that, it
doesn't give me an error, and it just returns "0000" to
rngBottomZero instead of the actual Cell address. Even
though the return of the method, according to the help
file, is "Finds specific information in a range, and
returns a Range object that represents the first cell
where that information is found". Finally, when I
add ".Address" to the end of it, in an attempt to get a
cell location instead of a value, it gives me an "Object
Required" error.

Any recommendations for corrections or other method
implementation are very welcome at this time.

Thanks for reading my spam and your patience with a VBA
newbie.

-Brad

-----Original Message-----
Brad

The After argument takes a range argument, so

Set rngBottomZero = rngRacf.Find(
What:="0000", _
After:=Worksheets("Inquries").Range

(strMaxRange), _
LookIn:=xlValues, _
SearchDirection:=xlPrevious)


should work.

--
Dick Kusleika
MVP - Excel
www.dicks-clicks.com
Post all replies to the newsgroup.

"Brad" wrote in message
...
Good afternoon,

I'm completely stumped here. What I need is to find a
certain value, by searching from the bottom of the
spreadsheet in a single column. Then take that cell
location of where the value is found, and cut (from cut
and paste) columns A - G and paste them in another
worksheet that I created.


Set rngRacf = Worksheets("Inquiries").Range("C2:" &
strMaxRange)
Set rngBottomZero = rngRacf.Find(
What:="0000", _
After:=strMaxRange, _
LookIn:=xlValues, _
SearchDirection:=xlPrevious)

strMaxRange is the second to last cell value that has
data. Assuming that the "After" designation will begin
the search in the very last cell, searching backwards

for
an instance of the value "0000" that I'm searching for.

I want rngBottomZero to have the cell location where the
criteria is found. If I just use a variant "BottomZero"
the data that I get back is just the "0000" value it
searched for. In this particular code I receive "Unable
to get the Find property of the range class." Which is
even more confusing to me because I thought Find was a
method, not a property. But I'm not sure how to

designate
it otherwise.

I'm numb from troubleshooting and I'm getting nowhere.
Any help would be greatly appreciated.

-Brad



.



  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 7
Default The Find Method

I can't thank you enough for that response Dick, that
explained innumerable questions I had about Excel's OOP.
I got it working now by modifying my code.

Thank you.
-----Original Message-----
Brad

Look at Dave Petersons response. You're correct (and

he's one step ahead of
us) that you don't need to specify after because the

xlPrevious is doing
what you want anyway. Dave does specify an After

argument, but as you said
the top left is the default. There may be an advantage

to specifying it,
but I'm not sure.

If you want to understand the Subscript error, post the

code that gives you
the error. Subscript errors are usually pretty easy to

troubleshoot.
Screwing up a range reference (syntactically) generally

gives you an
"Application defined error", so the likely culprit is in

your
Worksheets(...), such as misspelling "Inquiries."

I'm not sure what's causing the Object Required error,

but here's a little
info on Ranges: You are setting a variable to a range

with the Set
statement. Presumably you have Dimmed the variable as

Range. That variable
is an object variable. Object variables are set using

the Set statement
while scalar variables (String, Long, Boolean) are set

without the Set
statement. A statement like this

Set rngFound = rngLook.Find(What:...)

sets the object variable rngFound to a particular range

(or to Nothing).
This variable now points to the range, it doesn't contain

the cell address
or the value or anything like that, it just points to

that range. Once set,
you can now retrieve any property of that range (like

cell address or
value). Maybe a couple of examples would help

Dim rngFound as Range

Set rngFound.Address = rngLook.Find(What:...)

This won't work for a variety of reasons. First the

Address property is
read only - you don't get to set a range's address only

retrieve it. Even
if it wasn't read only, you wouldn't use the Set

statement to assign a
non-object variable. If you wanted to retrieve the

address, you could do it
like this

Dim strFound as String

strFound = rng.Look.Find(What:...).Address

The Address property returns a string so we assign it to

a string variable
and don't use the Set statement. The Find method returns

a range object, so
we can use the Address property directly on the Find

method. The problem
with this method is that if nothing is found, you will

get an error.

In Dave's example, he "Sets" the Find method to a Range,

then tests the
Range against "Is Nothing" before accessing any

properties of the Range.
Nothing is a keyword in VBA that means that the object

variable doesn't
point to an object. If the result of the Find method

returns Nothing, then
you can have a nice message that says nothing was found

or do something else
in the code. If the Find method returns Not Nothing

(points to an actual
range) then you can access the properties and methods of

the range object
depending on what you intend to do in the code. Dave

accesses the Row
property of the range.

Sorry for the long post. Post back if you need further

clarification.

--
Dick Kusleika
MVP - Excel
www.dicks-clicks.com
Post all replies to the newsgroup.

"Brad" wrote in message
...
Thank you for the help Dick. However, after I modified

my
code to include your addition, I received: "Subscript

out
of range".

Debugging it, I find that "strMaxRange" is "C4116" out

of
4117 rows of data in the range specified. I even

changed
the strMaxRange variable to a literal "C100" to see what
would happen, and I got the same error: "Subscript out

of
Range". I can't make any sense of the help file's
description of the error message, which was:

<<<<<<
Subscript out of range (Error 9)


Elements of arrays and members of collections can only

be
accessed within their defined ranges. This error has the
following causes and solutions:

You referenced a nonexistent array element.
The subscript may be larger or smaller than the range of
possible subscripts, or the array may not have

dimensions
assigned at this point in the application. Check the
declaration of the array to verify its upper and lower
bounds. Use the UBound and LBound functions to condition
array accesses if you're working with arrays that are
redimensioned. If the index is specified as a variable,
check the spelling of the variable name.

You declared an array but didn't specify the number of
elements. For example, the following code causes this
error:
Dim MyArray() As Integer
MyArray(8) = 234 ' Causes Error 9.
Visual Basic doesn't implicitly dimension unspecified
array ranges as 0 - 10. Instead, you must use Dim or

ReDim
to specify explicitly the number of elements in an

array.

You referenced a nonexistent collection member.
Try using the For Each...Next construct instead of
specifying index elements.

You used a shorthand form of subscript that implicitly
specified an invalid element.
For example, when you use the ! operator with a
collection, the ! implicitly specifies a key. For

example,
object!keyname.value is equivalent to object.item
(keyname).value. In this case, an error is generated if
keyname represents an invalid key in the collection. To
fix the error, use a valid key name or index for the
collection.

The actual range I'm trying the find in is exactly one
cell larger than the subscript I'm using, and herein

lies
the source of my confusion.

Also, after re-reading the description of the
parameter "After" for the 50th time I see that it

says "If
you don't specify this argument, the search starts after
the cell in the upper-left corner of the range." And
since I'm saying "xlPrevious" in the direction, it

should
automatically start at the bottom and this entire logic

is
a waste of time and resources. And when I do that, it
doesn't give me an error, and it just returns "0000" to
rngBottomZero instead of the actual Cell address. Even
though the return of the method, according to the help
file, is "Finds specific information in a range, and
returns a Range object that represents the first cell
where that information is found". Finally, when I
add ".Address" to the end of it, in an attempt to get a
cell location instead of a value, it gives me an "Object
Required" error.

Any recommendations for corrections or other method
implementation are very welcome at this time.

Thanks for reading my spam and your patience with a VBA
newbie.

-Brad

-----Original Message-----
Brad

The After argument takes a range argument, so

Set rngBottomZero = rngRacf.Find(
What:="0000", _
After:=Worksheets("Inquries").Range

(strMaxRange), _
LookIn:=xlValues, _
SearchDirection:=xlPrevious)

should work.

--
Dick Kusleika
MVP - Excel
www.dicks-clicks.com
Post all replies to the newsgroup.

"Brad" wrote in message
...
Good afternoon,

I'm completely stumped here. What I need is to find

a
certain value, by searching from the bottom of the
spreadsheet in a single column. Then take that cell
location of where the value is found, and cut (from

cut
and paste) columns A - G and paste them in another
worksheet that I created.


Set rngRacf = Worksheets("Inquiries").Range("C2:" &
strMaxRange)
Set rngBottomZero = rngRacf.Find(
What:="0000", _
After:=strMaxRange, _
LookIn:=xlValues, _
SearchDirection:=xlPrevious)

strMaxRange is the second to last cell value that has
data. Assuming that the "After" designation will

begin
the search in the very last cell, searching backwards

for
an instance of the value "0000" that I'm searching

for.

I want rngBottomZero to have the cell location where

the
criteria is found. If I just use a

variant "BottomZero"
the data that I get back is just the "0000" value it
searched for. In this particular code I

receive "Unable
to get the Find property of the range class." Which

is
even more confusing to me because I thought Find was

a
method, not a property. But I'm not sure how to

designate
it otherwise.

I'm numb from troubleshooting and I'm getting

nowhere.
Any help would be greatly appreciated.

-Brad


.



.

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
Set range with Find method jlclyde Excel Discussion (Misc queries) 1 December 3rd 08 05:44 PM
Find Method problem in Excel VBA.... Irmann Excel Worksheet Functions 7 March 10th 08 03:49 AM
Please post this thread a complete correct method, method about te Nast Runsome New Users to Excel 0 February 23rd 08 09:42 PM
How do you find the method of selected points? method of selected points Setting up and Configuration of Excel 0 November 2nd 05 03:02 PM
How to find method to cut steel coil by using excel. vn Excel Worksheet Functions 1 May 31st 05 03:19 AM


All times are GMT +1. The time now is 01:21 PM.

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

About Us

"It's about Microsoft Excel"