【发布时间】:2020-02-14 13:04:54
【问题描述】:
我有一个大型数据集,其中包含许多要更新的不同列。我正在尝试创建一种方法来标记日期/时间,以了解上次更新列的时间。我需要为 4 个单独的实例执行此操作。
我遇到的问题是它似乎对 VBA 的第一个实例工作正常,但无论如何都不会在另一列上执行。请在下面查看我的完整代码示例:
Sub Worksheet_Change(ByVal Target As Range)
Dim myTableRange1 As Range
Dim myDateTimeRange1 As Range
Dim myUpdatedrange1 As Range
Set myTableRange1 = Range("S:S")
If Intersect(Target, myTableRange1) Is Nothing Then Exit Sub
Set myDateTimeRange1 = Range("A" & Target.Row)
Set myUpdatedrange1 = Range("X" & Target.Row)
If myDateTimeRange1.Value = "" Then
myDateTimeRange1.Value = Now
End If
myUpdatedrange1.Value = Now
End Sub
Sub Worksheet_Change2(ByVal Target As Range)
Dim myTableRange2 As Range
Dim myDateTimeRange2 As Range
Dim myUpdatedrange2 As Range
Set myTableRange2 = Range("T:T")
If Intersect(Target, myTableRange2) Is Nothing Then Exit Sub
Set myDateTimeRange2 = Range("zz" & Target.Row)
Set myUpdatedrange2 = Range("Y" & Target.Row)
If myDateTimeRange2.Value = "" Then
myDateTimeRange2.Value = Now
End If
myUpdatedrange2.Value = Now
End Sub
****更新****
我也尝试将这段代码合并在一起,如下所示:
Sub Worksheet_Change(ByVal Target As Range)
Dim myTableRange1 As Range
Dim myDateTimeRange1 As Range
Dim myUpdatedrange1 As Range
Dim myTableRange2 As Range
Dim myDateTimeRange2 As Range
Dim myUpdatedrange2 As Range
Set myTableRange1 = Range("S:S")
Set myTableRange2 = Range("T:T")
If Intersect(Target, myTableRange1) Is Nothing Then Exit Sub
If Intersect(Target, myTableRange2) Is Nothing Then Exit Sub
Set myDateTimeRange1 = Range("A" & Target.Row)
Set myUpdatedrange1 = Range("X" & Target.Row)
Set myDateTimeRange2 = Range("zz" & Target.Row)
Set myUpdatedrange2 = Range("Y" & Target.Row)
If myDateTimeRange1.Value = "" Then
myDateTimeRange1.Value = Now
If myDateTimeRange2.Value = "" Then
myDateTimeRange2.Value = Now
End If
myUpdatedrange1.Value = Now
End If
myUpdatedrange2.Value = Now
End Sub
这导致两者都不起作用。
我是 VBA 新手,因此我们将不胜感激。谢谢你
【问题讨论】:
-
每张工作表只能有一个
Worksheet_Change事件,所以你需要结合你的代码。 -
谢谢你会按照
Sub Worksheet_Change(ByVal Target As Range) Dim myTableRange1 As Range Dim myTableRange2 As Range的方式写然后对每个部分重复这个吗? -
是的,您必须更改相交线以覆盖两列,然后根据更改的列设置一个块。如果 Target 是多个单元格,您将需要遍历该范围(或者可以在代码
if target.count>1 then exit sub中排除该范围)。 -
@SJR 我已经用修改后的代码更新了我的问题,结果没有产生任何结果
-
使用这个很酷的indenter,你会发现你的
End Ifs 不是都在正确的位置。