Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 175
Default Problem coding NextFind

This is an attempt to execute a FindNext.
The user enters a PO# in a UserForm, and after clicking OK, UserForm13
comes up, with all the data pertaining to that PO. That works fine. I
put another button in that form to request to Find the Next Record.
with the same PO, if there is any.

That button's code if below. What I want is for the cell that
contains that next PO to be named "EditPO".

Then, I want to unload the present UserForm13 (which has the data from
the 1ts Find). Then reload UserForm13, which will show the data for the
next record.

Is there something I can do to make the Range Name Add statement below
work within
this procedure? Or, is it plain I'm not going about this correctly?
I tried playing around with different ways to reproduce the "C."
code in the line where I'm trying to name the range.

Thanks for any help you can offer.
J.O.

Private Sub CommandButton3_Click()
'Find Next Record

With Worksheets("Official List").Range("j6:j65536")
Set C = .Find(FindPOVal, LookIn:=xlValues)
If Not C Is Nothing Then
firstAddress = C.Address
Do
'C.Interior.Pattern = xlPatternGray50 (this line is from
the Help Example - left here as reference while figuring out how to
code my next command line, to name range, see next line.)

ActiveWorkbook.Names.Add Name:="EditPO",
RefersTo:=FoundCell
Unload UserForm13
UserForm13.Show

Set C = .FindNext(C)

Loop While Not C Is Nothing And C.Address < firstAddress
End If
End With
End Sub

  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 486
Default Problem coding NextFind

IMO you are going about this a little bit wrong. Find next is great for
looping through all of the possible values that you can find. You however are
just trying to find the value after the one you just found. You should use a
plain old fashioned find, not a findnext. Find has an argument LookAfter:=???
Set that to the value that you originally found (offset by one) and then you
are off to the races as it will start it's search just after the cell that
you found...
--
HTH...

Jim Thomlinson


"excelnut1954" wrote:

This is an attempt to execute a FindNext.
The user enters a PO# in a UserForm, and after clicking OK, UserForm13
comes up, with all the data pertaining to that PO. That works fine. I
put another button in that form to request to Find the Next Record.
with the same PO, if there is any.

That button's code if below. What I want is for the cell that
contains that next PO to be named "EditPO".

Then, I want to unload the present UserForm13 (which has the data from
the 1ts Find). Then reload UserForm13, which will show the data for the
next record.

Is there something I can do to make the Range Name Add statement below
work within
this procedure? Or, is it plain I'm not going about this correctly?
I tried playing around with different ways to reproduce the "C."
code in the line where I'm trying to name the range.

Thanks for any help you can offer.
J.O.

Private Sub CommandButton3_Click()
'Find Next Record

With Worksheets("Official List").Range("j6:j65536")
Set C = .Find(FindPOVal, LookIn:=xlValues)
If Not C Is Nothing Then
firstAddress = C.Address
Do
'C.Interior.Pattern = xlPatternGray50 (this line is from
the Help Example - left here as reference while figuring out how to
code my next command line, to name range, see next line.)

ActiveWorkbook.Names.Add Name:="EditPO",
RefersTo:=FoundCell
Unload UserForm13
UserForm13.Show

Set C = .FindNext(C)

Loop While Not C Is Nothing And C.Address < firstAddress
End If
End With
End Sub


  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 175
Default Problem coding NextFind

I'm very confused now. I'll try it again.

User types in PO# 1234 to find that record.
PO# 1234 comes up in a userform (via Find). This works good. This is
all done. The coding works fine.

Now, what if there is another PO# 1234 on the list?
Wouldn't I use FindNext to access that one?
I was thinking that it would run thru Find on the 1st look, then if
there is an exact same PO# on the list, then it should go thru FindNext
to locate THAT one. And, any other records with the same exact PO#.

The user won't know if there are more than 1 record for any one PO#.

