Private Sub 權重_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode <> vbKeyReturn And KeyCode <> vbKeyUp And KeyCode <> vbKeyDown And vbKeyTab Then Exit Sub 權重.Text = M1.CalculateExpression(權重.Text) End Sub '公共函式 Function CalculateExpression(Expression As Variant) As Variant '當Expression為"=","+","-"號開頭時,計算它的表示式,並返回結果 CalculateExpression = Expression Dim sE As String sE = Left(Expression, 1) If Not ("=+-" Like "*" & sE & "*") Then Exit Function Dim result As Variant On Error GoTo err Select Case sE Case "=", "+" result = Eval(MID(Expression, 2)) Case "-" result = Eval(MID(Expression, 1)) End Select CalculateExpression = result Exit Function err: 'Empty End Function
為什麼是鍵按下事件,而不是變更後事件呢?
因為如果你的欄位設定為數字型別的話,你連資料驗證都過不了,也就沒辦法觸發程式碼了.
延伸:
1.可以限制使用者值上限.比如當前庫存上限或者下限.比如庫存只有100個,當使用者輸入的值,或者表示式返回的結果超過100時,可以強制使用者最多隻能輸入100
2.計算表示式的同時,可以把表示式寫入"備註"欄位中.很多公司的送貨單都有要求備註件數與規格,比如送貨數量是100個,每件10個,共10件,那備註就是10*10.