首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >宏来存储RTD数据

宏来存储RTD数据
EN

Stack Overflow用户
提问于 2013-08-23 14:54:34
回答 2查看 3.2K关注 0票数 1

我编写了这段我在使用excel宏上找到的简单代码。

代码语言:javascript
复制
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,等等.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-03 10:07:49

还可以通过实现以下宏来尝试

代码语言:javascript
复制
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

现在应该能够在一个周期性的时间间隔存储数据列虎钳。

票数 0
EN

Stack Overflow用户

发布于 2013-08-26 07:37:09

正如视频在01:00解释的那样,

  • 代码必须放置在Sheet1 (或用于捕获服务器数据的工作表)中,这意味着您必须在VBA的左上角项目资源管理器窗格中双击工作表的名称才能访问其代码窗口。
  • 您必须使用Sub()的名称,如Youtube . Private Sub Worksheet_Change(ByVal Target As Range)所示。您可以手动键入代码,也可以从代码窗口上方的选择框中选择“工作表”和“更改”。当您选择" worksheet“(包括Selection_Change)时,删除"Sub End Sub”Sub最终会自动创建,这将确保每次工作表中的(=any)单元格发生更改时都会触发宏。
  • If Not Intersect(...)关心的是,代码的其余部分只处理某个单元格的更改。
  • 如果在第一行设置断点- Private Sub ... -使用Debug/Toggle断点或{F9} -则可以使用{F8}逐步遍历代码并观看

编辑:

在谷歌搜索之后. =RTD()不会触发宏的改变(这让很多人失望)--所以需要不同的策略。

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

示例:

创建一个模块"TimerFunctions“并添加以下代码

代码语言:javascript
复制
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

Sheet1

代码语言:javascript
复制
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 (= activate )。

如果这个定时的事情应该一直运行,你必须在寻址你的细胞上付出更多的努力,这样即使酸化片是另一个,这一切也是有效的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18405912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档