1

目前我们有一个 Excel VBA 应用程序,它由 25-30 个 Excel 表格组成(所有这些表格都隐藏起来,我们对其进行后台处理并将其显示到 VBA 表单 UI),并且我们已经使用 VB 表单开发了一个 UI。但是我们面临的问题是每当我们使用以下代码单击保存按钮时:

ThisWorkbook.Save

但这会保存整个工作簿而不是单个工作表,因此即使我们在单个工作表中进行更改,它也会保存整个工作簿,并且这种保存处理会非常慢(因为它需要保存所有包含大量数据的 Excel 工作表,即使没有变化)。

我的问题是有什么方法可以保存“在特定的 excel 表中只保存一个表”而不是整个 excel 文件?

注意:我是一名 Java 开发人员,之前我曾在 VBA 上工作过,但那是几年前的事了,我已经忘记了一点。任何指导将不胜感激。或任何有关如何处理这种情况的指示将不胜感激。如果您需要更多信息,请告诉我,我可以编辑这个问题。

我已经尝试过什么?我从昨天开始做了很多研究,我在以前的问题中搜索了 SO,但没有得到任何有用的信息。根据我的研究,它说我们不能这样做。我在正确的道路上吗?

4

3 回答 3

4

最简洁的答案是不。您不能一次保存一个工作表。

您可能想尝试减少工作簿中的数据量。尝试将数据存储在多个工作簿中,并在需要时打开该特定工作簿,进行所需的更改,然后将其关闭。

如果有必要一次访问所有数据,请考虑使用 access 或其他数据库。

工作表也可能具有“空白数据”。不包含任何内容但 excel 认为他们这样做的单元格在保存时会尝试保存超出需要的方式。

于 2013-02-25T17:01:28.580 回答
3

假设它是您要保存的活动工作表,那么您可以执行以下操作:

ActiveSheet.Copy
ActiveWorkbook.Close True, "path"

这会复制活动工作表,从而创建一个新工作簿,该工作簿将成为活动工作簿。然后只需调用它的 close 方法并给它一个文件名。

于 2013-02-25T17:07:09.920 回答
2

我认为您应该考虑将您的应用程序拆分为多个工作簿:

  1. 包含所有逻辑、用户表单和编程代码的工作簿。该工作簿处理所有其他工作簿以及它的显示。潜在地,这甚至可能是一个“应用程序特定插件”,它保持休眠状态,但一旦打开它的任何后续工作簿就会激活。对于这种架构方法,请查看此链接中的“应用程序特定插件”部分。

    此工作簿/加载项还可以隐藏其他工作簿,以便用户不会注意到它是多个工作簿。
  2. 一个或多个数据工作簿:根据数据相互关联的程度,您可以将其分开,例如在包含大型数据库的“销售数据”工作簿中,作为包含所有较小数据(例如产品或商店)的“基础数据”工作簿表)。

这样,您可以减少对“相关”工作表的保存。然而,这当然需要大量的重新编程——但值得付出努力,例如它还允许提供更新/错误修复,而无需在版本之间传输数据,因为您只需要通过编程分发文件逻辑。:-)

于 2013-02-25T23:06:10.200 回答