Vba 从Access 2016导入表时加快Excel 2016查询刷新时间
我有一个系统,其中大约有30个Excel 2016模板,所有模板上的项目都从一个主Access 2016文件中获取价格。这些都位于任何具有访问权限的人都可以打开的服务器上。模板用于请求将特定项目发送到工作站点,同时还跟踪其价格,以便可以向该工作收取费用。拥有一个包含所有定价的主文件的目标是,每当价格发生变化时(这是相当常见的),我不必在每个模板中更新价格 现在,我在每个表单中都有一个Vba 从Access 2016导入表时加快Excel 2016查询刷新时间,vba,excel,ms-access,excel-2016,Vba,Excel,Ms Access,Excel 2016,我有一个系统,其中大约有30个Excel 2016模板,所有模板上的项目都从一个主Access 2016文件中获取价格。这些都位于任何具有访问权限的人都可以打开的服务器上。模板用于请求将特定项目发送到工作站点,同时还跟踪其价格,以便可以向该工作收取费用。拥有一个包含所有定价的主文件的目标是,每当价格发生变化时(这是相当常见的),我不必在每个模板中更新价格 现在,我在每个表单中都有一个Auto_Open模块,每次打开模板副本时都会刷新Access文件中的数据。这样可以确保项目经理在每次使用工作表时
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
最近,Microsoft发布了一个Excel更新,将数据导入和转换合并到数据选项卡下名为“获取和转换数据”的一个新部分中。随着此更新,在该部分的“获取数据”按钮下发布了导入数据的新向导。旧的“遗留向导”仍然可用,这就是我所使用的,也是我一直在使用上述代码的地方
我在这个新选项卡上查找信息,但唯一可用的信息是一个Microsoft支持网页,它显示了旧组织的各个部分。因此,我自己做了测试,发现了以下差异:
Auto_Open
模块,并尝试使用“打开文件时刷新数据”选项,结果花了一分钟来更新所有表,这迫使我解锁工作表,我强烈希望保持锁定状态。其次,我尝试了“启用快速数据加载”和“启用后台刷新”,我能够将时间缩短到17秒,但每次打开文件时,等待时间仍然相当长。我也不希望使用后台刷新,因为在每张表上花费的时间可能不足以保证每个价格都得到更新,特别是在一些包含10+个导入表的文件上。无论如何,我尝试了各种可能的组合,但我只能将时间平均缩短到20秒
我想这篇文章的主要问题是:
非常感谢您的帮助。谢谢大家! 如果可以使用.xlsm文件,则应使用ADODB连接到数据库 以下是一个很好的教程: 您可以执行SQL语句来修改数据库 但是,如果数据库受密码保护,则需要将其包含在连接字符串中,
而且,由于破解受保护的vba项目非常容易,因此密码根本就不安全。我对SQL不太了解,因此我将进一步研究。我收到了微软团队的一些回复,他们肯定看到了一个问题。我只使用了一个密码,所以对那些有权访问服务器的人来说,编辑它并不是非常容易,他们也不是超级技术高手,所以密码只是为了防止他们受到攻击,而不是为了防范黑客。否则,我将检查SQL。