VBA自动刷新

我用Power Query调用图灵机器人api做了一个机器人,很有意思,大家可以先下载附件体验下。
只要输入问题,机器人便会回答你,像小黄鸡一样。

至于怎么做的先不管,这不是本文的主题。但在使用的过程中很容易发现一个不太方便的地方:每输入一次问题,需要手动点击刷新才能看到机器人的回复,而不会自动变化。
在实际工作中我们也经常会有这种需求,希望用Power Query或Power Pivot做出来的表格,能够当某个单元格的值变化时,自动刷新一次,那么可以用VBA来完成。

在工作表的Change事件中,Target表示更改的单元格,使用Address属性可以获取到更改单元格的位置,类型为文本。
比如当你更改了A1单元格的值,Target.Address便返回"$A$1"。
所以逻辑很简单,我们输入问题的单元格为B4,如果返回的值="$B$4",那么就执行刷新,否则不刷新。
Alt+F11打开VBE,在需要自动刷新的sheet中写入以下代码:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$4" Then
    ActiveWorkbook.RefreshAll
End If
End Sub

除了Address属性,还可以使用Column和Row属性,获取到更改单元格的行和列,把触发条件限定在某个范围内,比如Target.Column < 5 And Target.Row < 4,那么在A1:D3范围内的任意一个单元格值被修改都会触发。

上面用的是ActiveWorkbook.RefreshAll,表示数据选项卡下的全部刷新,如果不要全部刷新而是刷新某一个表,那么可以改成:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$4" Then
    Range("自动刷新").ListObject.QueryTable.Refresh
End If
End Sub

把Range中的表名换成要刷新的表名即可。

附件

10 Replies to “VBA自动刷新”

  1. 玩不动啊 提示exception of type 'Microsoft.Mashup.Engine.Interface.ResourceAccessForbiddenException' was thrown.

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注