ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   problem with With, End with... (https://www.excelbanter.com/excel-programming/391450-problem-end.html)

William

problem with With, End with...
 
Hello,

I've got a problem with some code of mine (using Excel2003), here's a
simplified version of it that causes the error:

Sub Test()
With Worksheets("Test1").Range("A:A")
Set C = .Find(1, LookAt:=xlWhole)
If Not C Is Nothing Then
CRow = C.Row
Do
With Worksheets("Test2").Range("A:A")
Set V = .Find(Worksheets("Test1").Range("B" &
C.Row).Value, LookAt:=xlWhole)
MsgBox "V = " & Worksheets("Test2").Range("B" &
V.Row).Value
End With

Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Row < CRow
End If
End With
End Sub


It goes thru it once, then returns an error.

Basically, the Test1 sheet is a 'codified' list of transactions, the Test2
sheet is kind of a chart that makes Test1 sheet's values more comprehensible.
The code shown above would be to generate a report.



Bob Phillips

problem with With, End with...
 
Not tested, but this may work better

Set C = Worksheets("Test1").Range("A:A").Find(1, LookAt:=xlWhole)
If Not C Is Nothing Then
CRow = C.Row
Do
With Worksheets("Test2").Range("A:A")
Set V = .Find(Worksheets("Test1").Range("B" & _
C.Row).Value, LookAt:=xlWhole)
MsgBox "V = " & Worksheets("Test2").Range("B" & _
V.Row).Value
End With

Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Row < CRow
End If


--
HTH

Bob

(there's no email, no snail mail, but somewhere should be gmail in my addy)

"William" wrote in message
...
Hello,

I've got a problem with some code of mine (using Excel2003), here's a
simplified version of it that causes the error:

Sub Test()
With Worksheets("Test1").Range("A:A")
Set C = .Find(1, LookAt:=xlWhole)
If Not C Is Nothing Then
CRow = C.Row
Do
With Worksheets("Test2").Range("A:A")
Set V = .Find(Worksheets("Test1").Range("B" &
C.Row).Value, LookAt:=xlWhole)
MsgBox "V = " & Worksheets("Test2").Range("B" &
V.Row).Value
End With

Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Row < CRow
End If
End With
End Sub


It goes thru it once, then returns an error.

Basically, the Test1 sheet is a 'codified' list of transactions, the Test2
sheet is kind of a chart that makes Test1 sheet's values more
comprehensible.
The code shown above would be to generate a report.





William

problem with With, End with...
 
Still the does the same, goes thru once and then error: run-time error 91,
object variable or with block variable not set.


"Bob Phillips" wrote:

Not tested, but this may work better

Set C = Worksheets("Test1").Range("A:A").Find(1, LookAt:=xlWhole)
If Not C Is Nothing Then
CRow = C.Row
Do
With Worksheets("Test2").Range("A:A")
Set V = .Find(Worksheets("Test1").Range("B" & _
C.Row).Value, LookAt:=xlWhole)
MsgBox "V = " & Worksheets("Test2").Range("B" & _
V.Row).Value
End With

Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Row < CRow
End If


--
HTH

Bob

(there's no email, no snail mail, but somewhere should be gmail in my addy)

"William" wrote in message
...
Hello,

I've got a problem with some code of mine (using Excel2003), here's a
simplified version of it that causes the error:

Sub Test()
With Worksheets("Test1").Range("A:A")
Set C = .Find(1, LookAt:=xlWhole)
If Not C Is Nothing Then
CRow = C.Row
Do
With Worksheets("Test2").Range("A:A")
Set V = .Find(Worksheets("Test1").Range("B" &
C.Row).Value, LookAt:=xlWhole)
MsgBox "V = " & Worksheets("Test2").Range("B" &
V.Row).Value
End With

Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Row < CRow
End If
End With
End Sub


It goes thru it once, then returns an error.

Basically, the Test1 sheet is a 'codified' list of transactions, the Test2
sheet is kind of a chart that makes Test1 sheet's values more
comprehensible.
The code shown above would be to generate a report.






Rick Rothstein \(MVP - VB\)

problem with With, End with...
 
Set C = Worksheets("Test1").Range("A:A").Find(1, LookAt:=xlWhole)
If Not C Is Nothing Then
CRow = C.Row
Do
With Worksheets("Test2").Range("A:A")
Set V = .Find(Worksheets("Test1").Range("B" & _
C.Row).Value, LookAt:=xlWhole)
MsgBox "V = " & Worksheets("Test2").Range("B" & _
V.Row).Value
End With

Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Row < CRow


I am not sure it this is at the root of the problem or not; but, since Not
has a higher precedence than And, I would guess the above statement should
be...

Loop While (Not C Is Nothing) And (C.Row < Crow)

I know the last set of parentheses are not necessary, but I like grouping my
logical expressions in them so I can see what is going on better.

Rick


Dave Peterson

problem with With, End with...
 
You're doing a second find that's screwing up the .findnext().

Should it be using the "set c = .find(...)" line
or should it be using the "Set V = .find(...)" line?

And if C isn't found then c.row will cause an error.

And I'd recommend that you provide all the parms to those .find statements.
Excel/VBA remember the last settings that were done--either manually or via
code.

Anyway, I'd do something like:

Option Explicit
Sub Test()
Dim FoundCell1 As Range
Dim FoundCell2 As Range
Dim RngToSearch1 As Range
Dim RngToSearch2 As Range
Dim FirstRow As Long
Dim WhatToFind As Long

WhatToFind = 1

Set RngToSearch1 = Worksheets("Test1").Range("A:A")
Set RngToSearch2 = Worksheets("Test2").Range("A:A")

'look for the first one
With RngToSearch1
Set FoundCell1 = .Cells.Find(what:=WhatToFind, _
LookAt:=xlWhole, _
after:=.Cells(.Cells.Count), _
LookIn:=xlValues, _
searchorder:=xlByRows, _
searchdirection:=xlNext, _
MatchCase:=False)
End With

If FoundCell1 Is Nothing Then
'do nothing
Else
FirstRow = FoundCell1.Row
Do
With RngToSearch2
Set FoundCell2 = .Find(what:=FoundCell1.Offset(0, 1).Value, _
LookAt:=xlWhole, _
after:=.Cells(.Cells.Count), _
LookIn:=xlValues, _
searchorder:=xlByRows, _
searchdirection:=xlNext, _
MatchCase:=False)
End With

If FoundCell2 Is Nothing Then
'do nothing???
Else
MsgBox FoundCell2.Offset(0, 1).Value
End If

'look for next one
Set FoundCell1 = RngToSearch1.Find(what:=WhatToFind, _
LookAt:=xlWhole, _
after:=FoundCell1, _
LookIn:=xlValues, _
searchorder:=xlByRows, _
searchdirection:=xlNext, _
MatchCase:=False)

'since we're in this loop, foundcell1 should never be nothing
'(we found it once to get here).
'So you don't need to check to see if foundcell1 is nothing,
'but it doesn't hurt.
'But if you're changing that foundcell1, you may want to keep
'checking.

If FoundCell1 Is Nothing Then
Exit Do
ElseIf FoundCell1.Row = FirstRow Then
Exit Do
End If
Loop
End If
End Sub




William wrote:

Hello,

I've got a problem with some code of mine (using Excel2003), here's a
simplified version of it that causes the error:

Sub Test()
With Worksheets("Test1").Range("A:A")
Set C = .Find(1, LookAt:=xlWhole)
If Not C Is Nothing Then
CRow = C.Row
Do
With Worksheets("Test2").Range("A:A")
Set V = .Find(Worksheets("Test1").Range("B" &
C.Row).Value, LookAt:=xlWhole)
MsgBox "V = " & Worksheets("Test2").Range("B" &
V.Row).Value
End With

Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Row < CRow
End If
End With
End Sub

It goes thru it once, then returns an error.

Basically, the Test1 sheet is a 'codified' list of transactions, the Test2
sheet is kind of a chart that makes Test1 sheet's values more comprehensible.
The code shown above would be to generate a report.


--

Dave Peterson

Rick Rothstein \(MVP - VB\)

problem with With, End with...
 
Set C = Worksheets("Test1").Range("A:A").Find(1, LookAt:=xlWhole)
If Not C Is Nothing Then
CRow = C.Row
Do
With Worksheets("Test2").Range("A:A")
Set V = .Find(Worksheets("Test1").Range("B" & _
C.Row).Value, LookAt:=xlWhole)
MsgBox "V = " & Worksheets("Test2").Range("B" & _
V.Row).Value
End With

Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Row < CRow


I am not sure it this is at the root of the problem or not; but, since Not
has a higher precedence than And, I would guess the above statement should
be...

Loop While (Not C Is Nothing) And (C.Row < Crow)

I know the last set of parentheses are not necessary, but I like grouping
my logical expressions in them so I can see what is going on better.


In thinking about it again... of course, the original statement is
equivalent to what I posted; so, it can't be at the root of the problem
(unless the Not was supposed to be applied to the And'ed statements after
they were And'ed). However, I still think it is a good idea to use the
parentheses.

Rick



All times are GMT +1. The time now is 03:05 PM.

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