Many thanks Klaus for your help.
I had already reduced the code by many hundreds of lines when I realised that I could use dynamic controls, but I missed seeing how to to use them on the these buttons. I'll use you version right away.
As to those two strange lines. These were just my clumsly effort to make sure that the pto.ValueChanged event fired.
My calculations all rerovle around a "played to" value being entered. If the plus key is checked then the value is displayed in red but stored as negative and the calculations immediatly redone,
If a gross score or stableford score or par score is entered, then a "played to" value is calculated using handicap and course par and rating and then the calculations are redone. The first time a new "played to" is entered, it is added at the front of the 20 entries and the last one is dropped off. After that any new valuse just overwrite the first entry. (i.e you are correcting the entry or trying out other valuse to see what would have happened if you played better or worse).
Ok so if a "played to" is entered directly then I want to execute pto.ValuedChanged code, but I also want this execute this code if gross,stableford or par scores are entered or if the pto value is turned negative by the plus key. I acheived this just by making sure the value of pto changed.
Is there a nicer way to schedule this event from another subroutine and maybe do "Do Events"? I'm sure it's just as simple as
pto_ValueChanged = true
Do Events
Do I need the "Do Events"?
Cheers
Nick