Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 22
Default Selection Combined with Search

How to do the following selection in Visual Basic?

Search for XX.

Hold shift key.

Start selection.

Search for YY.

End selection.

Print selection.


Thanks for your help, as always,

Dave

--
Please delete "ANTI-SPAM" from email address
David Godinger: Go player, student of Mahatma Gandhi, the Buddha, and Dr. Martin King
  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,939
Default Selection Combined with Search

Something like this...

Sub PrintRange()
Dim rngStart As Range
Dim rngEnd As Range

With Sheets("Sheet1").Cells 'Change this to suit
On Error Resume Next
Set rngStart = .Find(What:="XX", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngStart Is Nothing Then Exit Sub
Set rngEnd = .Find(What:="YY", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngEnd Is Nothing Then Exit Sub
End With
Range(rngStart, rngEnd).PrintOut
End Sub

--
HTH...

Jim Thomlinson


"David Godinger" wrote:

How to do the following selection in Visual Basic?

Search for XX.

Hold shift key.

Start selection.

Search for YY.

End selection.

Print selection.


Thanks for your help, as always,

Dave

--
Please delete "ANTI-SPAM" from email address
David Godinger: Go player, student of Mahatma Gandhi, the Buddha, and Dr. Martin King

  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 22
Default Selection Combined with Search

I got a Visual Basic error when I tried to run this code.

Compile error: Invalid or unqualified reference

(By the way, when the code came up on screen, ".Find" was highlighted.)

- - -

Under Help, I got the following:

Invalid or unqualified reference

An identifier beginning with a period is valid only within a With
block. This error has the following cause and solution:

The identifier begins with a period.
Complete the qualification of the identifier or remove the period.



Jim Thomlinson wrote:

Something like this...

Sub PrintRange()
Dim rngStart As Range
Dim rngEnd As Range

With Sheets("Sheet1").Cells 'Change this to suit
On Error Resume Next
Set rngStart = .Find(What:="XX", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngStart Is Nothing Then Exit Sub
Set rngEnd = .Find(What:="YY", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngEnd Is Nothing Then Exit Sub
End With
Range(rngStart, rngEnd).PrintOut
End Sub


--
Please delete "ANTI-SPAM" from email address
David Godinger: Go player, student of Mahatma Gandhi, the Buddha, and Dr. Martin King
  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 35,218
Default Selection Combined with Search

I bet you changed something in Jim's suggested code that broke the procedure.

You may want to try again or post your current code.

And don't delete that "With Sheets("Sheet1").Cells" line. But do change it to
the correct worksheet name.

David Godinger wrote:

I got a Visual Basic error when I tried to run this code.

Compile error: Invalid or unqualified reference

(By the way, when the code came up on screen, ".Find" was highlighted.)

- - -

Under Help, I got the following:

Invalid or unqualified reference

An identifier beginning with a period is valid only within a With
block. This error has the following cause and solution:

The identifier begins with a period.
Complete the qualification of the identifier or remove the period.

Jim Thomlinson wrote:

Something like this...

Sub PrintRange()
Dim rngStart As Range
Dim rngEnd As Range

With Sheets("Sheet1").Cells 'Change this to suit
On Error Resume Next
Set rngStart = .Find(What:="XX", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngStart Is Nothing Then Exit Sub
Set rngEnd = .Find(What:="YY", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngEnd Is Nothing Then Exit Sub
End With
Range(rngStart, rngEnd).PrintOut
End Sub


--
Please delete "ANTI-SPAM" from email address
David Godinger: Go player, student of Mahatma Gandhi, the Buddha, and Dr. Martin King


--

Dave Peterson
  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 22
Default Selection Combined with Search

Thanks Jim and Dave for all your help! Yes, I did make two mistakes.

1) As you suspected, I deleted the "With Sheets("Sheet1").Cells" line.

2) Also, I used an incomplete string for the search, which it
apparently refused to find. For example

Set rngStart = .Find(What:="XX", _ 'is what I used,but

I should have told it to search for everything in the cell, such as

Set rngStart = .Find(What:="XXYYZZ", _ 'the complete cell content


Dave Peterson wrote:

I bet you changed something in Jim's suggested code that broke the procedure.

You may want to try again or post your current code.

And don't delete that "With Sheets("Sheet1").Cells" line. But do change it to
the correct worksheet name.

David Godinger wrote:

I got a Visual Basic error when I tried to run this code.

Compile error: Invalid or unqualified reference

(By the way, when the code came up on screen, ".Find" was highlighted.)

- - -

Under Help, I got the following:

Invalid or unqualified reference

An identifier beginning with a period is valid only within a With
block. This error has the following cause and solution:

The identifier begins with a period.
Complete the qualification of the identifier or remove the period.

Jim Thomlinson wrote:

Something like this...

Sub PrintRange()
Dim rngStart As Range
Dim rngEnd As Range

With Sheets("Sheet1").Cells 'Change this to suit
On Error Resume Next
Set rngStart = .Find(What:="XX", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngStart Is Nothing Then Exit Sub
Set rngEnd = .Find(What:="YY", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngEnd Is Nothing Then Exit Sub
End With
Range(rngStart, rngEnd).PrintOut
End Sub


--
Please delete "ANTI-SPAM" from email address
David Godinger: Go player, student of Mahatma Gandhi, the Buddha, and Dr. Martin King


--
Please delete "ANTI-SPAM" from email address

David Godinger: Go player, student of Mahatma Gandhi, the Buddha, and Dr. Martin King


  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 22
Default Selection Combined with Search

Now that I've seen that this code works, I'd like to include one more
command and I think I'm in business. After we find "XX", I want to go to
the first column,and start the print range from there.

Something like what this command does:

Cells(ActiveCell.Row, 1).Select

Thanks again!


Jim Thomlinson wrote:

Something like this...

Sub PrintRange()
Dim rngStart As Range
Dim rngEnd As Range

With Sheets("Sheet1").Cells 'Change this to suit
On Error Resume Next
Set rngStart = .Find(What:="XX", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngStart Is Nothing Then Exit Sub
Set rngEnd = .Find(What:="YY", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngEnd Is Nothing Then Exit Sub
End With
Range(rngStart, rngEnd).PrintOut
End Sub


--
Please delete "ANTI-SPAM" from email address
David Godinger: Go player, student of Mahatma Gandhi, the Buddha, and Dr. Martin King
  #7   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 35,218
Default Selection Combined with Search

Right after this line:
If rngStart Is Nothing Then Exit Sub
'add this line
Set rngStart = rngStart.entirerow.cells(1)

David Godinger wrote:

Now that I've seen that this code works, I'd like to include one more
command and I think I'm in business. After we find "XX", I want to go to
the first column,and start the print range from there.

Something like what this command does:

Cells(ActiveCell.Row, 1).Select

Thanks again!

Jim Thomlinson wrote:

Something like this...

Sub PrintRange()
Dim rngStart As Range
Dim rngEnd As Range

With Sheets("Sheet1").Cells 'Change this to suit
On Error Resume Next
Set rngStart = .Find(What:="XX", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngStart Is Nothing Then Exit Sub
Set rngEnd = .Find(What:="YY", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngEnd Is Nothing Then Exit Sub
End With
Range(rngStart, rngEnd).PrintOut
End Sub


--
Please delete "ANTI-SPAM" from email address
David Godinger: Go player, student of Mahatma Gandhi, the Buddha, and Dr. Martin King


--

Dave Peterson
  #8   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 22
Default Selection Combined with Search

Hi!

Code still works fine as before the recent change. However, I can't get it
to start the selection at the first column.

Here's what I have so far:
- - -


Sub PrintThisRange()

Dim rngStart As Range
Dim rngEnd As Range

With Sheets("List").Cells
On Error Resume Next
Set rngStart = .Find(What:="-------Start of things to buy-------", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngStart Is Nothing Then Exit Sub


Set rngStart = rngStart.EntireRow.Cells(1) 'Wonder why this line
'doesn't start a new range


Set rngEnd = .Find(What:="-------End of extra things to buy-------", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngEnd Is Nothing Then Exit Sub
End With
Range(rngStart, rngEnd).PrintOut
End Sub


Dave Peterson wrote:

Right after this line:
If rngStart Is Nothing Then Exit Sub
'add this line
Set rngStart = rngStart.entirerow.cells(1)

David Godinger wrote:

Now that I've seen that this code works, I'd like to include one more
command and I think I'm in business. After we find "XX", I want to go to
the first column,and start the print range from there.

Something like what this command does:

Cells(ActiveCell.Row, 1).Select

Thanks again!

Jim Thomlinson wrote:

Something like this...

Sub PrintRange()
Dim rngStart As Range
Dim rngEnd As Range

With Sheets("Sheet1").Cells 'Change this to suit
On Error Resume Next
Set rngStart = .Find(What:="XX", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngStart Is Nothing Then Exit Sub
Set rngEnd = .Find(What:="YY", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngEnd Is Nothing Then Exit Sub
End With
Range(rngStart, rngEnd).PrintOut
End Sub


--
Please delete "ANTI-SPAM" from email address
David Godinger: Go player, student of Mahatma Gandhi, the Buddha, and Dr. Martin King
  #9   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 35,218
Default Selection Combined with Search

This worked for me. I modified it slightly to show the range was selected ok.

Option Explicit
Sub PrintThisRange()

Dim rngStart As Range
Dim rngEnd As Range

With Sheets("List").Cells

Set rngStart = .Find(What:="-------Start of things to buy-------", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngStart Is Nothing Then Exit Sub

Set rngStart = rngStart.EntireRow.Cells(1) 'Wonder why this line
'doesn't start a new range

Set rngEnd = .Find(What:="-------End of extra things to buy-------", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngEnd Is Nothing Then Exit Sub

.Select 'to be able to select the range below
.Range(rngStart, rngEnd).Select '.printout
End With

End Sub

David Godinger wrote:

Hi!

Code still works fine as before the recent change. However, I can't get it
to start the selection at the first column.

Here's what I have so far:
- - -

Sub PrintThisRange()

Dim rngStart As Range
Dim rngEnd As Range

With Sheets("List").Cells
On Error Resume Next
Set rngStart = .Find(What:="-------Start of things to buy-------", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngStart Is Nothing Then Exit Sub

Set rngStart = rngStart.EntireRow.Cells(1) 'Wonder why this line
'doesn't start a new range

Set rngEnd = .Find(What:="-------End of extra things to buy-------", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngEnd Is Nothing Then Exit Sub
End With
Range(rngStart, rngEnd).PrintOut
End Sub

Dave Peterson wrote:

Right after this line:
If rngStart Is Nothing Then Exit Sub
'add this line
Set rngStart = rngStart.entirerow.cells(1)

David Godinger wrote:

Now that I've seen that this code works, I'd like to include one more
command and I think I'm in business. After we find "XX", I want to go to
the first column,and start the print range from there.

Something like what this command does:

Cells(ActiveCell.Row, 1).Select

Thanks again!

Jim Thomlinson wrote:

Something like this...

Sub PrintRange()
Dim rngStart As Range
Dim rngEnd As Range

With Sheets("Sheet1").Cells 'Change this to suit
On Error Resume Next
Set rngStart = .Find(What:="XX", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngStart Is Nothing Then Exit Sub
Set rngEnd = .Find(What:="YY", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngEnd Is Nothing Then Exit Sub
End With
Range(rngStart, rngEnd).PrintOut
End Sub


--
Please delete "ANTI-SPAM" from email address
David Godinger: Go player, student of Mahatma Gandhi, the Buddha, and Dr. Martin King


--

Dave Peterson
  #10   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 27,285
Default Selection Combined with Search

Searching for the entire value in the cell wouldn't be required if you
changed xlWhole to xlPart


Set rngStart = .Find(What:="XX", _
LookAt:=xlPart, _
LookIn:=xlFormulas, _
MatchCase:=False)


--
Regards,
Tom Ogilvy


"David Godinger" wrote in message
...
Thanks Jim and Dave for all your help! Yes, I did make two mistakes.

1) As you suspected, I deleted the "With Sheets("Sheet1").Cells" line.

2) Also, I used an incomplete string for the search, which it
apparently refused to find. For example

Set rngStart = .Find(What:="XX", _ 'is what I used,but

I should have told it to search for everything in the cell, such as

Set rngStart = .Find(What:="XXYYZZ", _ 'the complete cell content


Dave Peterson wrote:

I bet you changed something in Jim's suggested code that broke the
procedure.

You may want to try again or post your current code.

And don't delete that "With Sheets("Sheet1").Cells" line. But do change
it to
the correct worksheet name.

David Godinger wrote:

I got a Visual Basic error when I tried to run this code.

Compile error: Invalid or unqualified reference

(By the way, when the code came up on screen, ".Find" was highlighted.)

- - -

Under Help, I got the following:

Invalid or unqualified reference

An identifier beginning with a period is valid only within a
With
block. This error has the following cause and solution:

The identifier begins with a period.
Complete the qualification of the identifier or remove the
period.

Jim Thomlinson wrote:

Something like this...

Sub PrintRange()
Dim rngStart As Range
Dim rngEnd As Range

With Sheets("Sheet1").Cells 'Change this to suit
On Error Resume Next
Set rngStart = .Find(What:="XX", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngStart Is Nothing Then Exit Sub
Set rngEnd = .Find(What:="YY", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngEnd Is Nothing Then Exit Sub
End With
Range(rngStart, rngEnd).PrintOut
End Sub

--
Please delete "ANTI-SPAM" from email address

David Godinger: Go player, student of Mahatma Gandhi, the Buddha, and
Dr. Martin King


--
Please delete "ANTI-SPAM" from email address

David Godinger: Go player, student of Mahatma Gandhi, the Buddha, and Dr.
Martin King





  #11   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 27,285
Default Selection Combined with Search

Sub PrintThisRange()

Dim rngStart As Range
Dim rngEnd As Range

With Sheets("List").Cells
On Error Resume Next
Set rngStart = .Find(What:="Start of things to buy", _
LookAt:=xlPart, _
LookIn:=xlValues, _
MatchCase:=False)
If rngStart Is Nothing Then Exit Sub

Set rngStart = rngStart.EntireRow.Cells(1)

Set rngEnd = .Find(What:="End of extra things to buy", _
LookAt:=xlPart, _
LookIn:=xlValues, _
MatchCase:=False)
If rngEnd Is Nothing Then Exit Sub
set rngEnd = rngEnd.EntireRow.Cells(1)

.Range(rngStart, rngEnd).PrintOut
End With
End Sub

not the period preceding Range and moved the End With to the bottom.

Also, if you want to print multiple columns, say out to column J as an
example

.Range(rngStart, rngEnd).Resize(,10).PrintOut


--
Regards,
Tom Ogilvy


"David Godinger" wrote in message
...
Hi!

Code still works fine as before the recent change. However, I can't get it
to start the selection at the first column.

Here's what I have so far:
- - -


Sub PrintThisRange()

Dim rngStart As Range
Dim rngEnd As Range

With Sheets("List").Cells
On Error Resume Next
Set rngStart = .Find(What:="-------Start of things to buy-------", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngStart Is Nothing Then Exit Sub


Set rngStart = rngStart.EntireRow.Cells(1) 'Wonder why this line
'doesn't start a new range


Set rngEnd = .Find(What:="-------End of extra things to buy-------", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngEnd Is Nothing Then Exit Sub
End With
Range(rngStart, rngEnd).PrintOut
End Sub


Dave Peterson wrote:

Right after this line:
If rngStart Is Nothing Then Exit Sub
'add this line
Set rngStart = rngStart.entirerow.cells(1)

David Godinger wrote:

Now that I've seen that this code works, I'd like to include one more
command and I think I'm in business. After we find "XX", I want to go to
the first column,and start the print range from there.

Something like what this command does:

Cells(ActiveCell.Row, 1).Select

Thanks again!

Jim Thomlinson wrote:

Something like this...

Sub PrintRange()
Dim rngStart As Range
Dim rngEnd As Range

With Sheets("Sheet1").Cells 'Change this to suit
On Error Resume Next
Set rngStart = .Find(What:="XX", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngStart Is Nothing Then Exit Sub
Set rngEnd = .Find(What:="YY", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngEnd Is Nothing Then Exit Sub
End With
Range(rngStart, rngEnd).PrintOut
End Sub


--
Please delete "ANTI-SPAM" from email address

David Godinger: Go player, student of Mahatma Gandhi, the Buddha, and Dr.
Martin King



  #12   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 22
Default Selection Combined with Search

Hi Dave!

Somehow this didn't work for me, until I made the following changes:

I deleted the last two lines:
.Select 'to be able to select the range below
.Range(rngStart, rngEnd).Select 'printout

I added this one at the end, which I got from the previous versions:
Range(rngStart, rngEnd).PrintOut

QUESTION:
My VBA screen displays a line after
Option Explicit

Before the line below
Sub PrintThisRange()

Does that show that something's not working, or is it just a cosmetic
issue?

Thanks for all your help! You guys know at least ten times as much as I do
about VBA!

Best and Thanks,

Dave


Dave Peterson wrote:

This worked for me. I modified it slightly to show the range was selected ok.

Option Explicit
Sub PrintThisRange()

Dim rngStart As Range
Dim rngEnd As Range

With Sheets("List").Cells

Set rngStart = .Find(What:="-------Start of things to buy-------", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngStart Is Nothing Then Exit Sub

Set rngStart = rngStart.EntireRow.Cells(1) 'Wonder why this line
'doesn't start a new range

Set rngEnd = .Find(What:="-------End of extra things to buy-------", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngEnd Is Nothing Then Exit Sub

.Select 'to be able to select the range below
.Range(rngStart, rngEnd).Select '.printout
End With

End Sub

David Godinger wrote:

Hi!

Code still works fine as before the recent change. However, I can't get it
to start the selection at the first column.

Here's what I have so far:
- - -

Sub PrintThisRange()

Dim rngStart As Range
Dim rngEnd As Range

With Sheets("List").Cells
On Error Resume Next
Set rngStart = .Find(What:="-------Start of things to buy-------", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngStart Is Nothing Then Exit Sub

Set rngStart = rngStart.EntireRow.Cells(1) 'Wonder why this line
'doesn't start a new range

Set rngEnd = .Find(What:="-------End of extra things to buy-------", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngEnd Is Nothing Then Exit Sub
End With
Range(rngStart, rngEnd).PrintOut
End Sub

Dave Peterson wrote:

Right after this line:
If rngStart Is Nothing Then Exit Sub
'add this line
Set rngStart = rngStart.entirerow.cells(1)

David Godinger wrote:

Now that I've seen that this code works, I'd like to include one more
command and I think I'm in business. After we find "XX", I want to go to
the first column,and start the print range from there.

Something like what this command does:

Cells(ActiveCell.Row, 1).Select

Thanks again!

Jim Thomlinson wrote:

Something like this...

Sub PrintRange()
Dim rngStart As Range
Dim rngEnd As Range

With Sheets("Sheet1").Cells 'Change this to suit
On Error Resume Next
Set rngStart = .Find(What:="XX", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngStart Is Nothing Then Exit Sub
Set rngEnd = .Find(What:="YY", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngEnd Is Nothing Then Exit Sub
End With
Range(rngStart, rngEnd).PrintOut
End Sub


--
Please delete "ANTI-SPAM" from email address
David Godinger: Go player, student of Mahatma Gandhi, the Buddha, and Dr. Martin King
  #13   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 22
Default Selection Combined with Search

Hi Tom!

Thanks mucho!

This really hit the nail on the head! The last line--.Range(rngStart,
rngEnd).Resize(,10).PrintOut--which showed me how to select multiple
columns for printing, anticipated my final question!

Everything now works for me.

I can only imagine how much you guys must have studied to write this code.
I have in my possession the following three books:

Running Excel 5 for Windows, Fourth Edition
By Mark Dodge, Chris Kinata, and Craig Stinson

Excel 2003, Power Programming with VBA
By John Walkenbach

Definitive Guide to Excel VBA
By Michael Kofler

Any suggestions for me for improving? I never got a systematic knowledge of
VBA syntax. When I do one of my amateur projects, I copy and paste stuff
that already worked elsewhere and then modify it until I get my results.
I'm sure a pro would see my stuff as grossly sloppy and inefficient.

Thanks much for all your help.

Best,

Dave



"Tom Ogilvy" wrote:

Sub PrintThisRange()

Dim rngStart As Range
Dim rngEnd As Range

With Sheets("List").Cells
On Error Resume Next
Set rngStart = .Find(What:="Start of things to buy", _
LookAt:=xlPart, _
LookIn:=xlValues, _
MatchCase:=False)
If rngStart Is Nothing Then Exit Sub

Set rngStart = rngStart.EntireRow.Cells(1)

Set rngEnd = .Find(What:="End of extra things to buy", _
LookAt:=xlPart, _
LookIn:=xlValues, _
MatchCase:=False)
If rngEnd Is Nothing Then Exit Sub
set rngEnd = rngEnd.EntireRow.Cells(1)

.Range(rngStart, rngEnd).PrintOut
End With
End Sub

not the period preceding Range and moved the End With to the bottom.

Also, if you want to print multiple columns, say out to column J as an
example

.Range(rngStart, rngEnd).Resize(,10).PrintOut


--
Please delete "ANTI-SPAM" from email address
David Godinger: Go player, student of Mahatma Gandhi, the Buddha, and Dr. Martin King
  #14   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 35,218
Default Selection Combined with Search

I changed those two lines so that you could see what range was selected. And to
select a range, that sheet has to be selected.

And the dots (in .range()) means that it refers to the object in the previous
With statement. In this case, the List worksheet.

If you change those back, you'll be able to see what would have printed.

Column A of the cell with that first Find to the cell (no matter where it was)
in the second find.

David Godinger wrote:

Hi Dave!

Somehow this didn't work for me, until I made the following changes:

I deleted the last two lines:
.Select 'to be able to select the range below
.Range(rngStart, rngEnd).Select 'printout

I added this one at the end, which I got from the previous versions:
Range(rngStart, rngEnd).PrintOut

QUESTION:
My VBA screen displays a line after
Option Explicit

Before the line below
Sub PrintThisRange()

Does that show that something's not working, or is it just a cosmetic
issue?

Thanks for all your help! You guys know at least ten times as much as I do
about VBA!

Best and Thanks,

Dave

Dave Peterson wrote:

This worked for me. I modified it slightly to show the range was selected ok.

Option Explicit
Sub PrintThisRange()

Dim rngStart As Range
Dim rngEnd As Range

With Sheets("List").Cells

Set rngStart = .Find(What:="-------Start of things to buy-------", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngStart Is Nothing Then Exit Sub

Set rngStart = rngStart.EntireRow.Cells(1) 'Wonder why this line
'doesn't start a new range

Set rngEnd = .Find(What:="-------End of extra things to buy-------", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngEnd Is Nothing Then Exit Sub

.Select 'to be able to select the range below
.Range(rngStart, rngEnd).Select '.printout
End With

End Sub

David Godinger wrote:

Hi!

Code still works fine as before the recent change. However, I can't get it
to start the selection at the first column.

Here's what I have so far:
- - -

Sub PrintThisRange()

Dim rngStart As Range
Dim rngEnd As Range

With Sheets("List").Cells
On Error Resume Next
Set rngStart = .Find(What:="-------Start of things to buy-------", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngStart Is Nothing Then Exit Sub

Set rngStart = rngStart.EntireRow.Cells(1) 'Wonder why this line
'doesn't start a new range

Set rngEnd = .Find(What:="-------End of extra things to buy-------", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngEnd Is Nothing Then Exit Sub
End With
Range(rngStart, rngEnd).PrintOut
End Sub

Dave Peterson wrote:

Right after this line:
If rngStart Is Nothing Then Exit Sub
'add this line
Set rngStart = rngStart.entirerow.cells(1)

David Godinger wrote:

Now that I've seen that this code works, I'd like to include one more
command and I think I'm in business. After we find "XX", I want to go to
the first column,and start the print range from there.

Something like what this command does:

Cells(ActiveCell.Row, 1).Select

Thanks again!

Jim Thomlinson wrote:

Something like this...

Sub PrintRange()
Dim rngStart As Range
Dim rngEnd As Range

With Sheets("Sheet1").Cells 'Change this to suit
On Error Resume Next
Set rngStart = .Find(What:="XX", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngStart Is Nothing Then Exit Sub
Set rngEnd = .Find(What:="YY", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngEnd Is Nothing Then Exit Sub
End With
Range(rngStart, rngEnd).PrintOut
End Sub


--
Please delete "ANTI-SPAM" from email address
David Godinger: Go player, student of Mahatma Gandhi, the Buddha, and Dr. Martin King


--

Dave Peterson
  #15   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 35,218
Default Selection Combined with Search

Ps. The "Option Explicit" at the top of the module tells excel that you want to
be forced to declare your variables. It's a good thing to use.

And blank lines in code make for readable code--in this case, it wouldn't
matter.

David Godinger wrote:

Hi Dave!

Somehow this didn't work for me, until I made the following changes:

I deleted the last two lines:
.Select 'to be able to select the range below
.Range(rngStart, rngEnd).Select 'printout

I added this one at the end, which I got from the previous versions:
Range(rngStart, rngEnd).PrintOut

QUESTION:
My VBA screen displays a line after
Option Explicit

Before the line below
Sub PrintThisRange()

Does that show that something's not working, or is it just a cosmetic
issue?

Thanks for all your help! You guys know at least ten times as much as I do
about VBA!

Best and Thanks,

Dave

Dave Peterson wrote:

This worked for me. I modified it slightly to show the range was selected ok.

Option Explicit
Sub PrintThisRange()

Dim rngStart As Range
Dim rngEnd As Range

With Sheets("List").Cells

Set rngStart = .Find(What:="-------Start of things to buy-------", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngStart Is Nothing Then Exit Sub

Set rngStart = rngStart.EntireRow.Cells(1) 'Wonder why this line
'doesn't start a new range

Set rngEnd = .Find(What:="-------End of extra things to buy-------", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngEnd Is Nothing Then Exit Sub

.Select 'to be able to select the range below
.Range(rngStart, rngEnd).Select '.printout
End With

End Sub

David Godinger wrote:

Hi!

Code still works fine as before the recent change. However, I can't get it
to start the selection at the first column.

Here's what I have so far:
- - -

Sub PrintThisRange()

Dim rngStart As Range
Dim rngEnd As Range

With Sheets("List").Cells
On Error Resume Next
Set rngStart = .Find(What:="-------Start of things to buy-------", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngStart Is Nothing Then Exit Sub

Set rngStart = rngStart.EntireRow.Cells(1) 'Wonder why this line
'doesn't start a new range

Set rngEnd = .Find(What:="-------End of extra things to buy-------", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngEnd Is Nothing Then Exit Sub
End With
Range(rngStart, rngEnd).PrintOut
End Sub

Dave Peterson wrote:

Right after this line:
If rngStart Is Nothing Then Exit Sub
'add this line
Set rngStart = rngStart.entirerow.cells(1)

David Godinger wrote:

Now that I've seen that this code works, I'd like to include one more
command and I think I'm in business. After we find "XX", I want to go to
the first column,and start the print range from there.

Something like what this command does:

Cells(ActiveCell.Row, 1).Select

Thanks again!

Jim Thomlinson wrote:

Something like this...

Sub PrintRange()
Dim rngStart As Range
Dim rngEnd As Range

With Sheets("Sheet1").Cells 'Change this to suit
On Error Resume Next
Set rngStart = .Find(What:="XX", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngStart Is Nothing Then Exit Sub
Set rngEnd = .Find(What:="YY", _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
MatchCase:=False)
If rngEnd Is Nothing Then Exit Sub
End With
Range(rngStart, rngEnd).PrintOut
End Sub


--
Please delete "ANTI-SPAM" from email address
David Godinger: Go player, student of Mahatma Gandhi, the Buddha, and Dr. Martin King


--

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
Limiting selection in a cell AND linking that selection to a list Lisa Excel Discussion (Misc queries) 1 July 28th 09 05:00 PM
If combined with OR & AND Micki Excel Discussion (Misc queries) 11 November 21st 07 10:10 PM
Copy Selection - Transpose Selection - Delete Selection Uninvisible Excel Discussion (Misc queries) 2 October 23rd 07 04:18 PM
lookup combined with search to find keywords and then assign a cat jalbert1975 Excel Programming 7 September 22nd 06 07:45 PM
search in a sheet and selection? EM Excel Discussion (Misc queries) 0 February 2nd 05 02:43 PM


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