Excel宏刷新数据,然后格式化单元格

时间:2019-02-01 15:45:28

标签: excel vba formatting powerquery

我有一个包含数据透视表的工作表,数据是由另一个系统输出的文件填充的。

在Power Query中,我对数据进行了转换,特别是使用字段之一来构造URL。

"'=HYPERLINK(""" & "https://website.com/"&[Code] & """, """ & [Code] & """) "

当数据位于数据透视表中时,我需要操纵格式以使其正确显示。

在Excel中,我使用查找和替换功能将字符串转换为显示友好名称的正确URL(并调整列的大小)。

Sub Macro1()
    Cells.Replace What:="'=", Replacement:="=", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    Columns("A:A").EntireColumn.AutoFit
End Sub

刷新数据意味着上面的宏需要再次运行。

我很想为用户自动化。但是,运行以下宏看起来首先要进行格式化然后刷新,我在做什么错了?

Sub Macro2()
    ActiveWorkbook.Connections("Query - XXX"). _
        Refresh
'
    Cells.Replace What:="'=", Replacement:="=", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    Columns("A:A").EntireColumn.AutoFit
End Sub

注意,宏的两个部分可以独立正确地工作,而不能按上述方式结合使用。

1 个答案:

答案 0 :(得分:1)

如果您发现该查询的数据功能区中的“连接”部分,打开它的属性,并取消选中“背景刷新”选项,将暂停所有VBA代码,直到它完成令人耳目一新。该属性也可以在VBA设置。

Sub Macro2()

    ActiveWorkbook.Connections("Query - XXX").OLEDBConnection.BackgroundQuery = False
    ActiveWorkbook.Connections("Query - XXX").Refresh

    Cells.Replace What:="'=", Replacement:="=", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    Columns("A:A").EntireColumn.AutoFit
End Sub