【问题标题】:Run a macro automatically every minutes每分钟自动运行一个宏
【发布时间】:2017-10-23 09:36:17
【问题描述】:

早上好 基本上我是从网络 (abcbourse.com) 导入索引数据,并让它每分钟刷新一次。

我创建了一个宏来记录每个索引的历史值(从屏幕截图中看到的 CAC40 开始,每分钟都会在 E 列上出现新值(每次自动刷新数据时) 这是我的宏,运行良好(参见屏幕截图的 E 列):

Sub Historical_Index()
    Dim LastLRow As Integer, CurrentIndexValue As Single

    LastRow = Range("E" & Rows.Count).End(xlUp).Row
    CurrentIndexValue = Range("B1")

    Do
        If Not IsEmpty(CurrentIndexValue) = True Then
            Cells(LastRow + 1, 5).Value = CurrentIndexValue
            Exit Do
        End If   
    Loop
End Sub

我的问题是,我希望每次刷新数据时都运行这个宏。我最初使用了一个

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Address = "$B$2" Then
        Application.EnableEvents = False
        Call Historical_Index
        Application.EnableEvents = True
    End If
End Sub

这确实是在调用我的宏,但前提是我手动更改 B2。如果我等待数据自动刷新,则不会调用我的宏(即使数据已更改)。

我想知道如何才能使这个过程自动化,我需要你的帮助。

提前致谢
ps:不知道有没有关系,但是我的宏保存在VBAProject(“this document”) > Sheet2(Sheet2)

【问题讨论】:

  • QueryTable 有一个AfterRefresh 事件,记录在here - 您可以创建一个类来捕获该事件并使用处理程序来触发您的宏。

标签: vba excel


【解决方案1】:

请尝试以下范围B1:B8:

Private Sub Worksheet_Change(ByVal Target As Range) 
  If Not Intersect(Target, Sheet1.Range("B1:B8")) Is Nothing Then
        Application.EnableEvents = False
        Call Historical_Index
        Application.EnableEvents = True
    End If
End Sub

或者如果你只想检查B2:

Private Sub Worksheet_Change(ByVal Target As Range) 
  If Not Intersect(Target, Sheet1.Range("B2")) Is Nothing Then
        Application.EnableEvents = False
        Call Historical_Index
        Application.EnableEvents = True
    End If
End Sub

【讨论】:

  • Nikolaos Polygenis > 我只尝试了你的 B1 代码,这似乎有效。
  • 我是这个网站的新手,你的意思是我需要评价你的回答吗?如果是这样,我该怎么办?
  • 这就是我所做的,它显示一个“1”,而在一秒钟后显示一个“0”
猜你喜欢
  • 2015-05-10
  • 1970-01-01
  • 2012-08-26
  • 2017-04-09
  • 1970-01-01
  • 2023-03-16
  • 2015-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多