当A中有变化时,Excel将创build一个新行(来自第一行的数据)

这里的业余 – 抱歉,如果这很简单,我不明白。

所以在我的工作簿中,我有一个定时器,在A2中每3分钟更新一次。 在B2,C2,D2等我有插件的价值波动,有一个非常快的刷新率。

我需要一个macros,它会将B2,C2等中的值作为一个新行logging下来,每当A2中的值发生变化时(也就是从定时器开始的时间)。 这是我到目前为止(不包括计时器macros,它的工作原理):

Private Sub Worksheet_Calculate() Worksheet_Change Range("A2") End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A2")) Is Nothing Then Application.EnableEvents = False Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Value = Range("A2").Value Application.EnableEvents = True Application.EnableEvents = False Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Value = Range("B2").Value Application.EnableEvents = True Application.EnableEvents = False Range("C" & Rows.Count).End(xlUp).Offset(1, 0).Value = Range("C2").Value Application.EnableEvents = True Range("D" & Rows.Count).End(xlUp).Offset(1, 0).Value = Range("D2").Value Application.EnableEvents = True Range("E" & Rows.Count).End(xlUp).Offset(1, 0).Value = Range("E2").Value Application.EnableEvents = True Range("F" & Rows.Count).End(xlUp).Offset(1, 0).Value = Range("F2").Value Application.EnableEvents = True Range("G" & Rows.Count).End(xlUp).Offset(1, 0).Value = Range("G2").Value Application.EnableEvents = True Range("H" & Rows.Count).End(xlUp).Offset(1, 0).Value = Range("H2").Value Application.EnableEvents = True End If End Sub 

这个代码的问题是,当我使用插件来放置B2,C2等的值,一切都变得疯狂,并开始创build新的行(如果你想自己尝试这个,put =RANDBETWEEN(40,80)作为价值之一 – 它完美地模拟了我面对的问题)。

回到我的问题,如何使macros只创build一个新的行,当A2有变化?

欢迎任何帮助,谢谢你的时间!

我已经testing了这一点,它做了你所期望的(用下面的代码replace你的代码,并删除worksheet_calculate)另外,你应该改变Sheet1到你的工作表,甚至是ActiveSheet:

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Sheet1.Range("A2").Address Then 'check to see if changes happend on A2 Application.EnableEvents = False Sheet1.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheet1.Range("A2").Value 'copy the row from Row 2 to next empty row Sheet1.Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheet1.Range("B2").Value Sheet1.Range("C" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheet1.Range("C2").Value Sheet1.Range("D" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheet1.Range("D2").Value Sheet1.Range("E" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheet1.Range("E2").Value Sheet1.Range("F" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheet1.Range("F2").Value Sheet1.Range("G" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheet1.Range("G2").Value Sheet1.Range("H" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheet1.Range("H2").Value Application.EnableEvents = True End If End Sub