2017-06-18 66 views
0

我有一个系统,其中大约有30个Excel 2016模板,它们都从单个主Access 2.0文件中提取每个模板上的项目的价格。这些都位于服务器上,任何有权访问的人都可以打开。这些模板用于请求将特定项目发送到工作现场,同时也跟踪其价格,以便向该工作收取费用。拥有一个包含所有定价的主文件的目标是每当价格发生变化时(通常都是这样),我不必在每个模板中更新价格。从Access 2016导入表格时加快Excel 2016查询刷新时间

现在,我在每个表单中都有一个Auto_Open模块,每次打开模板副本时都会刷新Access文件中的数据。这可以确保项目经理每次使用工作表时更新的项目价格都会更新。这通常在不到一秒的时间内完成,它会更新所有信息。下面的代码:

Sub Auto_Open() 

Application.ScreenUpdating = False 
Sheets("Import Sheet").Unprotect Password:="secret" 
Sheets("Import Sheet").Visible = True 'for some reason the data doesn't like to refresh unless the sheet is visible 
    ThisWorkbook.RefreshAll 
    Application.CalculateUntilAsyncQueriesDone 'ensures every connection refreshes 
Sheets("Import Sheet").Visible = False 
Sheets("Import Sheet").Unprotect Password:="secret" 
Application.ScreenUpdating = True 

End Sub 

最近,微软推出了一个更新到Excel,结合数据导入和转换成所谓的数据选项卡下的一个新的单节“获取和转换数据。”与此更新一起,本节中的“获取数据”按钮下发布了新的向导以导入数据。旧的“传奇巫师”仍然可用,这正是我正在使用的以及上述代码的工作内容。

我查找了关于这个新选项卡的信息,但唯一可用的信息是Microsoft支持网页,它显示了具有分隔部分的旧组织,找到here。因此,我做了自己的测试,发现了以下差异:

  1. 可以更改数据在新向导中的导入方式,即我可以删除不需要的行和列。 (这对于我正在做的事情特别有价值,因为每件商品的某些信息并未用于计算价格,例如供应商或运送的个别分解以及商品的实际成本)。
  2. 我无法在新向导上输入密码,如果它受密码保护,它不会让我打开Access文件。如果有人也有解决方案,那就太好了。
  3. 连接类型不同。在传统向导中,连接类型仅为“Microsoft Access数据库”。但是,新向导将连接类型显示为“OLE DB查询”。
  4. 最后,传统向导将导入显示为“连接”,而新向导将其导入为“查询”。

我担心的是,在下一个版本的Excel中,遗留向导将不再可用,所以我想更新到新的向导。此外,只能从Access文件中导入特定的行和列,这对于我无法使用传统向导来说也是有益的。

但是,其中一个模板工作表导入了11个不同的表格,当我尝试打开基于模板的新工作表时,最终花费了大约30秒的时间进行更新。这样做太长了,无法高效或值得新向导的好处。

在使用新向导导入的表格的connection properties中,有几个选项是我混淆的。首先,我删除了我的Auto_Open模块,并尝试使用“刷新数据打开文件时”选项,这最终花费了一分钟更新所有表格,并且迫使我解锁表格,我宁愿选择保持锁定状态。其次,我尝试了“启用快速数据加载”和“启用后台刷新”功能,我可以将其降低到17秒,但是每次打开文件时都需要等待相当长的时间。我也不希望使用后台刷新,因为在每张表上花费的时间可能不足以保证更新每个价格,特别是在一些带有10个以上导入表的文件上。无论如何,我尝试过任何可能的组合,我只能将时间平均减少到20秒。

我猜这个职位的大问题是:

  1. 我如何可以加快刷新时间为导入的表,当我使用新的向导?如果我不能,我如何确保我仍然可以访问传统向导?
  2. 在使用新向导的同时可以锁定Access文件吗?我该怎么做?

与我一起工作的CAD技术人员还与他在微软的一些联系人进行交流,以了解他是否可以获得有关未来向导的未来可用性的任何信息。如果有必要,我可以评论一些例子文件(显然是假的价格),这样任何人都可以惹恼他们。

任何帮助,非常感谢。谢谢!

回答

0

如果您可以使用.xlsm文件,那么您应该使用ADODB连接到数据库。

这里是一个很好的教程: http://www.onlinepclearning.com/import-from-access-to-excel/

可以执行SQL statments修改数据库。

但是,如果您的数据库受密码保护,则需要将其包含在连接字符串 中,并且因为破解受保护的vba项目非常容易,所以密码根本就不安全。

+0

我不太了解SQL,所以我会再看看更多。我已经收到了来自微软团队的一些回应,他们肯定会看到存在问题。我只使用密码,因此对于有权访问服务器的人来说编辑它并不是一件容易的事情,他们不是超级技术人员,所以密码只是为了防止黑客入侵,而不是防止黑客攻击。否则,我会对SQL进行一些检查。 –