Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 83
Default Code that sort of works

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Unprotect Password:="******"
ws.Columns("A:W").AutoFit

Dim iLastrow As Integer
'This is your last row in col a
iLastrow = Range("A910").End(xlUp).Row
For i = 30 To iLastrow
If Cells(i, 1).Value = "" And Cells(i, 1).EntireRow.Hidden = False Then
Cells(i, 1).EntireRow.Hidden = True
End If
Next i

Next ws

I've got 12 sheets. Sheet 1 works with the exception of the last 5 rows
(they do not get hidden), and sheets 2-12 have formula's that simply do
this...
=IF(January!A395="","",January!A395)

What am I missing/doing wrong?

Thanks

  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,939
Default Code that sort of works

You are using a worksheet object to move through your sheets. But you are not
always referencing your code back to that object. If you do not specify then
it defaults to the active sheet. Try something more like this...

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
with ws
..Unprotect Password:="******"
..Columns("A:W").AutoFit

Dim iLastrow As Integer
'This is your last row in col a
iLastrow = .Range("A910").End(xlUp).Row
For i = 30 To iLastrow
If .Cells(i, 1).Value = "" And .Cells(i, 1).EntireRow.Hidden = False Then
..Cells(i, 1).EntireRow.Hidden = True
End If
Next i
end with
Next ws

--
HTH...

Jim Thomlinson


"Stephen" wrote:

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Unprotect Password:="******"
ws.Columns("A:W").AutoFit

Dim iLastrow As Integer
'This is your last row in col a
iLastrow = Range("A910").End(xlUp).Row
For i = 30 To iLastrow
If Cells(i, 1).Value = "" And Cells(i, 1).EntireRow.Hidden = False Then
Cells(i, 1).EntireRow.Hidden = True
End If
Next i

Next ws

I've got 12 sheets. Sheet 1 works with the exception of the last 5 rows
(they do not get hidden), and sheets 2-12 have formula's that simply do
this...
=IF(January!A395="","",January!A395)

What am I missing/doing wrong?

Thanks

  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 83
Default Code that sort of works

Nope still works the same way.

What I'm attempting to do is hide every row where the cell in column A is
either blank or has a blank value. My worksheets are a fixed size ending at
row 910.

"Jim Thomlinson" wrote:

You are using a worksheet object to move through your sheets. But you are not
always referencing your code back to that object. If you do not specify then
it defaults to the active sheet. Try something more like this...

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
with ws
.Unprotect Password:="******"
.Columns("A:W").AutoFit

Dim iLastrow As Integer
'This is your last row in col a
iLastrow = .Range("A910").End(xlUp).Row
For i = 30 To iLastrow
If .Cells(i, 1).Value = "" And .Cells(i, 1).EntireRow.Hidden = False Then
.Cells(i, 1).EntireRow.Hidden = True
End If
Next i
end with
Next ws

--
HTH...

Jim Thomlinson


"Stephen" wrote:

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Unprotect Password:="******"
ws.Columns("A:W").AutoFit

Dim iLastrow As Integer
'This is your last row in col a
iLastrow = Range("A910").End(xlUp).Row
For i = 30 To iLastrow
If Cells(i, 1).Value = "" And Cells(i, 1).EntireRow.Hidden = False Then
Cells(i, 1).EntireRow.Hidden = True
End If
Next i

Next ws

I've got 12 sheets. Sheet 1 works with the exception of the last 5 rows
(they do not get hidden), and sheets 2-12 have formula's that simply do
this...
=IF(January!A395="","",January!A395)

What am I missing/doing wrong?

Thanks

  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,939
Default Code that sort of works

Because your cells are filled with formulas you can not use xlUp. It will go
all the way to the top (row 30). Try this... (If the performance is poor you
may want to turn off autocalc at the start and back on at the end. If you
still need better performance than that then there are ways to improve it
further...)

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
with ws
..Unprotect Password:="******"
..Columns("A:W").AutoFit

For i = 30 To 910
If .Cells(i, 1).Value = "" And .Cells(i, 1).EntireRow.Hidden = False Then
..Cells(i, 1).EntireRow.Hidden = True
End If
Next i
end with
Next ws

--
HTH...

Jim Thomlinson


