Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 119
Default 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.


  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 10,593
Default 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.




  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 119
Default 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.





  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 2,202
Default 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

  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 35,218
Default 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


  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 2,202
Default 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

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
Colon at the end of excel file name(ex: problem.xls:1, problem.xls financeguy New Users to Excel 2 January 15th 10 01:15 AM
Started out as an Access problem. Now an Excel problem RobertM Excel Discussion (Misc queries) 2 April 26th 06 07:30 PM
problem with a conditional max problem Brian Cornejo Excel Discussion (Misc queries) 1 February 18th 05 06:25 PM
Problem when multipple users access shared xl-file at the same time, macrocode for solve this problem? OCI Excel Programming 0 May 16th 04 10:40 PM


All times are GMT +1. The time now is 08:59 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"