VBA文字方塊計算

請問一下VBA要設計表單上文字方塊會依序顯示記算結果,不過手動修改方塊內容數量時,後續方塊數量也會跟著改變(如圖案) TB1為總量TB2至TB6為計算方塊,例如:當TB1總量輸入50000時,TB2就會自動帶出總量50000則其他方塊就只會顯示0,不過將TB2以手動修改為30000時,此時TB3就會自動帶出剩下的20000而TB4至TB6只會顯示0,如果在把TB3手動改為10000時,則TB4就會帶出剩下10000以此類推。
能否請問一下當我TB1輸入空白鍵或自輸入數字之後將數量全部←Backspace時就會跳出 執行階段錯誤"13" 型態不符合訊息是否正常,要如何修改才不會出現錯誤訊息VBA文字方塊計算


Private Sub TB1_Change()
TB2.Text = TB1.Text
End Sub
----------------------------------------------------------------------------
Private Sub TB2_Change()
TB3.Text = TB1.Text - TB2.Text
End Sub
----------------------------------------------------------------------------
Private Sub TB3_Change()
TB4.Text = TB1.Text - TB2.Text - TB3.Text
End Sub
----------------------------------------------------------------------------
Private Sub TB4_Change()
TB5.Text = TB1.Text - TB2.Text - TB3.Text - TB4.Text
End Sub
----------------------------------------------------------------------------
Private Sub TB5_Change()
TB6.Text = TB1.Text - TB2.Text - TB3.Text - TB4.Text - TB5.Text
End Sub
2019-09-01 0:28 發佈
val(文字)-val(文字)

https://docs.microsoft.com/zh-tw/dotnet/visual-basic/programming-guide/language-features/data-types/conversions-between-strings-and-other-types

https://support.office.com/zh-tw/article/val-%E5%87%BD%E6%95%B8-e5e1f21b-22f9-41c9-bd0a-fe55b767f603
你的寫法會造成連續觸發,不是不行,但要小心處理例外情形,以及確認是否會形成無窮迴圈
TB1改變(觸發TB1_Change)→TB2改變(若值有變則觸發TB2_Change)→TB3改變(若值有變則觸發TB3_Change)...

若文字方塊內容清空,文字方塊的值(TextBox.Text)即為"" (空字串),視為字串格式
文字與數字無法進行相減
程式在這就會出錯
若你輸入非數字的文字,例如A,也是會出錯
所以要先檢查一下要進行計算的各個TextBox的值是否都是數字

(若只寫TB1,VBA會預設視為TB1.Text)

Private Sub TB1_Change()
If IsNumeric(TB1) Then
TB2 = TB1
End If
End Sub

Private Sub TB2_Change()
If IsNumeric(TB1) And IsNumeric(TB2) Then
TB3 = TB1 - TB2
End If
End Sub

Private Sub TB3_Change()
If IsNumeric(TB1) And IsNumeric(TB2) And IsNumeric(TB3) Then
TB4 = TB1 - TB2 - TB3
End If
End Sub

Private Sub TB4_Change()
If IsNumeric(TB1) And IsNumeric(TB2) And IsNumeric(TB3) And IsNumeric(TB4) Then
TB5 = TB1 - TB2 - TB3 - TB4
End If
End Sub

Private Sub TB5_Change()
If IsNumeric(TB1) And IsNumeric(TB2) And IsNumeric(TB3) And IsNumeric(TB4) And IsNumeric(TB5) Then
TB6 = TB1 - TB2 - TB3 - TB4 - TB5
End If
End Sub
非常慼謝各位的回覆..
抱歉另外想在問一下如圖檔文字方塊仍限定為數字,有什麼方法可以將第1格至第3格所輸入的數字加總起來直接顯示在第4格內,且顯示方式不使用按鍵紐
這是類似的問題吧
主要看你的觸發條件要怎麼設定

Private Sub TB1_Change()
TB_Sum
End Sub

Private Sub TB2_Change()
TB_Sum
End Sub

Private Sub TB3_Change()
TB_Sum
End Sub

Private Sub TB4_Change()
TB_Sum
End Sub

Sub TB_Sum()
If IsNumeric(TB1) And IsNumeric(TB2) And IsNumeric(TB3) Then
TB4 = Val(TB1) + Val(TB2) + Val(TB3)
End If
End Sub
很感謝你,不過想在問一下,我目前寫的內容如下,雖然已有防呆,不過還是希望能夠增加合計數量(TB29)能即時變更顏色,TB29預設字體顏色為紅色,如果(TB29)不等於總量(TB3)時,數字會呈現紅色,若(TB29)等於(TB3)時則數字會呈現黑色,請問要怎麼修改..謝謝。

'合計數量
Private Sub TB9_Change()
TB_Sum
End Sub
------------------
Private Sub TB10_Change()
TB_Sum
End Sub
------------------
Private Sub TB11_Change()
TB_Sum
End Sub
------------------
Private Sub TB12_Change()
TB_Sum
End Sub
------------------
Private Sub TB13_Change()
TB_Sum
End Sub
------------------
Sub TB_Sum()
If IsNumeric(TB9) And IsNumeric(TB10) And IsNumeric(TB11) And IsNumeric(TB12) And IsNumeric(TB13) Then
TB29 = Val(TB9) + Val(TB10) + Val(TB11) + Val(TB12) + Val(TB13)
End If
End Sub
------------------
'判斷合計數量是否等於總數量
If TB29.Value <> TB3.Value Then
MsgBox " 合計數量 與 總量不符!!", vbCritical
TB9.SetFocus
Exit Sub '游標移至數量1欄位
End If
Private Sub TB29_Change()
If TB29 = TB3 Then
TB29.ForeColor = RGB(0, 0, 0)
Else
TB29.ForeColor = RGB(255, 0, 0)
End If
End Sub
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?