Excel VBA-从application.InputBox返回范围或数字

Excel VBA-从application.InputBox返回范围或数字,excel,vba,Excel,Vba,我正在使用application.InputBox从用户那里获取一个数字。在代码中,我进一步将一系列单元格与该数字相乘 我的问题是,我想知道数字是手动写入的还是通过在工作表中选择一个单元格来选择的(这意味着如果用户已写入“123”,则为“123”;如果用户已选择范围,则返回$a$1) 代码: 有什么建议吗?我认为你做不到。要么你把类型设置为8,然后你就不能输入数字,要么你把它设置为1,然后你就不能输入引用。如果你把它合并为9,你仍然有设置或不设置的问题 ' Works for ranges Se

我正在使用application.InputBox从用户那里获取一个数字。在代码中,我进一步将一系列单元格与该数字相乘

我的问题是,我想知道数字是手动写入的还是通过在工作表中选择一个单元格来选择的(这意味着如果用户已写入“123”,则为“123”;如果用户已选择范围,则返回$a$1)

代码:


有什么建议吗?

我认为你做不到。要么你把类型设置为8,然后你就不能输入数字,要么你把它设置为1,然后你就不能输入引用。如果你把它合并为9,你仍然有设置或不设置的问题

' Works for ranges
Set Output = Application.InputBox("Enter Number", "Number for multyplying", , , , , , 8)

' Works for literals
Output = Application.InputBox("Enter Number", "Number for multyplying", , , , , , 1)

' Could have worked for both, but it doesn't
Set Output = Application.InputBox("Enter Number", "Number for multyplying", , , , , , 9)

我认为解决这个问题最干净的方法是使用RefEdit控件实现UserForm。

因此,使用
应用程序.InputBox
我无法实现所需的功能,尽管我仍然认为这是可能的…:-)

这就是我想到的(使用带有RefEdit和其他工具的UserForm):

不要注意背景中的图片。我只是在试东西…:-)尽管如此,我还是很喜欢它:-)

这是commandButton的代码: (ref_输入为ref编辑,txb_编号为文本框)

公共gNmr作为变体
专用子命令\确定\单击()
将adr变暗为字符串
如果ref_Input.Value vbNullString和txb_number.Value vbNullString
MsgBox“请只选择一个选项。”,“输入错误”
出口接头
其他的
如果ref_Input.Value=vbNullString和txb_number.Value=vbNullString,则
MsgBox“无输入,请重试。”,“输入错误”
出口接头
其他的
如果txb_number.Value=vbNullString,则
adr=参考输入值
gNmr=adr
其他的
如果ref_Input.Value=vbNullString,则
gNmr=txb_数值
如果结束
如果结束
如果结束
如果结束
卸下我
端接头

我不明白你的问题。我很确定,如果你使用应用程序,在InputBox提示符处于活动状态期间,你不能选择任何单元格(这意味着用户不能选择任何单元格)。Intupbox而不是InputBox(在VBA中),你可以选择一个我无法复制的范围。如果我选择一个单元格/范围(它允许我这样做),我会得到一个“类型不匹配"错误。更新:看起来如果我删除了
集,它会很高兴。OP无法确定
输出值是通过选择单元格还是直接用户输入来确定的。如果您能够选择范围并在输入框中输入文本/数字,那么它只是从
输入框返回的值,您做错了。没有类型:=8的输入框返回的是计算的范围值,而不是范围本身。您最好的选择是在用户窗体上进行refedit。虽然不稳定,但有效。在最后一行设置输出失败,因为输出不是范围,而是范围值。例如,如果您在单元格A1中选择了
=1+1
,则返回的是
2
而不是
$A$1
谢谢。@cyboashu我明白了…所以我必须用一个用户表单替换输入框。通过RefEdit,我可以同时获得这两个值(范围,如果选择了单元格或键入的数字)?从未在用户表单中使用过RefEdit,因此我必须熟悉这一点…您可以将两个输入合并为一个。只需添加一些IsNumeric测试,我想您已经准备好了。哦,我明白了…我以前测试过,但没有成功。太好了!谢谢:-)
' Works for ranges
Set Output = Application.InputBox("Enter Number", "Number for multyplying", , , , , , 8)

' Works for literals
Output = Application.InputBox("Enter Number", "Number for multyplying", , , , , , 1)

' Could have worked for both, but it doesn't
Set Output = Application.InputBox("Enter Number", "Number for multyplying", , , , , , 9)
Public gNmr As Variant

Private Sub cmd_OK_Click()
Dim adr As String

If ref_Input.Value <> vbNullString And txb_number.Value <> vbNullString Then
    MsgBox "Choose just one option, please.", , "Wrong input"
    Exit Sub
Else
    If ref_Input.Value = vbNullString And txb_number.Value = vbNullString Then
        MsgBox "No input, please try again.", , "Wrong input"
        Exit Sub
    Else
        If txb_number.Value = vbNullString Then
            adr = ref_Input.Value
            gNmr = adr
        Else
            If ref_Input.Value = vbNullString Then
            gNmr = txb_number.Value
            End If
        End If
    End If
End If

Unload Me

End Sub