技巧區‎ > ‎高級程度‎ > ‎

簡單計算機 [2002年6月]

張貼者:2010年5月29日 上午6:35Carson Cheng   [ 已更新 2010年5月29日 上午6:35 ]
簡介
有會員問,如何在Excel上制作一部簡單、最基本的計算機,雖然實用性很低,但用來學VBA則是個非常好的題材。



使用的功能
表格中的按鈕 (Buttons)
On Error Goto XXX

使用的函數/屬性
Application.Caller

技巧

  • 由於我們的開發平台是Excel,故此可以利用Excel本身的運算功能。我們不用自行運算(所以不用愁先乘除後加減),只要把用戶輸入的按鍵一個一個地用文字方法先存下(下面叫顯示字串),到了用戶按 = 按鈕便把文字轉為公式,答案自然會跑出來。
  • 但凡有任何錯誤,例如除零、公式錯誤等,都利用On Error Goto顯示「Error」。
  • 所有按鈕都統一執行ProcessKey。命名按鈕時,直接用加減乘除的符號,方便處理,但由於名稱不能以符號為首,故在所有按鈕名稱前統一加上"Button",處理按鍵時把"Button"刪掉即可。


程式

' 處理按鍵
Sub ProcessKey()
   Dim sButton As String
   Dim rDisplay As Range
   
   ' 起始
   On Error GoTo ShowError                       ' 遇有任何錯誤則顯示「ERROR」
   Set rDisplay = Range("Display")               ' 顯示屏,也是顯示字串和公式的所在地
   sButton = Mid(Application.Caller, 7, 99)    ' 看看用戶按了哪個按鈕
                                                           ' 例如+鍵,Caller返回"Button+",sButton將是"+"
   
   Select Case sButton
       Case "AC"
           ' 把顯示字串刪除
           rDisplay.Numberformat = "@"  ' 把數字格式轉到文字
           rDisplay.value = ""
       Case "CE"
           ' 把顯示字串右邊的數字(如有)刪除
           Do While IsNumber(Right(rDisplay.value, 1))
               rDisplay.value = Left(rDisplay.value, Len(rDisplay.value) - 1)
           Loop
       Case "="
           ' 把顯示字串轉為公式
           If rDisplay.value <> "" Then
               rDisplay.Numberformat = "General"  ' 把數字格式轉回通用
               rDisplay.formula = "=" & rDisplay.value
           End If
       Case Else
           ' 所有其他按鈕只需加到顯示字串後便可
           rDisplay.value = rDisplay.value & sButton
   End Select
   Exit Sub

' 有錯誤的話,顯示「ERROR」
ShowError:
   rDisplay.value = "ERROR"
End Sub

' 測試來源字串(的第一個字符)是否一個數字
Private Function IsNumber(sInput As String) As Boolean
   IsNumber = (sInput >= "0" And sInput <= "9") Or sInput = "."
End Function


注意:我沒有使用有千位分隔號的數字格式,這部分留給你自行研究。

ċ
3_2.zip
(17k)
Carson Cheng,
2010年5月29日 上午6:35
Comments