macros来存储RTD数据

我已经写了这个简单的代码,我发现使用Excelmacros 。

Private Sub Macro3(ByVal Target As Range) If Not Intersect(Target, Range("A2:A2")) Is Nothing Then Application.EnableEvents = False Range("A3:A31").Value = Range("A2:A30").Value Application.EnableEvents = True End If End Sub 

但创build后,我无法findmacros,也不能通过VBA编辑器运行它。 请帮助我。 我正在使用ms office 2010

编辑

我真正想要实现的。

我的表格A1单元格的价值不断变化。 只要它改变,我希望它被复制到A2和A2的价值A3等等…

video01:00解释,

  • 代码必须放置在Sheet1(或用于捕获服务器数据的工作表)中,这意味着您必须在VBA的左上angular项目浏览器窗格中双击工作表的名称以访问其代码窗口

  • 您必须完全按照Youtube上所示使用Sub()的名称… Private Sub Worksheet_Change(ByVal Target As Range) 。 您可以手动input代码,也可以从代码窗口上方的select框中select“工作表”和“更改”。 当你select“Worksheet”(包括End Sub )时,删除最终被自动创build的“Sub Selection_Change”Sub这确保了每当工作表中的一个单元(=任意)改变时,macros就被触发。

  • If Not Intersect(...)在意只有某个单元格的更改由其他代码处理

  • 如果您在第一行设置断点 – Private Sub ... – 使用debugging/切换断点或{F9} – 您将能够使用{F8}单步执行代码并观看

编辑:

一些谷歌search后… =RTD()不会触发更改macros(许多令人失望) – 所以需要不同的策略。

=RTD()不时地(时间间隔X =RTD()获取数据,并将其放入与当前[A2]不同的单元格C中。 你可以创build一个代码块来执行每个X / 2并检查是否C <> [A2] …如果是将C移动到[A2]并将旧值复制下来。

例:

创build一个“TimerFunctions”模块并添加此代码

 Public IsTimer As Boolean Sub TimerSet(IntervalSec As Date, TimerProcName As String) If IsTimer Then Application.OnTime Now() + IntervalSec, TimerProcName, , True End Sub Sub TimerAction() ' look for new value ... eg compare RTD cell [A1] with last stored value [A2] If [A2] <> [A1] Then ' your original code - move whole stack one down Range("A3:A31").Value = Range("A2:A30").Value ' copy new value on top of stack [A2] = [A1] End If ' do it again in 2 seconds TimerSet TimeValue("00:00:02"), "TimerAction" End Sub 

工作表Sheet1

 Private Sub Worksheet_Activate() IsTimer = True TimerSet TimeValue("00:00:02"), "TimerAction" End Sub Private Sub Worksheet_Deactivate() IsTimer = False End Sub 

现在每隔2秒检查一次RTDfunction是否有新值,如果发现该值保存在堆栈的顶部,而剩下的30则被按下1。 这工作尽快,只要你在工作表中。 如果更改为Sheet2(=取消激活Sheet1),则此机制将停止,直到您返回到Sheet1(=激活工作表)。

如果这个计时的事情应该一直运行,那么你必须付出更多的努力来处理你的细胞,这样即使工作表是另一个工作表,所有这些工作都是有效的。

你也可以尝试通过实现下面的macros

 Sub Macro() Dim n As Integer n = 1 Do Application.EnableEvents = False Range("A2").EntireRow.Insert Range("A2").Value = Range("A1").Value Application.Wait Now + TimeValue("0:00:10") Application.EnableEvents = True Loop Until n != 1 End Sub 

现在应该能够以定期的时间间隔存储数据列虎钳。