Macro Trigger

S

Stringhaussen

Hi,

I've created a spreadsheet where I want rows to hide/reveal depending on the
contents of a Cell. The code I used below works however every time I complete
another cell on the spreadsheet the macro is triggered.

Is there a way to only run the one time when you complete cell F18 and then
have it disabled until you change that cell value again?

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = True
If Range("F18").Text = "No" Then
Rows("19:24").Select
Range("A19").Activate
Selection.EntireRow.Hidden = True
Exit Sub
ElseIf Range("F18").Text = "Yes" Then
Rows("18:25").Select
Range("A19").Activate
Selection.EntireRow.Hidden = False
Exit Sub
ElseIf Range("F18").Text = "" Then
Rows("19:24").Select
Range("A19").Activate
Selection.EntireRow.Hidden = True
Exit Sub
End If
End Sub

Thanks,
Stringhaussen
 
S

Sam Wilson

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.address = $F$18 then

'Your code

end if

end sub
 
S

Stringhaussen

Hi Sam,

Thanks for your help. I'm still not getting this to work, if I type in any
other cell after I hit enter it automatically selects row 19:24 as in the
coding.

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = True
If Target.Address = F18 Then
ElseIf Range("F18").Text = "No" Then
Rows("19:24").Select
Range("A19").Activate
Selection.EntireRow.Hidden = True
ElseIf Range("F18").Text = "Yes" Then
Rows("18:25").Select
Range("A19").Activate
Selection.EntireRow.Hidden = False
ElseIf Range("F18").Text = "" Then
Rows("19:24").Select
Range("A19").Activate
Selection.EntireRow.Hidden = True
End If
End Sub

Regards,

Stringhaussen
 
M

Mike H

Hi,

You could re-write your code a bit more effeciently like this

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Address <> "$F$18" Then Exit Sub
If UCase(Target.Value) = "NO" Or UCase(Target.Value) = "" Then
Rows(1).EntireRow.Hidden = True
Rows("19:24").EntireRow.Hidden = True
ElseIf UCase(Target.Value) = "YES" Then
Rows(1).EntireRow.Hidden = False
Rows("19:24").EntireRow.Hidden = False
End If
End Sub

Mike
 
G

GB

Take a look at Mike H's response, whichever "method" you adopt, the
comparison to target.address should be as text.

target.address = "F18" or
target.address = "$F$18"
 
M

Mike H

oops,

forgot a line

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Address <> "$F$18" Then Exit Sub
If UCase(Target.Value) = "NO" Or UCase(Target.Value) = "" Then
Rows(1).EntireRow.Hidden = True
Rows("19:24").EntireRow.Hidden = True
ElseIf UCase(Target.Value) = "YES" Then
Rows(1).EntireRow.Hidden = False
Rows("19:24").EntireRow.Hidden = False
End If
Application.ScreenUpdating = True
End Sub

Mike
 
D

Don Guillett

You didn't follow Sam's instruction. To do it the way he showed you MUST use
$ and caps. You can also use
if target.address<>range("f18").address or INTERSECT
try this
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> Range("F18").Address Then Exit Sub
Rows.Hidden = False
If LCase(Target) = "no" Or _
Len(Application.Trim(Target)) < 1 Then _
Rows("19:24").Hidden = True
End Sub
 
D

Don Guillett

Didn't see anything about row 1 in the post. Also try the "dreaded space
bar" in f18. Also, what do you want to do for any other entry besides yes no
or blank??
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top