【问题标题】:Creating Four Separate Pivot Tables from Four Excel Sheets in Access VBA在 Access VBA 中从四个 Excel 工作表创建四个单独的数据透视表
【发布时间】:2018-12-23 00:51:19
【问题描述】:

我有四个从 Access 导出的 Excel 工作表。我为其中一个工作表创建了一个完整的查询(数据透视缓存和数据透视表)。我需要再创建 3 个单独的数据透视表,全部放在同一个工作簿中。

我尝试将其分解为子函数,因此我保存了 Excel 工作簿并将其关闭,结束了子函数,然后通过打开 Excel 工作簿并使用大部分相同的查询来建立新的数据透视缓存来开始另一个。

在制作新的数据透视缓存时出现错误

1004 应用程序或未定义错误

见下面的代码。 (它在用于创建第一个数据透视表的上一个子函数中时有效。)

Set xlPC = xlbook.PivotCaches.Create(xlDatabase, "Superdash_tbl", xlPivotTableVersion15)
xlSheet.Select
xlbook.TableStyles("PivotStyleMedium2").Duplicate ("CM Style - Dk Blue")
'''''The above line is what is causing the error''''''

我不认为 For 循环会起作用,因为每个数据透视表的结构和标签都不同。

如何包含这四个数据透视表中的每一个?

【问题讨论】:

    标签: vba ms-access runtime-error pivot-table


    【解决方案1】:

    这个答案可能更直接在主题上,因为 [我认为] 我理解你的问题 - 但是我的 other answer 代表我对自动化报告的更简单方法的看法,其中包括一个或多个数据透视表..

    简短回答:创建第二个数据透视表与创建原始数据透视表完全相同。

    您似乎试图找到一种方法来复制现有数据透视表,这导致您使用the TableStyle.Duplicate method(在您的示例中)。然而,正如documentation 所说,它:

    复制 TableStyle 对象并返回对新副本的引用。

    ...此方法与数据透视表无关。 (请记住,数据透视表和表格不是一回事。)


    无论您采取什么步骤来创建第一个数据透视表,使用新目标再次运行它们,您将拥有另一个数据透视表。

    我不知道我会推荐什么方法来复制然后更改数据透视表,尽管我不建议以编程方式构建数据透视表......因此我建议改为构建自动化模板。

    请参阅链接,包括 Pivot Table object 的文档,包括可用于数据透视表的所有适用方法。如果您要让大量数据透视表查看相同的数据,您可以考虑重新使用数据透视缓存,但全方位的编程数据透视表非常先进,因此容易产生编码复杂性。


    更多信息:

    【讨论】:

    • 如果基于相同的来源,则只需使用数据透视表复制现有工作表,然后以编程方式更改所需参数。如果基于不同的来源,是的,如@ashleedawg 所述,并更改来源和数据透视表名称。
    【解决方案2】:

    我的建议是,不要在每次数据更新时都尝试以编程方式进行所有这些复杂的设计和格式化,而是将其转过来,手动创建一个漂亮的自定义模板 - 使用当前数据集,从而创建一个模板,以便所有格式都准备好自动更新,只需覆盖隐藏的“数据选项卡”(使用 VBA 或计划) 随时更新数据。

    我知道这不是您正在寻找的解决方案,但我还是推荐它。你不会相信我过去以这种方式自动化了多少报告和“仪表板”。

    为“一劳永逸”的自动化 Access⇒Excel 报告创建模板

    1. 设置一个或多个查询以返回“所有” Excel 报告所需的数据。您可能希望按重要字段排序,但除此之外的顺序和格式在这一点上无关紧要。

    2. 将您的数据导出到新 Excel 文件。出于某种原因,Excel 喜欢自己创建文件,如果它要用作模板的话。

      从 Access 导出到 Excel 只需一行代码:

      DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "myQueryname", _
                                    "c:\yourPath\newFilename.xlsx", True, "myWorksheetName"
      

      ...但重要的是 Excel 创建文件,我添加了一些检查以确保文件不存在并且已正确导出:

      Sub ExportToExcel()
          On Error GoTo xferErr
          Const queryName = "qryMyExportQuery1" 'your source query
          Const out_fileName = "c:\myPath\MyDashboard.xlsx" 'this file to created
          Const out_sheetName = "Data" 'worksheet name to create within the file
      
          If Dir(out_fileName) <> "" Then 
              If MsgBox("Start fresh by deleting: " & vbLf & out_fileName & vbLf & vbLf & _
                  "Yes = Delete file; No = export data to existing file.", vbYesNo + _
                  vbQuestion, "Delete existing Excel file?") = vbYes Then Kill out_fileName
          End If
      
          'Export data to Excel:
          DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, _
              queryName, out_fileName, True, out_sheetName
      
          If Dir(out_fileName) <> "" Then 'confirm file exists
              MsgBox "File created!"
          Else
              MsgBox "Something went wrong!"
          End If
          Exit Sub
      xferErr:
          Select Case Err
              Case 80: MsgBox "Permission Denied (You might have " & _
                                  out_fileName & " open right now."
              Case Else: MsgBox "Error " & Err & vbLf & Err.Description
          End Select
      End Sub  
      
    3. 打开新创建的文件。请注意,数据位于如上所述命名的工作表上。

      从现在开始,无论何时您将完全相同的查询导出到此文件(或导出到此文件的副本),数据将清除现有数据(仅来自此选项卡)并将数据完全替换为之前的位置。

    您可以制作新的工作表并引用此工作表上的单元格/行/列,但请避免更改任何内容。 (简单的东西,比如调整列宽,这样你就可以看到了。)

    完成报告设置后,您可以隐藏Data 标签并忘记它,甚至没人会知道它的存在! (Access 不关心导出数据时选项卡是否可见。)


    我很快就从示例数据中将这个(丑陋但实用的)示例放在了一起。 (当您不必以编程方式进行格式化时,对格式等挑剔显然要容易得多!)

    所有这些计算和对象都是基于另一个选项卡计算的。

    • 任何时候重新运行查询,这里的所有内容都会自动更新,无需交互。您可以在隐藏数据选项卡的情况下发送或发布此文件的静态副本。

    -或者,您可以将“数据”工作表移动到单独的文件中并将其存储在共享位置,“仪表板模板”中的所有链接都会指向它。这样,收件人只需添加书签或保存一个文件,无论何时他们打开文件,它都会始终显示最新数据。

    这种方法更可取,因为除其他原因外,您可以随时立即撤回或替换数据,而不必担心过时的静态副本会四处飘荡。

    像这样更新报告,您可以做很多事情。 Here are other ideas 用于精美的仪表板。

    注意:备份副本总是很重要,但更重要的是,当您学习如何编写代码以自动删除或覆盖内容时。每当您对模板进行任何您关心的更改时,制作一两个副本!


    更多信息:

    【讨论】:

    • 我已经有一种方法可以做到这一点,但我不确定如何在 Excel 文件的另一个选项卡上创建多个数据透视表。我有一个可以工作的数据透视表,但我无法获取其他 3 个,因为我不确定需要添加什么代码
    猜你喜欢
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 2013-08-22
    • 1970-01-01
    相关资源
    最近更新 更多