所以我有一个其他人创建的工作簿,其中已经创建了连接。其中一个连接从 Access 数据库检索数据,然后将其输出到数据透视表。
如果我去数据 > 现有连接 > 选择我的连接(访问连接) > 单击打开 > 表 > 新建工作表,它将输出整个表格,这正是我想要的;但是,我想使用 VBA 自动执行此操作。如果我使用宏录制器,它最终会得到:
Sub Macro1()
'
' Macro1 Macro
'
'
ActiveWorkbook.Worksheets.Add
With ActiveSheet.ListObjects.Add(SourceType:=4, Source:=ActiveWorkbook. _
Connections("Access G183"), Destination:=Range("$A$1")).TableObject
.RowNumbers = False
.PreserveFormatting = True
.RefreshStyle = 1
.AdjustColumnWidth = True
.ListObject.DisplayName = "Table_Data"
.Refresh
End With
End Sub
每当我再次运行宏时,它都会在 .ListObject.DisplayName 或 .Refresh 行处出错。如果我注释掉这些,那么它就不会加载任何数据。有人找到过自动化的方法吗?棘手的部分是工作簿不再具有原始数据库。
答案1
我能找到的最佳解决方案是执行以下操作:
- 在新工作表上的原始工作簿中使用 VBA 创建数据透视表
- 使数据透视表在原始工作簿中完全符合我的要求
- 通过将数据透视表所占的列和行复制到新选项卡来“展平”数据透视表。这样可以消除任何不必要的数据,从而不浪费内存。如果我不执行此步骤,我的计算机实际上会耗尽用于复制整个数据集的内存。
- 将展平的工作表复制到新的工作簿。
虽然需要做一些工作,但这对我来说是有效的,所以我希望它对其他人也有效。