当用户在特定列范围内输入数据时,VBA 代码能否更新 Excel 工作表列中的单元格?
Can VBA code update a cell in a column of an Excel worksheet when a user enters data in a specific column range?
我有一个 Excel 工作表,它有 12 列宽和许多行深。我正在尝试编写一个 Worksheet_Change Sub,它将导致工作表使用 Now 函数自动将当前 Date/Time 放入数据已更改的同一行中的列 L(或 12)在 A-K 列或 1 到 11 列的单元格中。
到目前为止,我已经尝试使用 Offset 函数来完成此操作,但我只能在进行相对更新而不是部分绝对更新时找到成功。我尝试使用 Choose 函数来根据用户定位的单元格替换列偏移的偏移函数变量,但我也无法让它工作。现在我正在尝试使用它,但无济于事:
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 非常了解,我没有多少时间可以学习。我已经在互联网上搜索了很多,我想我很擅长用尽搜索引擎,但我找不到与我的情况直接相关的东西。我只能找到人们更新单列数据而不是范围的例子。
非常感谢任何帮助!感谢您抽出宝贵时间!
不需要偏移量。您可以对 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
我有一个 Excel 工作表,它有 12 列宽和许多行深。我正在尝试编写一个 Worksheet_Change Sub,它将导致工作表使用 Now 函数自动将当前 Date/Time 放入数据已更改的同一行中的列 L(或 12)在 A-K 列或 1 到 11 列的单元格中。
到目前为止,我已经尝试使用 Offset 函数来完成此操作,但我只能在进行相对更新而不是部分绝对更新时找到成功。我尝试使用 Choose 函数来根据用户定位的单元格替换列偏移的偏移函数变量,但我也无法让它工作。现在我正在尝试使用它,但无济于事:
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 非常了解,我没有多少时间可以学习。我已经在互联网上搜索了很多,我想我很擅长用尽搜索引擎,但我找不到与我的情况直接相关的东西。我只能找到人们更新单列数据而不是范围的例子。
非常感谢任何帮助!感谢您抽出宝贵时间!
不需要偏移量。您可以对 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