【问题标题】:MsgBox SelectionChange define rangeMsgBox SelectionChange 定义范围
【发布时间】:2018-03-21 15:33:35
【问题描述】:

我写了以下代码:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim myValue As Variant
If Range("B22") = "Yes" Then
        myValue = InputBox("InsertInitialDetach")
        Range("C22").Value = myValue
    End If
End Sub

此代码用于执行以下操作:如果我从是/否下拉列表中选择是,则会出现一个消息框并要求我填写日期。 问题是,即使在我填写了日期之后,无论我之后做什么,该框都会不断出现并询问日期。例如,如果我向下移动两个单元格,弹出窗口将继续询问我的日期。 请告诉我我应该怎么做才能解决这个错误?

【问题讨论】:

  • 更改选定范围或单元格时触发选择更改,您确定不想使用更改来代替吗?

标签: vba optimization msgbox


【解决方案1】:

这样可以吗:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim myValue As Variant
    If (Not Intersect(Range("B22"), Target) Is Nothing) And (Range("B22") = "Yes") Then
        myValue = InputBox("InsertInitialDetach")
        Range("C22").Value = myValue
    End If
End Sub

它每次都会检查您是否正在更改 Range("B22") 以及 Range("B22") 是否“是”。

【讨论】:

  • Vityata,感谢您的帮助。我运行代码并收到此错误消息:“对象变量或未设置块变量”。
  • @RobertC - 当我编写代码但我不对其进行测试时,就会发生这种情况。查看更新。
  • 确实有效,Vityata。感谢您的帮助,让我了解初始代码中缺少合成器。
【解决方案2】:

您正在使用 selectionChange 事件,该事件在所选区域发生任何更改后触发,如果要触发值更改,请使用 change 事件

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim myValue As Variant
    On Error GoTo ErrorOccured
    If Target.Address = "$B$1" And Target.Value = "Yes" Then
        myValue = InputBox("Insert initialDetach")
        Range("B2").Value = myValue
    End If
    ErrorOccured:
    'Do when value is not valid
    End Sub

【讨论】:

  • 谢谢你,佐伊洛·雷耶斯。我现在明白我的错误了。
  • 如果选择B1:B2并按delete,代码会爆炸错误13
猜你喜欢
  • 2010-12-03
  • 1970-01-01
  • 2013-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-07
相关资源
最近更新 更多