Range对象InputBox问题(空值)

Range object InputBox problem (empty value)

我有一个宏要求用户达到 select 范围,然后它继续:

Dim rng As Range
On Error Resume Next
Set rng = Application.InputBox("Select a cell", "Make it happen!", Type:=8)

当范围被 selected 时,一切都很好。 但是当用户只是按 Enter 而没有 selecting 任何范围时,我得到错误:

我尝试检查 rng.valuerng.count,但没有成功。 如果什么都没有 selected,我只想要一个简单的 Exit Sub。

对建议函数的可能修改:

Public Function IsAddressValid(myAddress As String) As Boolean
    On Local Error Resume Next
    IsAddressValid = Range(myAddress).Rows.Count > 0
End Function

以下示例显示了如何正确使用 InputBox 到 select 范围。它将抛出一个消息框 “用户按下取消” 或用户 selected.

的范围
Option Explicit

Public Sub InputBoxExample()
    Dim rng As Range
    
    On Error Resume Next
    Set rng = Application.InputBox("Select a cell", "Make it happen!", Type:=8)
    On Error GoTo 0
    
    If rng Is Nothing Then
        MsgBox "user pressed cancel"
        Exit Sub
    Else
        MsgBox "user selected " & rng.Address, False, False
    End If

End Sub

如果您按 OK 而没有 select 任何内容,您会收到您在问题中显示的消息。这是 InputBox 的行为,消息不是来自 VBA,因此无法更改。实际上,该消息的原因是用户被迫输入有效地址(或在地址中解析的公式)或按取消中止 selecting.

您实际上可以 做的是抑制该框的所有 警报。但不是具体的那个。

Application.DisplayAlerts = False
On Error Resume Next
Set rng = Application.InputBox("Select a cell", "Make it happen!", Type:=8)
On Error GoTo 0
Application.DisplayAlerts = True

这将关闭来自该 InputBox 的 所有 警报。因此,如果您选择任何无效(或什么都不选择),确定 按钮将什么都不做,直到您在框中输入有效地址或按 取消