I'm 1st trying to get FindNext to work right, and then I will address
the problem of coding to let the user know that there ARE other records
with the same PO. I'll go through that problem later.

1st, I want to get this done where it will recognize the 2nd, 3rd, 4th,
etc of all the same PO#s on the list.

Am I still wrong is thinking FindNext is what I need here?

Thanks for taking the time Jim
J.O.

  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 35,218
Default Problem coding NextFind

How about an alternative?

Have the userform that knows the po number do the next/previous stuff. So the
first userform asks the user for the po#. Validates it. And the passes the
processing to the second userform.

I created a couple of userforms (userform1 and userform2).

On userform1, I had two buttons, a textbox and a label (for error messages).

On userform2, I had 3 buttons (next, previous, done), a label (for messages) and
3 textboxes--just to display some of the fields on that row.

I put this in a General module:

Option Explicit
Public myRngToCheck As Range
Public MaxMatches As Long
Sub LoadMyRngToCheck()
With Worksheets("Official List")
Set myRngToCheck = .Range("j6", .Cells(.Rows.Count, "J").End(xlUp))
End With
End Sub
Sub showIt()
UserForm1.Show
End Sub

This was behind userform1:
Option Explicit
Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub CommandButton2_Click()

Me.Label1.Caption = ""

If Trim(Me.TextBox1.Value) = "" Then
Beep
Me.Label1.Caption = "Please enter a nice PO number"
Exit Sub
End If

If myRngToCheck Is Nothing Then
Call LoadMyRngToCheck
End If

MaxMatches = Application.CountIf(myRngToCheck, Me.TextBox1.Value)

If MaxMatches = 0 Then
'no match
Beep
Me.Label1.Caption = "No Matching PO"
Exit Sub
End If

Me.Hide
UserForm2.Show
Me.TextBox1.Value = ""
Me.Show

End Sub

Private Sub UserForm_Initialize()
Me.Label1.Caption = ""
Me.CommandButton1.Caption = "Cancel"
Me.CommandButton2.Caption = "Show PO"
End Sub


This was behind userform2:

Option Explicit
Dim CurMatch As Long
Dim CurCell As Range
Private Sub CommandButton1_Click()
'Next
If CurMatch = MaxMatches Then
Beep
Else
With myRngToCheck
Call DoNextPreviousFind(xlNext)
CurMatch = CurMatch + 1
Call LoadTheForm
End With
End If
End Sub
Private Sub CommandButton2_Click()
'Previous
If CurMatch = 1 Then
Beep
Else
With myRngToCheck
Call DoNextPreviousFind(xlPrevious)
CurMatch = CurMatch - 1
Call LoadTheForm
End With
End If
End Sub
Private Sub CommandButton3_Click()
'Done
Unload Me
End Sub
Private Sub UserForm_Initialize()
With myRngToCheck
Set CurCell = .Cells(.Cells.Count)
Call DoNextPreviousFind(xlNext)
End With

Me.CommandButton1.Caption = "Next"
Me.CommandButton2.Caption = "Previous"
Me.CommandButton3.Caption = "Done"

CurMatch = 1

Call LoadTheForm
End Sub
Private Sub LoadTheForm()
Me.Label1.Caption = Format(CurMatch, "#,##0") & " of " _
& Format(MaxMatches, "#,##0")

Me.TextBox1.Value = CurCell.Value
Me.TextBox2.Value = CurCell.Offset(0, 1).Value
Me.TextBox3.Value = CurCell.Offset(0, 2).Value

End Sub
Private Sub DoNextPreviousFind(myDirection As Long)
With myRngToCheck
Set CurCell = .Cells.Find(what:=UserForm1.TextBox1.Value, _
after:=CurCell, LookIn:=xlValues, _
lookat:=xlWhole, searchorder:=xlByRows, _
searchdirection:=myDirection, MatchCase:=False)
End With
End Sub


Maybe you can use use part of it.

excelnut1954 wrote:

