【发布时间】:2019-03-02 08:40:25
【问题描述】:
我想加快一些数据输入。我在网上找到了有效的代码,直到我将相同的代码应用于更多的工作表。现在我明白了
运行时错误“1004”:对象“_Global”的方法“Intersect”失败
这是基本版本。它在不同的工作表上有所不同。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim WorkRng As Range
Dim Rng As Range
Dim xOffsetColumn As Integer
Set WorkRng = Intersect(Application.ActiveSheet.Range("D:D"), Target)
xOffsetColumn = 5
If Not WorkRng Is Nothing Then
Application.EnableEvents = False
For Each Rng In WorkRng
If Not VBA.IsEmpty(Rng.Value) Then
Rng.Offset(0, xOffsetColumn).Value = Now + 365
Rng.Offset(0, xOffsetColumn).NumberFormat = "mm/dd/yyyy"
Else
Rng.Offset(0, xOffsetColumn).ClearContents
End If
Next
Application.EnableEvents = True
Else
Set WorkRng = Intersect(Application.ActiveSheet.Range("E:E"), Target)
xOffsetColumn = 4
If Not WorkRng Is Nothing Then
Application.EnableEvents = False
For Each Rng In WorkRng
If Not VBA.IsEmpty(Rng.Value) Then
Rng.Offset(0, xOffsetColumn).Value = Now + 365
Rng.Offset(0, xOffsetColumn).NumberFormat = "mm/dd/yyyy"
Else
Rng.Offset(0, xOffsetColumn).ClearContents
End If
Next
Application.EnableEvents = True
End If
End If
End Sub
这似乎是问题所在:
Set WorkRng = Intersect(Application.ActiveSheet.Range("D:D"), Target)
【问题讨论】:
-
我会使用
Me而不是Application.ActiveSheettbh。 -
您也可以使用
DateAddfunction 而不是在Now中添加 365 天 - 闰年时不会导致错误。 -
不要担心约会的事情。只是让代码在多个页面上工作是我的目标
-
如果“指定了来自不同工作表的一个或多个范围”,
Intersect将失败。由于您使用的是 Worksheet_Change 事件,Target应始终位于ActiveSheet- 但是,Me更可取。
标签: excel vba events excel-2007