View Single Post
  #2   Report Post  
Posted to microsoft.public.excel.programming
Nick Hebb Nick Hebb is offline
external usenet poster
 
Posts: 162
Default Inputbox Convert Millimeters to Feet and Inches

I created a little form with txtMM as the input and txtFT, txtIn,
txtNumerator (aka top fraction), and txtDenominator (aka bottom
fraction) as the outputs. The following is the conversion code (using a
command button - cmdCalc) to drive it:

Private Sub cmdCalc_Click()

Const CONV_FACTOR As Double = 304.8 'mm to ft
Const PROXIMITY As Double = 0.1
Const MAX_ITERATIONS As Integer = 1000

Dim mm As Double
Dim feet As Double
Dim inches As Double
Dim numerator As Double
Dim denominator As Integer
Dim remainder As Double

If Not IsNumeric(Me.txtMM) Then
MsgBox "Error"
Exit Sub
End If

mm = CDbl(Me.txtMM)
feet = mm / CONV_FACTOR
Me.txtFt = Int(feet)

remainder = feet - CInt(feet)
inches = remainder * 12
Me.txtIn = Int(inches)

remainder = inches - Int(inches)
denominator = 1
Do
denominator = denominator + 1
numerator = remainder * denominator
Loop While Abs(numerator - Round(numerator, 0)) PROXIMITY _
And (denominator <= MAX_ITERATIONS)

If denominator = MAX_ITERATIONS Then
MsgBox "Cannot calculate to desired proximity"
Else
Me.txtNumerator = CInt(numerator)
Me.txtDenominator = denominator
End If

End Sub

The PROXIMITY value is how close you want the numerator to be to a
whole number. The smaller the number, the more funky (but more
accurate) results you'll get. The MAX_ITERATIONS is the maximum number
of times you want the loop to run.

I get 5' 5-3/4", which I verified as correct.


----
Nick Hebb
BreezeTree Software
http://www.breezetree.com