范围对象InputBox问题空值

问题描述

我有一个需要用户选择范围的宏,然后它进行:

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

和选择范围时,一切都很正常。 但是,当用户仅按 Enter 而不选择任何范围时,我会收到错误消息:

There is a problem with this formula.

我尝试检查rng.valuerng.count,但是没有任何运气。 如果没有选择任何内容,我只想要一个简单的Exit Sub。

解决方法

下面的示例说明如何正确使用InputBox选择范围。它将抛出一个消息框“用户按下取消” 或用户选择的范围。

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 ,您将看到问题中显示的消息。这是InputBox的行为,该消息不是来自VBA的,因此无法更改。实际上,出现此消息的原因是用户被迫输入有效地址(或在地址中解析的公式)或按“取消”放弃选择。

您实际上可以执行的操作是禁止该框的所有警报。但不是专门的。

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

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

,

对建议功能的可能修改:

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