"Stephen" wrote:

Nope still works the same way.

What I'm attempting to do is hide every row where the cell in column A is
either blank or has a blank value. My worksheets are a fixed size ending at
row 910.

"Jim Thomlinson" wrote:

You are using a worksheet object to move through your sheets. But you are not
always referencing your code back to that object. If you do not specify then
it defaults to the active sheet. Try something more like this...

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
with ws
.Unprotect Password:="******"
.Columns("A:W").AutoFit

Dim iLastrow As Integer
'This is your last row in col a
iLastrow = .Range("A910").End(xlUp).Row
For i = 30 To iLastrow
If .Cells(i, 1).Value = "" And .Cells(i, 1).EntireRow.Hidden = False Then
.Cells(i, 1).EntireRow.Hidden = True
End If
Next i
end with
Next ws

--
HTH...

Jim Thomlinson


"Stephen" wrote:

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Unprotect Password:="******"
ws.Columns("A:W").AutoFit

Dim iLastrow As Integer
'This is your last row in col a
iLastrow = Range("A910").End(xlUp).Row
For i = 30 To iLastrow
If Cells(i, 1).Value = "" And Cells(i, 1).EntireRow.Hidden = False Then
Cells(i, 1).EntireRow.Hidden = True
End If
Next i

Next ws

I've got 12 sheets. Sheet 1 works with the exception of the last 5 rows
(they do not get hidden), and sheets 2-12 have formula's that simply do
this...
=IF(January!A395="","",January!A395)

What am I missing/doing wrong?

Thanks

  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 3,986
Default Code that sort of works

One way to trouble shoot the five rows on the first sheet is to insert a
message box between Next i and Next ws like:

MsgBox Cells(i, 1).Value

to make sure it gets to 910 and that A910 = "".

I also think I would step through the code for the other sheets to see what
values the cells are showing on those sheets.

If it is working for all but five rows on sheet 1 then the last five rows
values are not equal to "" or it is not making it to those rows to read them
(maybe more hidden rows than you think). First, unhide all rows.

"Stephen" wrote:

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Unprotect Password:="******"
ws.Columns("A:W").AutoFit

Dim iLastrow As Integer
'This is your last row in col a
iLastrow = Range("A910").End(xlUp).Row
For i = 30 To iLastrow
If Cells(i, 1).Value = "" And Cells(i, 1).EntireRow.Hidden = False Then
Cells(i, 1).EntireRow.Hidden = True
End If
Next i

Next ws

I've got 12 sheets. Sheet 1 works with the exception of the last 5 rows
(they do not get hidden), and sheets 2-12 have formula's that simply do
this...
=IF(January!A395="","",January!A395)

What am I missing/doing wrong?

Thanks



  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 32
Default Code that sort of works

Hi Stephen,

Do you have any auto or advanced filtering on the sheets in your workbook?
If not, the below may work:

Sub DeletingRows()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
With ws
..Unprotect Password:="******"
..Columns("A:W").AutoFit
..AutoFilterMode = False 'needed in case another range is already autofiltered
..Range("a30:W910").AutoFilter Field:=1, Criteria1:="<"
End With
Next ws
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

If this works for you, you may want to include some error around checking
for existing filtering. This saves the need for looping & will probably be
faster to run (esp with the manual calc as suggested by Jim & turning the
screen updating off too).

Also, there is another way of protecting your worksheets for the "user
interface only" which you could easily use with no impact on users as there
are macros in the file already. To see the other arguments/parameters that
can be set when protecting sheets, select "protect" & press [F1] in the VB
Editor. My understanding is that the "user interface" option needs to be eset
every time the file is opened which is I've put it in the workbook window:

'copy this into the "thisworkbook" code window
Option Explicit
Private Sub Workbook_Open()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Protect UserInterfaceOnly:=True
Next ws
End Sub

hth
Rob

Rob Brockett
NZ
Always learning & the best way to learn is to experience...


"Stephen" wrote:

Nope still works the same way.

What I'm attempting to do is hide every row where the cell in column A is
either blank or has a blank value. My worksheets are a fixed size ending at
row 910.

"Jim Thomlinson" wrote:

