如何在一张工作表上运行 2 个 Private Sub Worksheet_Change?
Posted
技术标签:
【中文标题】如何在一张工作表上运行 2 个 Private Sub Worksheet_Change?【英文标题】:How to run two Worksheet_Change on one worksheet? 【发布时间】:2022-01-23 11:04:01 【问题描述】:我对 VBA 知之甚少,所以只是寻求一些指导。
我有以下内容,效果很好,在 1 列中更改一个数字,右侧的列添加日期和时间。我还想在第 6 列上运行此代码,尝试了很多东西 Else
、ElseIf
、End If
等,但没有运气,我最接近的是第二个代码,有人可以告诉我我在哪里请错过正确的代码。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 3 Then Exit Sub
With Target.Offset(0, 1)
.Value = Now
.NumberFormat = "MM/DD/YYYY hh:mm AM/PM"
End With
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 3 Then Exit Sub
With Target.Offset(0, 1)
.Value = Now
.NumberFormat = "MM/DD/YYYY hh:mm AM/PM"
End With
If Target.Column <> 6 Then Exit Sub
With Target.Offset(0, 1)
.Value = Now
.NumberFormat = "MM/DD/YYYY hh:mm AM/PM"
End With
End Sub
【问题讨论】:
非常感谢你们,提供的所有解决方案都是一个很好的学习曲线,我选择使用简化版,因为它的代码更少,(这总是好的),我非常精通 Applescript ,所以我可以弄清楚它是如何工作的,再次感谢 【参考方案1】:如果目标列不是 3,您的第一个 'If' 会阻止脚本继续执行,因此当列是 6 时它不会执行。
你所要做的就是改变主意,为想要的执行创造条件。
If Target.Column = 3 Then
With Target.Offset(0, 1)
.Value = Now
.NumberFormat = "MM/DD/YYYY hh:mm AM/PM"
End With
ElseIf Target.Column = 6 Then
With Target.Offset(0, 1)
.Value = Now
.NumberFormat = "MM/DD/YYYY hh:mm AM/PM"
End With
End If
或简化:
If Target.Column = 3 Or Target.Column = 6 Then
With Target.Offset(0, 1)
.Value = Now
.NumberFormat = "MM/DD/YYYY hh:mm AM/PM"
End With
End If
【讨论】:
由于第 3 列和第 6 列的代码相同,我认为没有理由不将其简化为If Target.Column = 3 or Target.Column = 6 Then
并删除 ElseIf
-branch
我尝试遵循@Budgie 的逻辑,但这是一个更好的解决方案。以上是关于如何在一张工作表上运行 2 个 Private Sub Worksheet_Change?的主要内容,如果未能解决你的问题,请参考以下文章
如果不同工作表上的值匹配,则将数据从一张工作表复制到另一张工作表
自动填充活动工作表后,另一张工作表上的自动填充不起作用(无错误)
在 VBA 中,我如何创建一个匹配 2 张工作表中的日期并将数据作为值粘贴到匹配日期的代码?不能为此使用 vlookup