VBA Excel一起使用表单和类的最佳实践?

时间:2013-08-06 14:37:23

标签: class excel-vba vba excel

我不熟悉使用类,并希望学习将它们与表单集成的智能方法。具体来说,当您将数据输入表单时,该表单是否应与类紧密链接以及如何?

让我们用一个简单的例子。约翰是各种卡片的收藏家:棒球卡片,口袋妖怪卡片等。他将卡片列表数据库保存在Excel工作表中,并使用表格管理它们。有一些表格用于输入新卡片并修改其收藏品中的状态,还有用于分析其数据的表格和功能。

所以他可能有一个clsBaseball,一个clsPokemon,一个clsAlbum和一个clsSalesRecord。他还提供了输入和修改数据的表格以及其他类型的分析表格,可以比较卡片,计算各个团队和时间段的统计数据等。

当John点击“New Baseball Card”按钮时,他的frmBaseball会弹出。

  1. 他输入棒球卡数据
  2. 他点击了更新
  3. 表单已经过验证
  4. 数据保存在工作表中
  5. 在上述过程中的任何一点都使用了clsBaseball?我可以看到该类将如何用于加载花哨排序或统计例程的所有数据,但它是否在入口阶段实际使用,以便表单上的字段对clsBaseball的实例有直接影响? / p>

1 个答案:

答案 0 :(得分:4)

这取决于您的要求有多强大。如果您只是对原型进行原型设计,那么将代码紧密绑定到表单上就可以了。但是,如果您想构建一个更灵活,更健壮且可扩展的应用程序,那么modelling类中的数据结构,将您的功能封装在对象中是可行的。

通过类,您可以对现实世界的事物进行建模,并以逻辑上分开的tiered architecture方式实现它们的实现。在您的情况下,您的表单提供表示层,您的类提供应用程序层,您的Excel表提供数据层(通常是数据库) - 这是3层。

所以,在你的例子中,我会像你一样在类中建模你的数据,但是如果我需要所有我的clsBaseball对象的功能,我会为每个对象管理类。这些管理类包含clsBaseball对象的集合,允许您实现需要对象集合的行为。例如,您将在clsBaseball中实现更新方法,但是您将在clsBaseballs管理类中实现CalculateStats,您还可以通过迭代(管理类)clsBaseballs中的clsBaseball集合来调用所有clsBaseball对象的更新方法。 / p>

回答你的问题:

在上述过程中的任何一点都使用了clsBaseball?

1)他输入棒球卡数据 您可以实例化clsBaseball的实例,但可能还没有

2)他点击了更新: 您实例化clsBaseball的新实例(或使用现有实例),传递用户输入的值并调用clsBaseball的更新方法。通过这种方式,您可以封装clsBaseball行为。

3)表单已经过验证: 这将在clsBaseball更新数据存储之前发生。所以你可能在clsBaseball中有一个验证方法,在任何数据更新之前调用它。任何错误都可以传递回表示层(您的表单)。或者您可以在表单中进行验证(尽管您的表示层中的任何业务逻辑都不受欢迎,因为您可能希望将表单层换成其他内容,请参阅MVC/MVP patterns)。

4)数据保存在工作表中 这是由clsBaseball通过更新方法完成的。

至于您喜欢的排序或统计例程,您可以从管理类中获取这些数据,因为它们包含对象集合,可以完美地设置分析所有clsBaseball实例。所有这些功能都很好地封装,没有重复(DRY),任何新来到代码的人都能够弄清楚发生了什么。

我刚才回答了一个问题,如何在MS Access中构建数据,答案包括类和管理类的示例:MS ACCESS 2003 triggers (Query Event), and Excel import

相关问题