inputBox Excel VBA整数问题



我是VBA的新手,我正在尝试创建一个宏,从inputBox接受0到1000之间的数字,并将其转换为十六进制。好吧,它工作,但我正在努力保持程序接受范围(0 - 1000)。结果如下:

  • 如果我输入-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

但是后来我想inputBox给我输入字符串,所以也许我应该接受值作为字符串,所以我改变了:

Dim inputDec As Integer 
'Changed to
Dim inputDec As String 

对变量的控制仍然很差。它接受-1200,也接受1200)。你能指出我做错了什么吗?也许是工作表函数我读得不太好。我知道这是新手犯的错误,但了解如何从inputBox控制这些输入变量对我来说很重要。

  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

最新更新