我对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:对象变量或未设置块变量
当我尝试从下拉菜单中将单元格值更改为另一个单元格时,我得到上面的错误,知道如何解决这个问题吗?
请注意,由于此代码,我无法运行以前运行的精细复制宏。
答案 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