Page 1 of 1

TextBox ไม่มีค่าให้สูตรรันข้ามไป

Posted: Fri Feb 16, 2024 3:12 pm
by Godtheking
รบกวนช่วยดูให้ทีครับ
ฺBox3-Box10 ผมยังไม่มีค่าอะไรจะไม่ให้สูตรคำนวณ Average ออกได้ไหมครับให้ข้ามไปเลย

Code: Select all

    Dim Result(10) As Double
    Dim Ave As Double
    Dim x, y, z, Sum As Double
    
''''   *** Average ***   ''"
        Result(1) = CDbl(txtBox1.Value)
        Result(2) = CDbl(txtBox2.Value)
        Result(3) = CDbl(txtBox3.Value)
        Result(4) = CDbl(txtBox4.Value)
        Result(5) = CDbl(txtBox5.Value)
        Result(6) = CDbl(txtBox6.Value)
        Result(7) = CDbl(txtBox7.Value)
        Result(8) = CDbl(txtBox8.Value)
        Result(9) = CDbl(txtBox9.Value)
        Result(10) = CDbl(txtBox10.Value)
        Ave = Application.WorksheetFunction.Average(Result)

        txtStandard.Value = Ave
        txtStandard.Value = Format(txtStandard, "##,##0.000")

Re: TextBox ไม่มีค่าให้สูตรรันข้ามไป

Posted: Sat Feb 17, 2024 7:24 am
by snasui
:D สามารถเขียนเพื่อ Validate ก่อนที่จะเขียน Code สำหรับการ Average ได้ครับ

กรณีต้องการดักว่า txtBox3.Value เป็นค่าว่างให้ออกจาก Sub คือไม่ต้องทำงาานต่อ เขียนได้เป็น

if txtBox3.Value = "" then exit sub

หรือจะเขียนแจ้งผู้ใช้ให้ทราบก็เพิ่มเป็น

Code: Select all

if txtBox3.Value = "" then 
   msgbox "txtBox3 can't be blank"
   exit sub
end if
เขียนดักไปเช่นนี้กับทุก Object ที่ต้องการตรวจสอบครับ

Re: TextBox ไม่มีค่าให้สูตรรันข้ามไป

Posted: Sat Feb 17, 2024 11:53 am
by Godtheking
สูตร Average ใน Excel ได้ Standard 1.26 โดยใช้สูตร =AVERAGE(G3:P3)
แต่พอผมลองเขียน VBA ใน UserForm ขึ้นมาแต่เพิ่มข้อมูลใน TextBox เข้าไปใน Textbox1-10
สูตรคำนวณออกมาได้อีกแบบนึ่งใน Standard ได้ 1.143 ผมอยากได้สูตรใน UserForm คำนวณให้ได้ตาม
ไฟล์ใน Excel โดยไม่ต้องไปเอาค่าใน Excel มาแสดงครับ

Code: Select all

Private Sub txtPiece_Change()
    
    Dim Result(10) As Double
    Dim Ave As Double
    Dim x, y, z, Sum As Double

'''   *** Average ***   ''"
        If txtBox1.Text = "" Then GoTo Ave
            Result(1) = CDbl(txtBox1.Value)
        If txtBox2.Text = "" Then GoTo Ave
            Result(2) = CDbl(txtBox2.Value)
        If txtBox3.Text = "" Then GoTo Ave
            Result(3) = CDbl(txtBox3.Value)
        If txtBox4.Text = "" Then GoTo Ave
            Result(4) = CDbl(txtBox4.Value)
        If txtBox5.Text = "" Then GoTo Ave
            Result(5) = CDbl(txtBox5.Value)
        If txtBox6.Text = "" Then GoTo Ave
            Result(6) = CDbl(txtBox6.Value)
        If txtBox7.Text = "" Then GoTo Ave
            Result(7) = CDbl(txtBox7.Value)
        If txtBox8.Text = "" Then GoTo Ave
            Result(8) = CDbl(txtBox8.Value)
        If txtBox9.Text = "" Then GoTo Ave
            Result(9) = CDbl(txtBox9.Value)
        If txtBox10.Text = "" Then GoTo Ave
            Result(10) = CDbl(txtBox10.Value)