This is an attempt to execute a FindNext.
The user enters a PO# in a UserForm, and after clicking OK, UserForm13
comes up, with all the data pertaining to that PO. That works fine. I
put another button in that form to request to Find the Next Record.
with the same PO, if there is any.

That button's code if below. What I want is for the cell that
contains that next PO to be named "EditPO".

Then, I want to unload the present UserForm13 (which has the data from
the 1ts Find). Then reload UserForm13, which will show the data for the
next record.

Is there something I can do to make the Range Name Add statement below
work within
this procedure? Or, is it plain I'm not going about this correctly?
I tried playing around with different ways to reproduce the "C."
code in the line where I'm trying to name the range.

Thanks for any help you can offer.
J.O.

Private Sub CommandButton3_Click()
'Find Next Record

With Worksheets("Official List").Range("j6:j65536")
Set C = .Find(FindPOVal, LookIn:=xlValues)
If Not C Is Nothing Then
firstAddress = C.Address
Do
'C.Interior.Pattern = xlPatternGray50 (this line is from
the Help Example - left here as reference while figuring out how to
code my next command line, to name range, see next line.)

ActiveWorkbook.Names.Add Name:="EditPO",
RefersTo:=FoundCell
Unload UserForm13
UserForm13.Show

Set C = .FindNext(C)

Loop While Not C Is Nothing And C.Address < firstAddress
End If
End With
End Sub


--

Dave Peterson
  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 486
Default Problem coding NextFind

Sorry I read your question ever so slightly incorrect. Give this a try...

Private rngToSearch As Range
Private rngFound As Range
Private strFirst As String

Sub FindFirst()
Set rngToSearch = Sheets("Sheet1").Columns("A")
Set rngFound = rngToSearch.Find(What:="This", _
LookIn:=xlValues)
If rngFound Is Nothing Then
MsgBox "Sorry Nothing to find"
'Disable the findnext button
Else
strFirst = rngFound.Address
MsgBox rngFound.Address
'Enable the findnext button
End If

End Sub

Sub FindNext()
Set rngFound = rngToSearch.FindNext(rngFound)
If rngFound.Address = strFirst Then
MsgBox "You are back at the beginning"
'Disable the find next button
Else
MsgBox rngFound.Address
End If
End Sub

--
HTH...

Jim Thomlinson


"excelnut1954" wrote:

I'm very confused now. I'll try it again.

User types in PO# 1234 to find that record.
PO# 1234 comes up in a userform (via Find). This works good. This is
all done. The coding works fine.

Now, what if there is another PO# 1234 on the list?
Wouldn't I use FindNext to access that one?
I was thinking that it would run thru Find on the 1st look, then if
there is an exact same PO# on the list, then it should go thru FindNext
to locate THAT one. And, any other records with the same exact PO#.

The user won't know if there are more than 1 record for any one PO#.

I'm 1st trying to get FindNext to work right, and then I will address
the problem of coding to let the user know that there ARE other records
with the same PO. I'll go through that problem later.

1st, I want to get this done where it will recognize the 2nd, 3rd, 4th,
etc of all the same PO#s on the list.

Am I still wrong is thinking FindNext is what I need here?

Thanks for taking the time Jim
J.O.




  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 175
Default Problem coding NextFind

Thanks Jim for replying again. Here's what I've done with your
code, and also what I've gotten when I run it:
I put the 1st 3 lines you gave me in the Declarations of a Standard
Module
Private rngToSearch As Range
Private rngFound As Range
Private strFirst As String

Note:
I also already have
Public FindPOVal As String
in the same module declaration. This is the variable name I use later
in the initial Find when the user 1st enters the PO number he wants to
search for. UserForm12
This sub is in UserForm12
Private Sub TextBox1_Change()
FindPOVal = TextBox1.Value
End Sub

