我有一个Excel工作簿2013捕获了很多不同的设备的数据的多页的报告。为了使输入用户友好,它被分成两个工作表“设备”和“设备数据”。设备是一个前端,以易于阅读/编辑/打印格式显示来自Equipment-Data的数据。 Equipment-Data是由100件设备组成的85列数据的后端数据表。使用Excel 2013 VBA建立从用户窗体选项
导航是通过选择位于用户窗体上的ListBox上的设备来执行的,该窗体允许用户在项目之间快速导航。当列表框选择更改时,数据表中相应的行将读入数组并写入前端。任何更改都会无缝地推回到数据表中。根据最终用户的熟悉程度,Excel选择了Access,而且两个工作表是不适合Access的大型工作簿的一部分。此外,该工作簿支持一个交付物,并且不会长期更新。
我正在开发一种方式来收集所有设备页面并将它们导出到由Word和PDF混合构建的报表中(最终输出PDF)。我确定有十几种方法可以做到这一点,但我想知道是否有更好的方法。我对VBA还比较陌生 - 已经重写了此项目上的代码,将子例程从表单移动到模块,在subs之间传递变量而不是使用全局变量,并且读取/写入数组而不是循环遍历单元格,因为我学到了更好的方法做事。
我看到它的方式,我的选择是:
- 创建临时表,通过列表框圈,从前端复制范围,粘贴特殊到临时表。我从实验中发现,我需要将paste-first xlPasteColumnWidths和xlPasteValuesAndNumberFormats加倍。我尝试使用“值&源格式”(xlPasteAllUsingSourceTheme),但我得到关于合并单元格的错误。在第一次迭代之后,我可以用.Paste替换xlPasteColumnWidths,但由于存在方程式,因此仍然需要跟踪值&数字格式。粘贴后,向前跳过ListIndex * 78以进入下一页的开头并重复。最后,将临时表导出为PDF并删除临时表。
- 与#1相同,但使用CopyPicture方法使用xlPicture获取向量输出。循环后,导出到PDF并删除临时表。这个应该在选项#1的最终输出中无法区分,不知道我是否会用100页图像加速或记忆问题。
- 在列表框中循环并使用ExportAsFixedFormat创建PDF,使用ListIndex & Equipment_Name作为文件名。然后使用外部PDF工具将文件合并为一个。
- 创建Access数据库,采用设备数据表为数据源,并建立报告,以模仿设备表的格式。
- 同1或2,但复制的每个列表项到新工作表,选择所有工作表,导出为PDF,删除工作表。
有没有更好的方法,我失踪了?我认为选项1和3是最好的选择。 3似乎是一个很好的快速修复程序,因为不太可能有其他人需要构建报告,但对于某些将来可能在共享驱动器上找到电子表格并希望在不同项目上重复使用的用户,这样做更好。
选项1个运行得很好约40秒。我稍后会发布代码。 – MattD