宏来存储RTD数据

时间:2013-08-23 14:54:35

标签: excel excel-vba office-2010 vba

我写了这个简单的代码,我在using excel macro上找到了。

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

但创建后我无法找到宏也无法通过VBA编辑器运行它。 请帮帮我。我正在使用ms office 2010

编辑

我真正想要实现的目标。

我的表格A1单元格中的值不断变化。一旦它改变我希望它被复制到A2和A2的值到A3等等......

2 个答案:

答案 0 :(得分:2)

视频在01:00解释,

  • 代码必须放在Sheet1(或用于捕获服务器数据的工作表)中,这意味着您必须在VBA的左上角项目资源管理器窗格中双击工作表的名称才能访问其代码窗口< / p>

  • 您必须使用完全如Youtube上显示的Sub()名称... Private Sub Worksheet_Change(ByVal Target As Range)。您可以手动键入代码,也可以从代码窗口上方的选择框中选择“工作表”和“更改”。选择“工作表”(包括End Sub)时,最终会自动删除“Sub Selection_Change”子项。这可以确保每次工作表中的(= any)单元格发生更改时都会触发宏。

  • If Not Intersect(...)关心的是,其他代码只处理某个单元格的更改

  • 如果在第一行设置断点 - Private Sub ... - 使用Debug / Toggle Breakpoint或{F9} - 您将能够使用{F8}单步执行代码并观察

修改

经过一些谷歌搜索... =RTD()不会触发更改宏(很多人都很失望) - 因此需要不同的策略。

=RTD()时不时地取出数据(时间间隔X)并将其放入与当前[A2]不同的单元格C中。您可以创建一个执行每个X / 2的代码块,并检查C&lt;&gt; [A2] ......如果是,则将C移至[A2]并将旧值复制下来。

示例:

创建一个模块“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 ... e.g. 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

Sheet 1中

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

Private Sub Worksheet_Deactivate()
    IsTimer = False
End Sub

现在每2秒检查一次RTD功能的新值,如果找到,则将值保存在堆栈顶部,而剩下的30按下1。这很快就可以在工作表中使用。如果更改为Sheet2(=取消激活Sheet1),则此机制将停止,直到您返回到Sheet1(=激活工作表)。

如果这个定时的事情应该一直运行,你必须花费更多的精力来解决你的单元格,这样即使活动表是另一个,所有这一切都有效。

答案 1 :(得分:0)

您也可以尝试实现以下宏

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

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