Using command buttons change the value in a form text box.

B

burl_h

The subs below are each run from 2 command buttons on a form, Machine
Hours and Labour Hours. When the form is initially loaded it is with
Machine hours in the txtMilla thru txtMille text boxes . The operator
can then change from Machine Hours to Labour Hours by clicking the
Labour Hours command button, likewise the operator can change the
Labour Hours back to Machine Hours by clicking the Machine Hours
command button.

I need to overcome the problem of subsequence clicks on the same
command button, for example, if the labour hours were clicked twice one
could never get back to the original value of machine hours when the
machine hours button is clicked.

How would you code these such that after the labour hours command
button is clicked it is somewhat disabled until the machine hours has
been clicked. Or better yet can this be run from the same command
button, as on initial loading of the form it displays Machine Hours in
the text boxes, the command button caption could say Machine hours, but
when pressed it would convert the values in the text boxes to Labour
hours and display Labour Hours in the caption, then obvoiusly on
subsequent clicks it would toggle between the two, but the values
maintain integrity, any thoughts.

Private Sub LabourHours_Click()

Factor = 2.5
MachineHours.Font.Bold = False
LabourHours.Font.Bold = True

frmQuoteForm.txtMilla.Value = frmQuoteForm.txtMilla.Value * Factor
frmQuoteForm.txtMillb.Value = frmQuoteForm.txtMillb.Value * Factor
frmQuoteForm.txtMillc.Value = frmQuoteForm.txtMillc.Value * Factor
frmQuoteForm.txtMilld.Value = frmQuoteForm.txtMilld.Value * Factor
frmQuoteForm.txtMille.Value = frmQuoteForm.txtMille.Value * Factor

End Sub

Private Sub MachineHours_Click()

Factor = 2.5
LabourHours.Font.Bold = False
MachineHours.Font.Bold = True

frmQuoteForm.txtMilla.Value = frmQuoteForm.txtMilla.Value * (1 /
Factor)
frmQuoteForm.txtMillb.Value = frmQuoteForm.txtMillb.Value * (1 /
Factor)
frmQuoteForm.txtMillc.Value = frmQuoteForm.txtMillc.Value * (1 /
Factor)
frmQuoteForm.txtMilld.Value = frmQuoteForm.txtMilld.Value * (1 /
Factor)
frmQuoteForm.txtMille.Value = frmQuoteForm.txtMille.Value * (1 /
Factor)

End Sub

Regards
burl_h
 
G

Guest

Hi Burl

There are a number of options but you need some type of flag to indicate the
current status of the hours (machine or labour).

1. You can you two buttons and disable the other option
2. You could have one button and switch the caption
3. You could use a global flag and check the status on the button press.

Lets look at 1.

In you startup code

set the

me.LabourHours.enabled = true
me.MachineHours.enabled = false

then you need to switch the buttons when they are clicked:

const Factor as double = 2.5

Private Sub LabourHours_Click()

me.MachineHours.enabled= true
me.LabourHours.enabled = false

frmQuoteForm.txtMilla.Value = frmQuoteForm.txtMilla.Value * Factor
frmQuoteForm.txtMillb.Value = frmQuoteForm.txtMillb.Value * Factor
frmQuoteForm.txtMillc.Value = frmQuoteForm.txtMillc.Value * Factor
frmQuoteForm.txtMilld.Value = frmQuoteForm.txtMilld.Value * Factor
frmQuoteForm.txtMille.Value = frmQuoteForm.txtMille.Value * Factor

End Sub

Private Sub MachineHours_Click()

me.MachineHours.enabled= false
me.LabourHours.enabled = true

frmQuoteForm.txtMilla.Value = frmQuoteForm.txtMilla.Value / Factor
frmQuoteForm.txtMillb.Value = frmQuoteForm.txtMillb.Value / Factor
frmQuoteForm.txtMillc.Value = frmQuoteForm.txtMillc.Value / Factor
frmQuoteForm.txtMilld.Value = frmQuoteForm.txtMilld.Value / Factor
frmQuoteForm.txtMille.Value = frmQuoteForm.txtMille.Value / Factor

End Sub

If you want one button and switch the text use say LabourHours

LabourHours.caption = "Switch to Labour Hours"

This i would set in the initialize section to make sure you get the text
correct:

Private Sub UserForm_Initialize()
me.LabourHours.caption = "Switch to Labour Hours"
End Sub


then you need to the following:

const Factor as double = 2.5
const szLab as string ="Switch to Labour Hours"
const szMc as string ="Switch to Macine Hours"

Private Sub LabourHours_Click()
if me.LabourHours.caption = szLab then
' switch to labour
me.LabourHours.caption = szMc ' switch text
frmQuoteForm.txtMilla.Value = frmQuoteForm.txtMilla.Value * Factor
frmQuoteForm.txtMillb.Value = frmQuoteForm.txtMillb.Value * Factor
frmQuoteForm.txtMillc.Value = frmQuoteForm.txtMillc.Value * Factor
frmQuoteForm.txtMilld.Value = frmQuoteForm.txtMilld.Value * Factor
frmQuoteForm.txtMille.Value = frmQuoteForm.txtMille.Value * Factor
else
' switch to machine
me.LabourHours.caption = szLab ' switch text
frmQuoteForm.txtMilla.Value = frmQuoteForm.txtMilla.Value / Factor
frmQuoteForm.txtMillb.Value = frmQuoteForm.txtMillb.Value / Factor
frmQuoteForm.txtMillc.Value = frmQuoteForm.txtMillc.Value / Factor
frmQuoteForm.txtMilld.Value = frmQuoteForm.txtMilld.Value / Factor
frmQuoteForm.txtMille.Value = frmQuoteForm.txtMille.Value / Factor
end if
End Sub


The last option is a global flag

define at the top of the module

dim bFlagLab as boolean

in the initialize section

bflagLab=true

then in each routine add

for lab

if bflagLab=true then
bflaglab=false
else
beep
exit sub
end if

for machine

if bflagLab=false then
bflaglab=true
else
beep
exit sub
end if


The last one may be the wrong way round.
 
B

burl_h

Martin,

Thanks for the 3 solutions, I did try the first 2 and they worked
great, I'm not sure I'll try the 3rd solution, it looks a little
confusing, where the first two were quite simple to implement, thanks
again for your response.

burl_h
 

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