1

我已经编写了这个简单的代码,我在使用 excel 宏时发现了它。

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 等等......

4

2 回答 2

2

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

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

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

  • If Not Intersect(...)关心只有某个单元格的更改由其余代码处理

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

编辑:

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

=RTD()不时地获取数据(时间间隔 X)并将其放入与当前 [A2] 不同的单元格 C 中。您可以创建一个代码块,它执行每个 X/2 并检查是否 C <> [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

表 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(= 激活工作表)。

如果这个定时的事情应该一直运行,你必须付出更多的努力来解决你的单元格,这样即使活动表是另一个,这一切也能正常工作。

于 2013-08-26T07:37:09.833 回答
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

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

于 2013-09-03T10:07:49.377 回答