【问题标题】:inputBox Excel VBA Integer problemsinputBox Excel VBA 整数问题
【发布时间】:2015-05-24 06:31:34
【问题描述】:

我是 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 控制这些输入变量对我来说很重要。

【问题讨论】:

    标签: vba excel


    【解决方案1】:
    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
    

    【讨论】:

    • 很高兴能帮上忙 :)
    • 我愿意 +1,但我没有足够的代表!
    • 哈哈。没关系 :) 你承认它正在工作.. 这对我来说已经足够了 :)
    • 现在可以了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多