2015-05-23 104 views
2

我是VBA的新手,我試圖創建一個從inputBox接受0到1000之間的數字並將其轉換爲十六進制的宏。它的工作原理,但我努力讓程序接受範圍(0 - 1000)。這是發生了什麼:inputBox Excel VBA整數問題

  • 如果我輸入-1它會引發錯誤;
  • 如果我輸入-1001,它會拋出一個FFFFFFFC17;
  • 如果我輸入超過1000的任何值,它不會拋出一個MsgBox(我不熟悉現在在Excel中導致錯誤)。

我第一次做這樣的:

Sub DecToHex() 
    Dim inputDec As Integer 
    Dim outputHex As String 

    inputDec = InputBox("Decimal?") 

    If inputDec <= 1000 And inputDec >= 0 Then 
     outputHex = Application.WorksheetFunction.Dec2Hex(inputDec) 
     MsgBox ("Hex: " + outputHex) 
    Else 
     MsgBox ("Error! Please define decimal. It must be larger than zero and less than 1001") 
     inputDec = InputBox("Decimal?") 
     outputHex = Application.WorksheetFunction.Dec2Hex(inputDec) 
     MsgBox ("Hex: " + outputHex) 
    End If 

End Sub 

但後來我想好了輸入框讓我輸入字符串,所以也許我應該接受值的字符串,所以我改變:

Dim inputDec As Integer 
'Changed to 
Dim inputDec As String 

哪個仍然對變量做了很差的控制(例如,它接受-1200和1200)。所以你能指出我做錯了什麼?也許這是我閱讀不好的工作表功能。我知道這是新手的錯誤,但瞭解如何從inputBox控制這些輸入變量對我來說很重要。

回答

2
  1. 您需要聲明inputDec作爲Variant
  2. 你需要處理的Cancel按鈕
  3. 您需要將代碼放在一個循環,這樣,當用戶輸入無效號碼,輸入框可以彈出再次。
  4. 您需要使用Application.InputBoxType:=1,以便只接受數字。

試試這個

Sub DecToHex() 
    Dim inputDec As Variant 
    Dim outputHex As String 

    Do 
     inputDec = Application.InputBox("Decimal?", Type:=1) 

     '~~> Handle Cancel 
     If inputDec = "False" Then Exit Do 

     If inputDec <= 1000 And inputDec >= 0 Then 
      outputHex = Application.WorksheetFunction.Dec2Hex(inputDec) 
      MsgBox ("Hex: " + outputHex) 
      Exit Do '<~~ Exit the loop 
     Else 
      MsgBox ("Error! Please define decimal. It must be larger than zero and less than 1001") 
     End If 
    Loop 
End Sub 
+0

這工作作爲一個魅力:)謝謝! –

+0

很高興能有幫助:) –

+0

我會給+1,但我沒有足夠的代表! –