You are using a worksheet object to move through your sheets. But you are not
always referencing your code back to that object. If you do not specify then
it defaults to the active sheet. Try something more like this...

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
with ws
.Unprotect Password:="******"
.Columns("A:W").AutoFit

Dim iLastrow As Integer
'This is your last row in col a
iLastrow = .Range("A910").End(xlUp).Row
For i = 30 To iLastrow
If .Cells(i, 1).Value = "" And .Cells(i, 1).EntireRow.Hidden = False Then
.Cells(i, 1).EntireRow.Hidden = True
End If
Next i
end with
Next ws

--
HTH...

Jim Thomlinson


"Stephen" wrote:

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Unprotect Password:="******"
ws.Columns("A:W").AutoFit

Dim iLastrow As Integer
'This is your last row in col a
iLastrow = Range("A910").End(xlUp).Row
For i = 30 To iLastrow
If Cells(i, 1).Value = "" And Cells(i, 1).EntireRow.Hidden = False Then
Cells(i, 1).EntireRow.Hidden = True
End If
Next i

Next ws

I've got 12 sheets. Sheet 1 works with the exception of the last 5 rows
(they do not get hidden), and sheets 2-12 have formula's that simply do
this...
=IF(January!A395="","",January!A395)

What am I missing/doing wrong?

Thanks

  #7   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 83
Default Code that sort of works

Fantastic

I figured out the problem with the original code as you modified it for me -
I needed to expand my range to row 912. But this new loop makes much shorter
work of the job and accounts for only the rows that are necessary for
evaluation.

Thanks a bunch!!!

"Jim Thomlinson" wrote:

Because your cells are filled with formulas you can not use xlUp. It will go
all the way to the top (row 30). Try this... (If the performance is poor you
may want to turn off autocalc at the start and back on at the end. If you
still need better performance than that then there are ways to improve it
further...)

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
with ws
.Unprotect Password:="******"
.Columns("A:W").AutoFit

For i = 30 To 910
If .Cells(i, 1).Value = "" And .Cells(i, 1).EntireRow.Hidden = False Then
.Cells(i, 1).EntireRow.Hidden = True
End If
Next i
end with
Next ws

--
HTH...

Jim Thomlinson


"Stephen" wrote:

Nope still works the same way.

What I'm attempting to do is hide every row where the cell in column A is
either blank or has a blank value. My worksheets are a fixed size ending at
row 910.

"Jim Thomlinson" wrote:

You are using a worksheet object to move through your sheets. But you are not
always referencing your code back to that object. If you do not specify then
it defaults to the active sheet. Try something more like this...

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
with ws
.Unprotect Password:="******"
.Columns("A:W").AutoFit

Dim iLastrow As Integer
'This is your last row in col a
iLastrow = .Range("A910").End(xlUp).Row
For i = 30 To iLastrow
If .Cells(i, 1).Value = "" And .Cells(i, 1).EntireRow.Hidden = False Then
.Cells(i, 1).EntireRow.Hidden = True
End If
Next i
end with
Next ws

--
HTH...

Jim Thomlinson


"Stephen" wrote:

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Unprotect Password:="******"
ws.Columns("A:W").AutoFit

Dim iLastrow As Integer
'This is your last row in col a
iLastrow = Range("A910").End(xlUp).Row
For i = 30 To iLastrow
If Cells(i, 1).Value = "" And Cells(i, 1).EntireRow.Hidden = False Then
Cells(i, 1).EntireRow.Hidden = True
End If
Next i

Next ws

I've got 12 sheets. Sheet 1 works with the exception of the last 5 rows
(they do not get hidden), and sheets 2-12 have formula's that simply do
this...
=IF(January!A395="","",January!A395)

What am I missing/doing wrong?

Thanks

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
Sort works in 2003 but not in 2000 Gleam Excel Programming 4 October 15th 07 09:30 PM
It works but I need better code... [email protected] Excel Programming 6 April 10th 07 01:29 PM
sort macro that works after leaving worksheet garyablett Excel Discussion (Misc queries) 1 May 5th 06 07:07 AM
Code works for any WBK except the PMW Mark Tangard[_3_] Excel Programming 3 July 17th 05 11:54 AM
Why won't this code works ksnapp[_37_] Excel Programming 6 April 1st 04 01:44 PM


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