Excel VBA:指示用户PivotCaches.create的进度

时间:2013-12-11 03:21:24

标签: excel vba excel-vba

我已经环顾了一会儿,却找不到这个问题的答案。在我的VBA中,我有一行创建一个新的pivottable并将其插入工作表中,如此 -

Application.StatusBar = MyPC.RecordCount

ActiveWorkbook.PivotCaches.Create(SourceType:=xlExternal, SourceData:= _
   ActiveWorkbook.Connections("ACCESS2"), Version:=xlPivotTableVersion14). _
   CreatePivotTable TableDestination:="Dashboard!R20C1", TableName:= _
   "PTDashboard", DefaultVersion:=xlPivotTableVersion14

Application.StatusBar = False

当我处于构建状态的早期阶段时,状态栏会显示一个计数器,显示它从Connection连接到pivotCache的记录数。它已经出于某种原因,我试图模仿它正在做的事情(它可能是Excel 2013的事情,因为我一直在家庭计算机上的这个项目上工作)。

因为可能有几十万条记录,所以可能需要一分钟,我希望向用户表明它正在发生。

我通常在一个循环中这样做,但由于我没有那个选项,我有点难过。在后台的某个地方我可以从中读取这些数据吗?我希望我已经足够清楚了。提前谢谢。

2 个答案:

答案 0 :(得分:2)

我认为您无法以您希望的方式访问数据,但为了避免应用程序挂起或代码停止工作的外观,您可以执行以下操作。< / p>

创建一个小UserForm,并在其上放置一个标签,上面有一条消息,表明您的宏正在做某事,例如“请等待Pivotecache加载...这可能需要最多1分钟。“

然后,在调用PivotCache之前立即显示vbModeless,然后立即将其卸载。

我用循环测试了这个,但我认为它应该适用于你正在做的事情,例如:

Sub Test()

    UserForm1.Show vbModeless

    ActiveWorkbook.PivotCaches.Create(SourceType:=xlExternal, SourceData:= _
        ActiveWorkbook.Connections("ACCESS2"), Version:=xlPivotTableVersion14). _
        CreatePivotTable TableDestination:="Dashboard!R20C1", TableName:= _
        "PTDashboard", DefaultVersion:=xlPivotTableVersion14

    Unload UserForm1

End Sub

答案 1 :(得分:0)

你可以尝试一下吗?

Application.StatusBar = "Creating Pivot... Please be Patient"
DoEvents

ActiveWorkbook.PivotCaches.Create(SourceType:=xlExternal, SourceData:= _
ActiveWorkbook.Connections("ACCESS2"), Version:=xlPivotTableVersion14). _
CreatePivotTable TableDestination:="Dashboard!R20C1", TableName:= _
"PTDashboard", DefaultVersion:=xlPivotTableVersion14

Application.StatusBar = "Pivot Created!"
DoEvents