在Access VBA 2010中操作Excel数据

时间:2011-10-19 07:06:14

标签: ms-access vba ms-access-2007 adodb

在Access 2003中,我曾经导入过第三方提供给我们的特殊xls文件。我使用了ADODB,这非常有效。

ADODB不再是Access 2007/2010中的一个选项,我认为您不能使用DAO或ADO“查询”电子表格。

那么,还有其他选择吗?

2 个答案:

答案 0 :(得分:0)

  

我认为您不能使用DAO或ADO“查询”电子表格。

您确实可以使用ADO和Access DB的OLE DB提供程序(Jet,等等)查询Excel工作簿。有关详细信息,请参阅this MSDN article

  

ADODB不再是Access 2007/2010中的一个选项,

事实并非如此。我认为你一定是误解了一些东西,考虑到Access中围绕“ADO vs DAO”的互联网上有很多废话,这并不奇怪。

我不确定当ADO classic被引入Access2000社区时发生了什么,但似乎很多老人都受到了伤害自负/骄傲。来自微软的营销信息已经生效,“DAO现在是旧的工作方式,而ADO是新的。”在MS的故意行动中,新的引擎功能通常只能通过ADO获得。

通常情况下,当支撑位置受到威胁时,长时间访问+ DAO粉丝会出现反击。这通常采取的形式是“扔足够的泥,有些会坚持下去”。新到达AccessLand的人会被混合消息搞糊涂。在新闻组中,有抱负的Access MVP模拟了现有的Access MVP的反ADO立场。

在200和2007版本之间,Access产品在引擎方面变得有些陈旧,责任已交给SQL Server团队,而SQL Server团队已经放弃了所有实际目的:他们尝试制作它遵守入门级标准SQL-92受到Windows团队的阻挠,其组件依赖于面对标准的功能。 ADO经典团队同样已被解散。 Visual Basic COM,它有效地与Office套件共享VBA库,因为支持VB.NET而被淘汰,ADO.NET诞生了,

Access2007团队再次震惊起来。他们通过私人分支机构从SQL Server和Windows团队中恢复了引擎。他们放弃了用户级别的安全性,可能是因为它太复杂而无法维护。他们添加了可能违反1NF的多值类型。勇敢的东西!虽然通过为Access创建新的OLE DB提供程序可以在ADO classic中容纳某些功能,但其他功能却无法实现。例如,对ADO中的多值数据类型的完全支持(例如,通过SQL更新)需要更改Access团队不拥有的ADO经典库。

因为DAO由Access拥有,所以新版本(称为ACEDAO)具有新的OLE DB提供程序的功能,旧的ADO经典库将缺少(尽管ADO需要在64位计算机上使用引擎)。然而,他们没有做的是回顾性地修复DAO以适应仅进入ADO的Access2000时代功能。

当然,Access团队将ACEDAO推广为一等公民。当然,长期以来的Access + DAO粉丝很高兴:“ADO已被弃用,转而支持ADO.NET,”他们慌张道。事实上,最终结果是混合包。有关详细信息,请参阅this thread

答案 1 :(得分:0)

在Access的VBA项目中单击“工具/参考”,然后找到“Microsoft Excel 14.0对象库”。这将使您可以访问所有VBA Excel对象,以便您可以对电子表格执行任何操作。

正如其他人所说,在工作表上运行查询不是一种选择。如果您习惯于在数据库方面考虑在模板上运行检查以确保标题匹配,那么您很可能拥有一个正在阅读的好文件。然后,一旦您验证了文档设置,SQL就会在带有记录的行上插入Access数据库中的表,然后从那里运行查询。请在此处查看编写SQL代码:

SQL Statement Help

如果你想在你的VBA中获得更高级的文件,那么你可以通过设置一个带有setter / getter的对象来运行搜索,并将记录存储到一个集合类中,然后使用你正在寻找的数据迭代它对于。

我在一些项目中这样做,我知道列表很小,当我真的只想读取数据并运行一些真正的基本计算时,例如计算特定小部件和地点的数量,从而远离读/写表对报告的重视。集合类非常适合这一点。这里有关于集合的更多信息的良好链接:

Collections in Visual Basic

祝你好运!