使用Excel作为Access数据库的前端(使用VBA)

27 excel ms-access vba

我正在为朋友构建一个小应用程序,他们希望能够使用Excel作为前端.(UI基本上是Excel中的用户形式).他们在Excel中有一堆数据,他们希望能够查询,但我不想将excel用作数据库,因为我认为它不适合这个目的,我正在考虑使用Access.[顺便说一句,我知道Access有它的缺点,但没有可用的预算和已经在朋友的PC上访问]

总而言之,我正在考虑将一堆数据转储到Access中,然后使用Excel作为前端来查询数据库并在userform样式环境中显示结果.

问题:

  1. 使用ADO/DAO从Excel链接到Access有多容易?它在功能方面是否非常有限,还是我可以发挥创意?
  2. 我是否会支付性能损失(相对于在UI中使用表单而言)?
  3. 假设数据库将始终使用Excel VBA中的ADO/DAO命令进行更新,这是否意味着我可以让多个Excel用户使用该单个Access数据库而不会遇到任何并发问题等?
  4. 还有其他我应该注意的事情吗?

我有很强的Excel VBA技能,并认为我可以很快克服Access VBA但从未真正完成过Excel/Access链接.我可以把数据塞进Excel并用作准数据库,但这似乎比它的价值更痛苦(而不是一个强大的长期解决方案)

任何建议表示赞赏

亚历克斯

Ree*_*sey 42

我相信你会得到很多"不要这样做"的答案,我必须说,这是有充分理由的.这不是一个理想的解决方案....

话虽这么说,我之前走过这条路(和类似的路),主要是因为这项工作将其指定为一项艰难的要求,我无法谈论它.

以下是一些需要考虑的事项:

使用ADO/DAO从Excel链接到Access有多容易?它在功能方面是否非常有限,还是我可以发挥创意?

这是相当明确的.你比使用其他工具做的事情更有限,因为VBA和Excel表单比大多数完整的编程语言更有限,但没有任何东西会成为一个显示阻止.它有效 - 有时它有点难看,但确实有效.在我上一家公司,我经常不得不这样做 - 偶尔也会通过Excel中的VBA从Access和Oracle中提取数据.

我是否会支付性能损失(相对于在UI中使用表单而言)?

我的经验是肯定有一个性能.这样做会受到惩罚.我从不关心(在我的用例中,事情足够小以至于合理),但是Excel < - > Access比直接在Access中工作要慢得多.部分取决于你想做什么....

就我而言,似乎绝对最慢(也是最痛苦)的事情是尝试根据Access数据填写Excel电子表格.这不好玩,而且往往很慢.如果你必须走这条路,确保使用隐藏/隐藏的Excel做任何事情,否则重绘绝对会杀了你.

假设数据库将始终使用Excel VBA中的ADO/DAO命令进行更新,这是否意味着我可以让多个Excel用户使用该单个Access数据库而不会遇到任何并发问题等?

您几乎使用Excel作为客户端 - 与使用WinForms应用程序或任何其他工具的方式相同.Access的ADO/DAO客户端非常好,因此您可能不会遇到任何并发问题.

话虽这么说,Access不能很好地扩展.如果您有2个或3个(甚至10个)用户,这非常有用.如果你要100,你可能会遇到问题.此外,我倾向于发现Access需要定期维护才能避免出现腐败问题.必须定期备份Access DB.根据我的经验,定期压缩访问数据库有助于防止数据库损坏.

还有其他我应该注意的事情吗?

你这么做很难.使用Excel来访问Access将比直接使用Access要多得多.

我建议查看Access VBA API - 其中大部分与Excel相同,因此您将获得一个小的学习曲线.不同的部件使这更容易.您还将拥有Access报告和表单的所有优点,它们比Excel中的数据更加面向数据.报告对于这样的事情来说非常有用,并且从长远来看,使用宏和报告可以使生活更轻松.如果用户将使用表单来管理所有内容,那么在Access中执行表单将非常非常类似于在Excel中执行这些表单,并且看起来几乎相同,但会使一切更快更顺畅.

  • +1好的和详细的答案,但有时,Excel界面更方便,基于应用程序的目的 (3认同)

Dic*_*ika 15

我一直这样做.如果您正在使用ADO,那么您实际上并不是使用Access,而是基础数据库Jet.这意味着任何使用Excel的人都可以使用该应用程序 - 不需要访问.哦,我应该提一下,我工作的地方买了一堆Office Small Business许可证 - 没有Access.在这里工作之前,我会假设任何拥有Excel的人也会拥有Access.不是这样.

我为Access中的每个表创建一个类.我很少通过ADO运行查询,而是将该逻辑保留在类模块中.我使用SELECT语句读入并使用ADODB.Connection对象的Execute方法使用和UPDATE或INSERT写出来.

http://www.dailydoseofexcel.com/archives/2008/12/21/vba-framework-ii/

如果你想看看我如何设置我的代码.

回答你的问题:如果你已经了解Excel VBA,那将是一个很小的学习曲线,但是会有一些学习要做; 你会在Access中支付一个性能惩罚,但这并不是那么糟糕,只有你可以决定它是否值得; 并且您可以让多个人访问数据库.


DJ.*_*DJ. 9

只是跳过excel部分 - excel用户表单只是一个穷人的版本,更强大的Access形式.Access VBA也与Excel VBA完全相同 - 您只需学习Access'对象模型.使用简单的应用程序,您无需编写更多VBA,因为在Access中您可以非常轻松地将事物连接在一起.


Sco*_*ott 8

如果最终用户具有Access,则可能更容易在Access中开发整个内容.Access内置了一些WYSIWYG表单设计工具.

  • +1; 如果您使用Access中的数据表视图,您可以获得电子表格的外观.我相信你可以用Excel做到这一点,但感觉好像没有什么好处. (2认同)

Ren*_*uis 7

除非在Excel中运行用户表单有很大的优势,否则我将使用100%Access解决方案,该解决方案可以在临时的基础上将报表和数据导出到Excel.

根据您的描述,Access似乎是更强大的竞争者,因为它是为处理数据而构建的:
您可以使用更多工具来解决任何数据问题,而不必绕过Excel的限制并将其变为Access. ..

至于你的问题:

  1. 很容易.关于该主题,还有其他一些问题.
    例如,参见这个那个.

  2. 不知道,但我猜可能会有一个小的惩罚.
    我看到的最大困难是尝试获取Access为您提供的所有功能,并在Excel中重新创建其中的一些功能.

  3. 是的,您可以拥有多个Excel用户和一个Access数据库.
    再次,使用Access作为前端并将数据保存在网络上的链接Access数据库中会更有意义,而且很容易就像馅饼一样,Access中甚至还有一个向导可以帮助您实现这一点:只需单击一下即可.

真的,正如大多数人所说的那样,花一点时间熟悉Access,它将为您节省大量时间和麻烦.
如果您了解VBA并且熟悉Office对象模型,那么您可能会更好地了解Excel,但如果您已经完成了80%的工作.

在Access中执行此操作的其他优点:Access 2007运行时是免费的,这意味着如果您要将应用程序部署到1或30台PC,则会花费相同的成本:没有.
您只需要一个完整版本的Access进行开发工作(Runtime没有设计人员).