我有一个12列宽,多行深的Excel工作表。我正在尝试编写一个Worksheet_Change Sub,它将使工作表使用Now函数自动将当前日期/时间输入到列L(或12)中,与A-K列或1- 11列中的单元格中的数据被更改的行相同。
到目前为止,我已经尝试使用Offset函数来完成此任务,但我只能成功地完成相对更新,而不是部分绝对更新。我尝试使用Choose函数,以便根据用户的目标单元格替换列移位的offset函数变量,但我也无法使用它。现在我正在尝试使用这个,但无济于事:
Sub Worksheet_Change(ByVal Target As Range)
Dim WorkRng As Range
Offst As Integer
End Type
Set WorkRng = Range("A:K")
If Not Application.Intersect(WorkRng, Range(Target.AddressLocal)) _
Is Nothing Then
If Target.Column = 1 Then Offst = 11
ElseIf Target.Column = 2 Then Offst = 10
ElseIf Target.Column = 3 Then Offst = 9
ElseIf Target.Column = 4 Then Offst = 8
ElseIf Target.Column = 5 Then Offst = 7
ElseIf Target.Column = 6 Then Offst = 6
ElseIf Target.Column = 7 Then Offst = 5
ElseIf Target.Column = 8 Then Offst = 4
ElseIf Target.Column = 9 Then Offst = 3
ElseIf Target.Column = 10 Then Offst = 2
ElseIf Target.Column = 11 Then Offst = 1
End If
With Offst
Target.Offset(0, Offst).Value = Now
Target.Offset(0, Offst).NumberFormat = "dd-mmm-yyyy AM/PM"
End With
End Sub
我对VBA非常基础,而且我没有太多的时间。我在互联网上搜索了很多,我想我很擅长耗尽搜索引擎,但我找不到与我的情况直接相关的东西。我只能找到人们更新单列数据的示例,而不是范围。
任何帮助都是非常感谢的!感谢您抽出宝贵的时间!
发布于 2020-01-23 14:48:03
不需要偏移量。您可以对L
进行硬编码,并使用Intersect
和Target.EntireRow
来更新列L中的相应行。
简化后,整个代码可以是:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Me.Range("A:K"), Target) Is Nothing Then Exit Sub
Intersect(Me.Columns("L"), Target.EntireRow).Value = Now
Intersect(Me.Columns("L"), Target.EntireRow).NumberFormat = "dd-mmm-yyyy AM/PM"
End Sub
https://stackoverflow.com/questions/59881122
复制相似问题