业余人士 - 抱歉,如果这很简单,我没有得到它。
因此,在我的工作簿中,我有一个计时器,在A2中每3分钟更新一次。在B2,C2,D2等中,我有来自插件的波动值,刷新率非常快。
我需要一个能够记录" log" B2,C2等中的值作为新行,每次A2中的值发生变化时(也有来自定时器的时间)。这是我到目前为止(除了计时器宏,它工作得很好):
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等的值时,一切都很疯狂,它开始创建新行(如果你想自己尝试这个,放{{1作为其中一个值 - 它完美地模拟了我面临的问题。)
回到我的问题,当A2发生变化时,如何让宏只创建一个新行?
欢迎任何帮助,谢谢您的时间!
答案 0 :(得分:1)
我已经对此进行了测试,它完成了您的预期(使用以下代码替换您的代码并删除workheet_calculate)另外您应该将Sheet1更改为Sheet的任何内容,甚至更改为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