Search code examples
formsvb6

How can I make a code that tells VB6 that tells VB6 that you're inputting something other than Whole numbers?


Introduction: Hi, everyone! I'm new to VB6! How can I make a code that tells VB6 that tells VB6 that you're inputting something other than Whole numbers?

Details: I'm making an arithmetic progression calculator (I think the code is not needed? but I'll just provide just in case.) Here is my code:

Option Explicit
Private Sub btCalc_Click()
    Dim A As Long
    Dim N As Long
    Dim D As Long
    Dim R As Long
    Dim F As Long
    
    A = Val(txtInitterm.Text)
    N = Val(txtTermint.Text)
    D = Val(txtFinterm.Text)
    R = Val(txtTermint.Text)
    
    F = N / 2 * (2 * A + (N - 1) * D)
    
    lblOutput.Caption = F
    
End Sub

and I wanna notify or tell VB6 that I'm putting in a fraction, not an integer and uses that fraction to do operations.

NOTE: String Fraction to Value in VBA this doesn't answer my question... :D

Thank you for helping me, everyone! it's much appreciated.


Solution

  • There is no Application.Evaluate(...) in Vb6 like in VBA, so you have to do it like the "question" in "String Fraction to Value in VBA". Extract the logic to a function for re-use, and replace the Val(...) calls with the function for use.

    Something like below would likely work, although you may want to provide better error handling in the obvious bad-math cases. I simply return zero and mark them with a comment.

    Option Explicit
    Private Sub btCalc_Click()
        Dim A As Long, N As Long, D As Long, R As Long, F As Long
        
        A = GetFrac(txtInitterm)
        N = GetFrac(txtTermint)
        D = GetFrac(txtFinterm)
        R = GetFrac(txtTermint)
        
        F = N / 2 * (2 * A + (N - 1) * D)
        
        lblOutput.Caption = F
        
    End Sub
    
    
    Public Function GetFrac(ByVal S As String) As Double
      GetFrac = 0         ' default return on error
      If InStr(S, "/") = 0 Then GetFrac = Val(S): Exit Function
      Dim P() As String, N As Double, D As Double
      P = Split(S, "/")
      If UBound(P) <> 1 Then Exit Function  ' bad input -- multiple /'s
      N = Val(P(0))
      D = Val(P(1))
      If D = 0 Then Exit Function ' div by 0
      GetFrac = N / D
    End Function