Excel - Automatically hide/unhide rows

Asked By JStiehl on 23-Apr-10 07:20 AM
I am a VBA newbie and have searched for an answer for how to do this, but must
be doing something wrong when I have tried other codes.  I need to have rows
automatically hide or unhide based on a value in column D.  If the value in
column D is Y, the row should not be hidden; if the value is N, the row
should be hidden.  These values may change, so the rows need to be able to
hide/unhide automatically.

When I have entered codes in before, I click on the tab for this worksheet,
select View Code, choose Insert Module, and then insert the code.  There is
already a code in this worksheet for something else, so I cannot just add it
in after selecting View Code.  Am I putting the code in the wrong spot?
Should I be choosing something else other than Insert Module?

I have tried out so many different codes thinking that was the problem, but
now I think I may just be entering it wrong.  I appreciate your help.




Jacob Skaria replied to JStiehl on 23-Apr-10 07:45 AM
Select the sheet tab which you want to work with. Right click the sheet tab
and click on 'View Code'. This will launch VBE. Paste the below code to the
right blank portion. Get back to to workbook and try out.


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 4 Then Rows(Target.Row).Hidden = (UCase(Target.Text) = "N")
End Sub

--
Jacob (MVP - Excel)
JStiehl replied to Jacob Skaria on 23-Apr-10 08:24 AM
I followed your directions and entered the code and there was no change.  My
rows with an N in column D are not hidden.
Jacob Skaria replied to JStiehl on 23-Apr-10 08:40 AM
The earlier code only works for new entries made....If you want a macro to
hide the existing entries try the below

--From workbook launch VBE using short-key Alt+F11.
--From menu 'Insert' a module and paste the below code.
--Get back to Workbook.
--Run macro from Tools|Macro|Run 


Sub MyMacro()
Dim lngRow As Long
For lngRow = 1 To Cells(Rows.Count, "D").End(xlUp).Row
Rows(lngRow).Hidden = (UCase(Range("D" & lngRow)) = "N")
Next
End Sub


--
Jacob (MVP - Excel)
JStiehl replied to Jacob Skaria on 23-Apr-10 09:04 AM
Thanks so much for your help.  I do not know what my problem is, but it still
is not working.  I pasted the code per your directions, but when I run the
macro "My Macro", nothing changes or happens.
Jacob Skaria replied to JStiehl on 23-Apr-10 09:29 AM
Set the Security level to low/medium in (Tools|Macro|Security) and reopen excel

--
Jacob (MVP - Excel)
JStiehl replied to Jacob Skaria on 26-Apr-10 08:29 AM
The security level was set at medium, I changed it to low...it is still not
working when I run the macro.  Any other ideas?  Thanks so much for your help.