Can a work-field utilize "On Change" code?

J

Jimbo213

I have six Yes/No check boxes which give values of -1 and 0 respectively.

When any is -1 "On" I turn a work field [TestInSystem] to -1 "On"
When all are off I turn the same work field [TestInSystem] to 0
That work field logic is working just fine.

I am having trouble setting visible=False/True for 2 controls based on the
value in this work field [TestInSystem]

I suspect that On Change won't work unless you manually change the
[TestInSystem] value - and it is changing behind the scene.

Here is the code I'm using:

Private Sub TestInSystem_Change()
'
If Me.TestInSystem = -1 Then ' "Yes" condition
Me.Text1169.Visible = True
FrameStatusWAVE.Visible = True
Else
Me.Text1169.Visible = False ' "No" condition
FrameStatusWAVE.Visible = False
End If
'
End Sub

I'd appreciate a boot in the right direction.

Thanks for your reply & assistance.
Jimbo213
 
S

Steve Sanford

From HELP:

**Setting the value of a control by using a macro or Visual Basic doesn't
trigger this event for the control. You must type the data directly into the
control, or set the control's Text property.

So using code to set/change the value of [TestInSystem] won't work.... the
change event won't fire.

BTW, this:

If Me.TestInSystem = -1 Then ' "Yes" condition
Me.Text1169.Visible = True
FrameStatusWAVE.Visible = True
Else
Me.Text1169.Visible = False ' "No" condition
FrameStatusWAVE.Visible = False
End If

can be shortened to two lines:


Me.Text1169.Visible = Me.TestInSystem
FrameStatusWAVE.Visible = Me.TestInSystem


This is how I might do it (one way...):

Private Sub Check0_AfterUpdate()
Set_Visible
End Sub

Private Sub Check2_AfterUpdate()
Set_Visible
End Sub

Private Sub Check4_AfterUpdate()
Set_Visible
End Sub

Private Sub Check6_AfterUpdate()
Set_Visible
End Sub

Private Sub Check8_AfterUpdate()
Set_Visible
End Sub

Private Sub Check10_AfterUpdate()
Set_Visible
End Sub

Sub Set_Visible()

'TestInSystem is set to TRUE if the sum is < zero
'TestInSystem is set to FALSE if the sum is = zero

'this should be one line
Me.TestInSystem = (Nz(Me.Check0, 0) + Nz(Me.Check2, 0) + Nz(Me.Check4, 0)
+ Nz(Me.Check6, 0) + Nz(Me.Check8, 0) + Nz(Me.Check10, 0)) < 0

' hide or show controls
Me.Text1169.Visible = Me.TestInSystem
FrameStatusWAVE.Visible = Me.TestInSystem

End Sub


Instead of hiding the controls, you might set the Enabled property:

Me.Text1169.Enabled = Me.TestInSystem
Me.FrameStatusWAVE.Enabled = Me.TestInSystem


That way, the field is still there but data cannot be entered. Sometimes it
is less confusing to have controls disabled and not appearing and disappearing


HTH
 

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