ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Help needed with multi-sheet routine (https://www.excelbanter.com/excel-programming/381160-help-needed-multi-sheet-routine.html)

David

Help needed with multi-sheet routine
 
Hi all,

I've been hacking around for a few hours now :(

I'm trying to clear constants from target rows on 2 sheets when I select
both sheets, click on a name and hit Delete

The following works:

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Intersect(Target, Range("a3:a" & ActiveSheet.UsedRange.Rows.Count -
2)) Is Nothing Then Exit Sub
If ActiveWindow.SelectedSheets.Count 1 Then
If Target = "" Then
Target.EntireRow.SpecialCells(xlCellTypeConstants) .ClearContents
Sheets(4).Range(Target.Address).EntireRow.SpecialC ells
(xlCellTypeConstants).ClearContents
End If
Range("SortRange").Sort key1:=Range("A3"), header:=xlNo
Sheets(4).Range("SortRange").Sort key1:=Sheets(4).Range("A3"), header:
=xlNo
Range("A2").Select
Sheets(2).Select
End If
End Sub

I tried to streamline things with this:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim sh As Worksheet
On Error Resume Next
If Intersect(Target, Range("a3:a" & ActiveSheet.UsedRange.Rows.Count -
2)) Is Nothing Then Exit Sub
For Each sh In ActiveWindow.SelectedSheets
If Target = "" Then
sh.Range(Target.Address).EntireRow.SpecialCells
(xlCellTypeConstants).ClearContents
End If
sh.Range("SortRange").Sort key1:=sh.Range("A3"), header:=xlNo
sh.Range("A2").Select
Next
Sheets(2).Select
End Sub

But this line doesn't clear the entire row on the second sheet, only the
name I clicked on:

sh.Range(Target.Address).EntireRow.SpecialCells
(xlCellTypeConstants).ClearContents

Can anyone help?

--
David

Gary Keramidas

Help needed with multi-sheet routine
 
this is a personal preference, but, if you're not an employee of microsoft, i
really wish you didn't use @microsoft.com in your email address. use
.



--


Gary


"David" wrote in message
...
Hi all,

I've been hacking around for a few hours now :(

I'm trying to clear constants from target rows on 2 sheets when I select
both sheets, click on a name and hit Delete

The following works:

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Intersect(Target, Range("a3:a" & ActiveSheet.UsedRange.Rows.Count -
2)) Is Nothing Then Exit Sub
If ActiveWindow.SelectedSheets.Count 1 Then
If Target = "" Then
Target.EntireRow.SpecialCells(xlCellTypeConstants) .ClearContents
Sheets(4).Range(Target.Address).EntireRow.SpecialC ells
(xlCellTypeConstants).ClearContents
End If
Range("SortRange").Sort key1:=Range("A3"), header:=xlNo
Sheets(4).Range("SortRange").Sort key1:=Sheets(4).Range("A3"), header:
=xlNo
Range("A2").Select
Sheets(2).Select
End If
End Sub

I tried to streamline things with this:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim sh As Worksheet
On Error Resume Next
If Intersect(Target, Range("a3:a" & ActiveSheet.UsedRange.Rows.Count -
2)) Is Nothing Then Exit Sub
For Each sh In ActiveWindow.SelectedSheets
If Target = "" Then
sh.Range(Target.Address).EntireRow.SpecialCells
(xlCellTypeConstants).ClearContents
End If
sh.Range("SortRange").Sort key1:=sh.Range("A3"), header:=xlNo
sh.Range("A2").Select
Next
Sheets(2).Select
End Sub

But this line doesn't clear the entire row on the second sheet, only the
name I clicked on:

sh.Range(Target.Address).EntireRow.SpecialCells
(xlCellTypeConstants).ClearContents

Can anyone help?

--
David




David

Help needed with multi-sheet routine
 
Gary Keramidas wrote

this is a personal preference, but, if you're not an employee of
microsoft, i really wish you didn't use @microsoft.com in your email
address. use .




Huh?

What I'm using:
"David" wrote in message

I don't see how that translates to @microsoft.com

--
David

Gary Keramidas[_2_]

Help needed with multi-sheet routine
 
sorry, got posted to the wrong david, should have been posted to a post by
dave marden.

--


Gary
"David" wrote in message
...
Gary Keramidas wrote

this is a personal preference, but, if you're not an employee of
microsoft, i really wish you didn't use @microsoft.com in your email
address. use .




Huh?

What I'm using:
"David" wrote in message

I don't see how that translates to @microsoft.com

--
David




Tom Ogilvy

Help needed with multi-sheet routine
 
If it clears the Target cell address on each sheet, then you have a problem
beyond this, because your code isn't supposed to execute unless that cell is
already clear. Anyway, try this modification

Private Sub Worksheet_Change(ByVal Target As Range)
Dim sh As Worksheet
Dim Target1 as Range
On Error Resume Next
If Intersect(Target, Range("a3:a" & ActiveSheet _
.UsedRange.Rows.Count - 2)) Is Nothing Then Exit Sub
For Each sh In ActiveWindow.SelectedSheets
set Target1 = sh.Range(Target.Address)
If Target1 = "" Then
Target1.EntireRow.SpecialCells(xlCellTypeConstants ).ClearContents
End If

sh.Range("SortRange").Sort key1:=sh.Range("A3"), header:=xlNo
'sh.Range("A2").Select ' can't select on a sheet that isn't active

Next
Sheets(2).Select
End Sub

--
Regards,
Tom Ogilvy


"David" wrote in message
...
Hi all,

I've been hacking around for a few hours now :(

I'm trying to clear constants from target rows on 2 sheets when I select
both sheets, click on a name and hit Delete

The following works:

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Intersect(Target, Range("a3:a" & ActiveSheet.UsedRange.Rows.Count -
2)) Is Nothing Then Exit Sub
If ActiveWindow.SelectedSheets.Count 1 Then
If Target = "" Then
Target.EntireRow.SpecialCells(xlCellTypeConstants) .ClearContents
Sheets(4).Range(Target.Address).EntireRow.SpecialC ells
(xlCellTypeConstants).ClearContents
End If
Range("SortRange").Sort key1:=Range("A3"), header:=xlNo
Sheets(4).Range("SortRange").Sort key1:=Sheets(4).Range("A3"), header:
=xlNo
Range("A2").Select
Sheets(2).Select
End If
End Sub

I tried to streamline things with this:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim sh As Worksheet
On Error Resume Next
If Intersect(Target, Range("a3:a" & ActiveSheet.UsedRange.Rows.Count -
2)) Is Nothing Then Exit Sub
For Each sh In ActiveWindow.SelectedSheets
If Target = "" Then
sh.Range(Target.Address).EntireRow.SpecialCells
(xlCellTypeConstants).ClearContents
End If
sh.Range("SortRange").Sort key1:=sh.Range("A3"), header:=xlNo
sh.Range("A2").Select
Next
Sheets(2).Select
End Sub

But this line doesn't clear the entire row on the second sheet, only the
name I clicked on:

sh.Range(Target.Address).EntireRow.SpecialCells
(xlCellTypeConstants).ClearContents

Can anyone help?

--
David




David

Help needed with multi-sheet routine
 
Tom Ogilvy wrote


Anyway, try this modification



For Each sh In ActiveWindow.SelectedSheets
set Target1 = sh.Range(Target.Address)
If Target1 = "" Then
Target1.EntireRow.SpecialCells(xlCellTypeConstants ).ClearContents
End If


Thanks, your modification works fine. Althogh the number of lines isn't
reduced from my working routine, it at least looks cleaner, and will work
unmodified if I move sheets around in the future

'sh.Range("A2").Select ' can't select on a sheet that isn't active


Hmm. For me, it does.

--
David

Tom Ogilvy

Help needed with multi-sheet routine
 
'sh.Range("A2").Select ' can't select on a sheet that isn't active

Hmm. For me, it does.


Try this is in a new workbook without your error handler hiding all your
misadventures

Sub ABC()
Worksheets(Array("Sheet2", "Sheet3")).Select
Worksheets("Sheet2").Activate
Worksheets("Sheet3").Range("A2").Select
End Sub

Because you have your sheets grouped, when you select A2 on the activesheet
(when sh is the Activesheet), it is selected on all the grouped sheets. So
to you it looks like it works I suspect.

alternately, remove your crutch
On Error Resume Next

and see what happens.

--
Regards,
Tom Ogilvy




"David" wrote in message
...
Tom Ogilvy wrote


Anyway, try this modification



For Each sh In ActiveWindow.SelectedSheets
set Target1 = sh.Range(Target.Address)
If Target1 = "" Then
Target1.EntireRow.SpecialCells(xlCellTypeConstants ).ClearContents
End If


Thanks, your modification works fine. Althogh the number of lines isn't
reduced from my working routine, it at least looks cleaner, and will work
unmodified if I move sheets around in the future

'sh.Range("A2").Select ' can't select on a sheet that isn't active


Hmm. For me, it does.

--
David




David

Help needed with multi-sheet routine
 
Tom Ogilvy wrote

'sh.Range("A2").Select ' can't select on a sheet that isn't active


Hmm. For me, it does.


Try this is in a new workbook without your error handler hiding all
your misadventures

Sub ABC()
Worksheets(Array("Sheet2", "Sheet3")).Select
Worksheets("Sheet2").Activate
Worksheets("Sheet3").Range("A2").Select
End Sub

Because you have your sheets grouped, when you select A2 on the
activesheet (when sh is the Activesheet), it is selected on all the
grouped sheets. So to you it looks like it works I suspect.

alternately, remove your crutch
On Error Resume Next

and see what happens.


Point taken. This works with the crutch:
Application.Goto sh.Range("A2"), True

That said, I like crutches, and I put it in primarily to eliminate the
error if there were no Constants to the right in the row.

--
David

Tom Ogilvy

Help needed with multi-sheet routine
 
That said, I like crutches, and I put it in primarily to eliminate the
error if there were no Constants to the right in the row.



As a technique, Most use something similar to:

On Error Resume Next
Target.EntireRow.SpecialCells(xlCellTypeConstants) .ClearContents
On Error goto 0

But it is your routine.

--
Regards,
Tom Ogilvy

"David" wrote in message
...
Tom Ogilvy wrote

'sh.Range("A2").Select ' can't select on a sheet that isn't active

Hmm. For me, it does.


Try this is in a new workbook without your error handler hiding all
your misadventures

Sub ABC()
Worksheets(Array("Sheet2", "Sheet3")).Select
Worksheets("Sheet2").Activate
Worksheets("Sheet3").Range("A2").Select
End Sub

Because you have your sheets grouped, when you select A2 on the
activesheet (when sh is the Activesheet), it is selected on all the
grouped sheets. So to you it looks like it works I suspect.

alternately, remove your crutch
On Error Resume Next

and see what happens.


Point taken. This works with the crutch:
Application.Goto sh.Range("A2"), True

That said, I like crutches, and I put it in primarily to eliminate the
error if there were no Constants to the right in the row.

--
David





All times are GMT +1. The time now is 04:49 AM.

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