如何在一张工作表上运行 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 列上运行此代码,尝试了很多东西 ElseElseIfEnd 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

Excel 一张工作表变动后,怎么自动更新另一张表中的数据

Excel VBA 评估另一张工作表中的公式

同一个工作簿中的两张工作表调试错误?