Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 从Access 2016导入表时加快Excel 2016查询刷新时间_Vba_Excel_Ms Access_Excel 2016 - Fatal编程技术网

Vba 从Access 2016导入表时加快Excel 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文件中的数据。这样可以确保项目经理在每次使用工作表时

我有一个系统,其中大约有30个Excel 2016模板,所有模板上的项目都从一个主Access 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
最近,Microsoft发布了一个Excel更新,将数据导入和转换合并到数据选项卡下名为“获取和转换数据”的一个新部分中。随着此更新,在该部分的“获取数据”按钮下发布了导入数据的新向导。旧的“遗留向导”仍然可用,这就是我所使用的,也是我一直在使用上述代码的地方

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

  • 可以在新建向导中更改数据导入的方式,即可以删除不需要的行和列。(这对我所做的工作特别有价值,因为每个项目的一些信息并不是用来计算价格的,比如供应商或个人的发货明细和项目的实际成本)
  • 我无法在“新建向导”上设置密码,它不允许我打开受密码保护的Access文件。如果有人也能解决这个问题,那就太好了
  • 连接类型不同。在旧向导中,连接类型只是“Microsoft Access数据库”。但是,新向导将连接类型显示为“OLE DB查询”
  • 最后,旧向导将导入显示为“连接”,而新向导将其导入为“查询”
  • 我担心的是,在下一版本的Excel中,旧向导将不再可用,因此我希望更新到新向导。此外,能够只从Access文件中导入特定的行和列也是有益的,这是使用传统向导无法做到的

    然而,其中一个模板工作表导入了11个不同的表,当我尝试打开基于模板的新工作表时,更新这些表需要大约30秒。这太长了,不可能有效率,也不值得享受新向导的好处

    在使用“新建向导”导入的表中,有几个选项我弄乱了。首先,我删除了我的
    Auto_Open
    模块,并尝试使用“打开文件时刷新数据”选项,结果花了一分钟来更新所有表,这迫使我解锁工作表,我强烈希望保持锁定状态。其次,我尝试了“启用快速数据加载”和“启用后台刷新”,我能够将时间缩短到17秒,但每次打开文件时,等待时间仍然相当长。我也不希望使用后台刷新,因为在每张表上花费的时间可能不足以保证每个价格都得到更新,特别是在一些包含10+个导入表的文件上。无论如何,我尝试了各种可能的组合,但我只能将时间平均缩短到20秒

    我想这篇文章的主要问题是:

  • 使用新向导时,如何加快导入表的刷新时间?如果我不能,我如何确保我仍然可以访问遗留向导
  • 在使用新向导时是否可以锁定Access文件,以及如何锁定
  • 与我一起工作的CAD技术人员也在与他在Microsoft内部的一些联系人进行沟通,以了解他是否能够获得有关遗留向导未来可用性的任何信息。如果有必要,我可以评论一些示例文件(显然是伪造的价格),这样任何人都可以乱来


    非常感谢您的帮助。谢谢大家!

    如果可以使用.xlsm文件,则应使用ADODB连接到数据库

    以下是一个很好的教程:

    您可以执行SQL语句来修改数据库

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

    我对SQL不太了解,因此我将进一步研究。我收到了微软团队的一些回复,他们肯定看到了一个问题。我只使用了一个密码,所以对那些有权访问服务器的人来说,编辑它并不是非常容易,他们也不是超级技术高手,所以密码只是为了防止他们受到攻击,而不是为了防范黑客。否则,我将检查SQL。