更改单元格(列表值)值时的消息

时间:2015-09-30 07:48:37

标签: vba validation popup

我对VBA比较陌生。

我有一个表Range(E16:DW39),其中每个单元格都有一个下拉菜单(Data Validation = List)来手动选择一个值但同时我有一个宏来复制另一个工作表中的数据(两种填充方式)表)。

我想在每次用户更改任何单元格值 手动 时收到消息。

我希望能够独立运行宏(因为我注意到我不能在添加以下代码后)。此相交检查我只希望它用于手动数据输入。

为了做到这一点,我有以下代码(在特定的工作表中):

Private Sub Worksheet_Change(ByVal Target As Range)
------------------------------------------------------
Dim myRange As Range

myRange = Range("E16:DW39") '-> Mission Mix Table

If Intersect(myRange, Target) Then

MsgBox "Mission Plan is not matching with this change"

End If

End Sub
------------------------------------------------

我收到以下错误

  

运行时错误91:对象变量或未设置块变量

当我尝试从下拉菜单中将单元格值更改为另一个单元格时,我得到上面的错误,知道如何解决这个问题吗?

请注意,由于此代码,我无法运行以前运行的精细复制宏。

1 个答案:

答案 0 :(得分:0)

错误代码是因为当两个范围不相交时引用空对象。修正:

If Intersect(myRange, Target) Is Nothing then...

如果要处理仅从Excel GUI而非代码处理的更改,通常的方法是在宏的开头使用Application.EnableEvents = False,然后在宏的末尾使用Application.EnableEvents = true 。这样,宏内部所做的任何更改都不会切换事件处理。

Private Sub Worksheet_Change(ByVal Target As Range)
        On Error goto finish
        Dim myRange As Range

        Set myRange = Range("E16:DW39") ' <~~ dont forget "Set"
        If Not Intersect(myRange, Target) Is Nothing Then
            MsgBox ...
        End If
    finish:
        Application.EnableEvents = True
End Sub