Ave:

        Ave = Application.WorksheetFunction.Average(Result)

        txtStandard.Value = Ave
        txtStandard.Value = Format(txtStandard, "##,##0.000")
        
'""      *** หา % ***    ""'
        If (txtPiece.Value < 0.0598) Then
            txtPercent.Value = "0.2"
        ElseIf (txtPiece.Value > 0.0999) Then
            txtPercent.Value = "0.5"
        ElseIf (txtPiece.Value <> "0.0599 - 0.0998") Then
            txtPercent.Value = "0.3"
        End If
        
''''   ***  Sum Lower   ***   ''"
        x = Val(txtStandard.Value)
        y = Val(txtPercent.Value)
        z = Val(txtPiece.Value)
        Sum = x - (y * z)
        txtLower.Value = Format(Sum, "##,##0.000")
        
''''   ***  Sum Upper   ***   ''"
        x = Val(txtStandard.Value)
        y = Val(txtPercent.Value)
        z = Val(txtPiece.Value)
        Sum = x + (y * z)
        txtUpper.Value = Format(Sum, "##,##0.000")

End Sub

Re: TextBox ไม่มีค่าให้สูตรรันข้ามไป

Posted: Sat Feb 17, 2024 2:33 pm
by snasui
:D กรุณาแนบไฟล์ตัวอย่าง อาจจะทำขึ้นมาต่างหาก ตัดสิ่ิงที่ไม่เกี่ยวข้องกับคำถามทิ้งไป พร้อมทั้งชี้ให้เห็นว่าต้องการคำตอบที่ใด ด้วยค่าเท่าใด ด้วยเงื่อนไขใด จะได้เข้าถึงปัญหาได้โดยไวครับ

Re: TextBox ไม่มีค่าให้สูตรรันข้ามไป

Posted: Sat Feb 17, 2024 3:48 pm
by Godtheking
แก้ได้แล้วครับขอบคุณครับ

Code: Select all

Private Sub txtPiece_Change()
    
    Dim Result(10) As Variant
    Dim Ave As Double
    Dim x, y, z, Sum As Double

'''   *** Average ***   ''"
        If txtBox1.Text = "" Then GoTo Ave
            Result(1) = CDbl(txtBox1.Value)
        If txtBox2.Text = "" Then GoTo Ave
            Result(2) = CDbl(txtBox2.Value)
        If txtBox3.Text = "" Then GoTo Ave
            Result(3) = CDbl(txtBox3.Value)
        If txtBox4.Text = "" Then GoTo Ave
            Result(4) = CDbl(txtBox4.Value)
        If txtBox5.Text = "" Then GoTo Ave
            Result(5) = CDbl(txtBox5.Value)
        If txtBox6.Text = "" Then GoTo Ave
            Result(6) = CDbl(txtBox6.Value)
        If txtBox7.Text = "" Then GoTo Ave
            Result(7) = CDbl(txtBox7.Value)
        If txtBox8.Text = "" Then GoTo Ave
            Result(8) = CDbl(txtBox8.Value)
        If txtBox9.Text = "" Then GoTo Ave
            Result(9) = CDbl(txtBox9.Value)
        If txtBox10.Text = "" Then GoTo Ave
            Result(10) = CDbl(txtBox10.Value)
Ave:

        Ave = Application.WorksheetFunction.Average(Result)

        txtStandard.Value = Ave
        txtStandard.Value = Format(txtStandard, "##,##0.000")
        
'""      *** หา % ***    ""'
        If (txtPiece.Value < 0.0598) Then
            txtPercent.Value = "0.2"
        ElseIf (txtPiece.Value > 0.0999) Then
            txtPercent.Value = "0.5"
        ElseIf (txtPiece.Value <> "0.0599 - 0.0998") Then
            txtPercent.Value = "0.3"
        End If
        
''''   ***  Sum Lower   ***   ''"
        x = Val(txtStandard.Value)
        y = Val(txtPercent.Value)
        z = Val(txtPiece.Value)
        Sum = x - (y * z)
        txtLower.Value = Format(Sum, "##,##0.000")
        
''''   ***  Sum Upper   ***   ''"
        x = Val(txtStandard.Value)
        y = Val(txtPercent.Value)
        z = Val(txtPiece.Value)
        Sum = x + (y * z)
        txtUpper.Value = Format(Sum, "##,##0.000")

End Sub