Dave I have not really looked at what you have done as I am crap at VB and it takes me all my time to understand my own let alone someone else's
but I will tell you how I do things. As you know my tool setting is done outwith the spindle in with the toolsetter I made up.
What I do is have the toolsetter fully down as its reference point and any tools I put in will be offset from that point. So this point will never change.
I have a Haimer 3D Taster I use for an edge/height finder and I have set that up via the height setter as offset 100. (could be anything but as I only have 96 spaces on my tool page, see pic , I chose 100 as an easy to remember offset) Also the tool page automatically gets the details from the tool table so it updates itself
I set up all the rest of the tools in the same manner.
When I put the Haimer in I call G43H100 and when it is zeroed onthe material I just zero the Z work coords, all tools are then correct when their offsets are called.
The VB I have in the button to transfer the height offset from the setter is as follows.
If GetOemLED(800) Then
MsgBox ("Mach In Reset, Enable and start again")
End
End If
Offset = GetOemDRO(1150)
SetOemDRO(1555,Question("Enter Offset Number"))
Tool = GetOemDRO(1555)
Code "G90" & "G10" & "L1" & "P" & Tool &"Z" & Offset
DoOemButton(121)
On my lathe things are set up on the machine but in a kind of similar manner in as much as my reference for all tools is the Home position of the X and Z axis, something that again never changes.
Not sure if this is of any help at all but hopefully it will give you something to think about.
Oh and something else, the CSMIO hase a probing macro that can be modified, M31 macro, it writes to variables, might be worth looking at also?
Hood