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
สามารถเขียนเพื่อ 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
กรุณาแนบไฟล์ตัวอย่าง อาจจะทำขึ้นมาต่างหาก ตัดสิ่ิงที่ไม่เกี่ยวข้องกับคำถามทิ้งไป พร้อมทั้งชี้ให้เห็นว่าต้องการคำตอบที่ใด ด้วยค่าเท่าใด ด้วยเงื่อนไขใด จะได้เข้าถึงปัญหาได้โดยไวครับ
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