VBA代码,用于在单元格更改时使用当前日期自动更新单元格,但不起作用

VBA代码,用于在单元格更改时使用当前日期自动更新单元格,但不起作用,vba,excel,Vba,Excel,我有一张工作表,每天都会更改某些行的统计信息,我必须知道统计信息何时会更改。为了让我的生活更轻松,我在互联网上找到了以下VBA代码: Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("R1:R2000")) Is Nothing Then Exit Sub Target.Offset(0, 1) = Date End Sub 代码运行得非常好。每次我更改R列上的de

我有一张工作表,每天都会更改某些行的统计信息,我必须知道统计信息何时会更改。为了让我的生活更轻松,我在互联网上找到了以下VBA代码:

Private Sub Worksheet_Change(ByVal Target As Range)

    If Intersect(Target, Range("R1:R2000")) Is Nothing Then Exit Sub
    Target.Offset(0, 1) = Date

End Sub
代码运行得非常好。每次我更改R列上的de stats,它都会更新S列上的日期

问题是,我在链接到外部源(Oracle数据库)的表中更改了此统计信息,如果我尝试刷新该表,它会将该表的整个内容更改为不同的日期。我现在要做的是,每次我必须刷新表时,我只是注释整个VBA代码

我是否可以对代码进行任何更改,以便在刷新表时它不会更新

编辑1:

Sub RefreshOracleTable()
    Application.EnableEvents = False


    If Intersect(Target, Range("R1:R200000")) Is Nothing Then Exit Sub
    Target.Offset(0, 1) = Date

    ThisWorkbook.Sheets("wsTables").ListObjects("OracleTable").QueryTable.Refresh BackgroundQuery:=Application.EnableEvents = True

End Sub
禁用事件,然后刷新表 可以编写Sub,用于刷新表。刷新前,您将禁用excel事件。像这样:

Sub RefreshOracleTable
    Application.EnableEvents = False
    'the refresh itself code something like
    Thisworkbook.Sheets("wsTables").ListObjects("OracleTable").QueryTable.Refresh BackgroundQuery:=False
    Application.EnableEvents = TRUE
End Sub
使用键盘快捷键手动输入日期 考虑使用键盘快捷键手动输入当前日期
CTRL
+

现状说明及建议解决方案

我想建议使用一个全局变量或类似变量来测试表刷新,但这要优雅得多。我会这样做,然后用一个按钮或类似的东西,@branislav你是说像我在编辑1上做的那样?因为我试过了,但没用。顺便说一句,我不知道那条捷径。不,那不是我的重点。日期更新仍将在
工作表\u Change
事件中,没有更改。关键是,您将不只是使用一些标准的刷新方法(例如,右键单击>刷新)刷新表,而是使用禁用的事件将其封装在另一个子系统中。发生的情况:手动刷新表格时,excel会触发工作表更改事件并运行事件代码。为了防止这种情况,我们使用
EnableEvents=False
。当您在这一行之后刷新表时,不会触发任何事件,因此不会更新任何日期。@ViníciusAffonso,我添加了一些图表来更好地解释这个问题。愿它有帮助。