This is in the 1st userform , UserForm12, that asks the user for the
PO number he wants to search for. After the PO is entered, it brings up
UserForm13, which shows the record

In the 1st 2 lines of your Sub FindFirst() code:
Set rngToSearch = Sheets("Sheet1").Columns("A")
Set rngFound = rngToSearch.Find(What:="This", _

I inserted the worksheet name "Official List" in place of
"Sheet1", and put a "J" in for the Columns variable (that's
the column that contains the PO numbers).
My question on this section of coding is where you have "This"......
at the end of the Set rngFound statement.
In the code where I was trying to use FindNext before, from the Help
example, I was putting "FindPOVal" in there because that was the
variable name I'm using in the initial Find.
FindPOVal = textbox1
Should I replace "This", with "FindPOVal" ? Is this variable still
valid with the code you wrote?

Next, I put the 2 subs you wrote FindFirst & FindNext, in a Standard
Module
What I did next was to set up the command button (the Find Next Record
button that is within UserForm13, that will already be up from the
initial Find.

In the Command Button Click sub, I have my previously written code
that will Find the PO requested. There is an IF-Then-Else as part of
this coding. The Else part of the statement (if the PO was found) would
unload UserForm12, and bring up UserForm13 that would show all the data
in the PO found. Again, up to this part has worked fine.
It then goes to...FindFirst

So, it looks like this:
Private Sub CommandButton3_Click()
(lines of previously written coding described above.)
FindFirst
End Sub

Starting from the beginning:
I clicked the button on the worksheet to search for a record.
Userform12 comes up, asking for the PO number. I enter in a PO number
that I know is in more than 1 record. I click OK, and Userform13 comes
up, showing the record requested. This part of the whole thing has
always worked fine. Then, I click on the Find Next Record button in
that userform, and it says "Sorry Nothing to find", which is part of
your code.

The whole thing ran without any errors, after I set it up as I
described above. That's the positive. I just am not getting the
wanted results, which obviously means I didn't set it up correctly.

I hope I laid this out clear enough. I guess I don't understand how
the sub FindFirst is suppose to work, and how it relates to the
FindNext sub. I don't see how FindNext is ever called on to find the
2nd record. Does the "FindPOVal" variable reference I put in your
coding affect this?

If you can take the time to cipher my gibberish here, I would really
appreciate it.
Thanks again for your time & patience.
J.O.

  #7   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 175
Default Problem coding NextFind

I sure appreciate the effort, Dave. I just don't know enough about VBA
to tackle all of that.

All I really want is to find the Next record (if there is one), so I
can givie it a range name. I already have a macro to do the initial
Find, and it works fine.

Anyway, always appreciate any help I can get here. I'm going to copy
your code, and try to figure it all out. Probably piece by piece as I
learn more.

Thanks again, Dave.

J.O.

  #8   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 35,218
Default Problem coding NextFind

I didn't see a reason to use a name.

But there isn't too much in that code, but post back if you have questions.

excelnut1954 wrote:

I sure appreciate the effort, Dave. I just don't know enough about VBA
to tackle all of that.

All I really want is to find the Next record (if there is one), so I
can givie it a range name. I already have a macro to do the initial
Find, and it works fine.

Anyway, always appreciate any help I can get here. I'm going to copy
your code, and try to figure it all out. Probably piece by piece as I
learn more.

Thanks again, Dave.

J.O.


--

Dave Peterson
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
Help with my coding problem? Dan the Man[_2_] Excel Worksheet Functions 3 September 11th 07 12:02 AM
Problem with coding a msgbox Jacqui Excel Programming 5 November 2nd 05 04:36 PM
problem with coding Subs Excel Programming 5 September 26th 05 03:56 PM
Please help: Coding Problem Tim Excel Programming 4 June 28th 05 05:41 AM
Coding problem John[_105_] Excel Programming 3 June 22nd 05 05:39 PM


All times are GMT +1. The time now is 12:42 PM.

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"