Class VBA Excel一起使用窗体和类的最佳实践?

Class VBA Excel一起使用窗体和类的最佳实践?,class,excel,vba,Class,Excel,Vba,我不熟悉使用类,希望学习将它们与表单集成的智能方法。具体来说,当您将数据输入表单时,该表单是否应该与类紧密链接,以及如何链接 让我们用一个简单的例子。John收集各种卡片:棒球卡、口袋妖怪卡等。他将卡片列表数据库存储在Excel工作表中,并使用表单进行管理。有用于输入新卡和修改其在his集合中的状态的表单,也有用于分析his数据的表单和函数 所以他可能有一个clsBaseball,一个Clspokeon,一个clsAlbum和一个clsSalesRecord。他还有用于输入和修改数据的表单以及其

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

让我们用一个简单的例子。John收集各种卡片:棒球卡、口袋妖怪卡等。他将卡片列表数据库存储在Excel工作表中,并使用表单进行管理。有用于输入新卡和修改其在his集合中的状态的表单,也有用于分析his数据的表单和函数

所以他可能有一个clsBaseball,一个Clspokeon,一个clsAlbum和一个clsSalesRecord。他还有用于输入和修改数据的表单以及其他类型的分析表单,这些表单可以比较卡片,计算不同团队和时间段的统计数据,等等

当约翰点击“新棒球卡”按钮时,他的篮球就会弹出

  • 他输入棒球卡数据
  • 他点击更新
  • 表单已验证
  • 数据保存到工作表中

  • 在上述过程中的任何时候,是否使用clsBaseball?我可以看到该类将如何用于加载所有数据以服务于奇特的排序或统计例程,但它是否在输入阶段实际使用,以便表单上的字段对clsBaseball实例产生直接影响?

    这取决于您的需求有多强大。如果您只是在原型化一些东西,那么将代码紧密绑定到表单就可以了。然而,如果您想构建一个更灵活、更健壮、更可扩展的应用程序,那么将您的数据结构封装在类中,将功能封装在对象中是一种可行的方法

    类使您能够对真实世界的事物进行建模,并且它们以逻辑上分离的方式促进它们的实现。在您的情况下,表单提供表示层,类提供应用层,excel工作表提供数据层(通常是数据库)——这是3层

    因此,在您的示例中,我会像您所做的那样在类中对数据进行建模,但是如果我需要需要需要所有clsBaseball对象的功能,我会为每个对象创建管理类。这些管理类包含clsBaseball对象的集合,并允许您实现需要对象集合的行为。例如,您可以在clsBaseball中实现update方法,但是您可以在clsBaseball管理类中实现CalculateStats,您还可以通过迭代(管理类)clsBaseball中的clsBaseball集合来调用所有clsBaseball对象的update方法

    回答你的问题:

    在上述过程中的任何时候,是否使用clsBaseball

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

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

    3) 表单已验证: 这将在clsBaseball更新数据存储之前发生。因此,在clsBaseball中可能会有一个验证方法,在更新任何数据之前调用该方法。任何错误都可以传递回表示层(表单)。或者,您可以只在表单中进行验证(尽管不赞成在表示层中使用任何业务逻辑,因为您可能希望将表示层转换为其他内容,请参阅)

    4) 数据保存到工作表中: 这是由clsBaseball通过update方法完成的

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


    我刚才回答了一个关于如何在MS Access中构造数据的问题,答案包括类和管理类的示例:

    这取决于您的需求有多强大。如果您只是在原型化一些东西,那么将代码紧密绑定到表单就可以了。然而,如果您想构建一个更灵活、更健壮、更可扩展的应用程序,那么将您的数据结构封装在类中,将功能封装在对象中是一种可行的方法

    类使您能够对真实世界的事物进行建模,并且它们以逻辑上分离的方式促进它们的实现。在您的情况下,表单提供表示层,类提供应用层,excel工作表提供数据层(通常是数据库)——这是3层

    因此,在您的示例中,我会像您所做的那样在类中对数据进行建模,但是如果我需要需要需要所有clsBaseball对象的功能,我会为每个对象创建管理类。这些管理类包含clsBaseball对象的集合,并允许您实现需要对象集合的行为。例如,您可以在clsBaseball中实现update方法,但是您可以在clsBaseball管理类中实现CalculateStats,您还可以通过迭代(管理类)clsBaseball中的clsBaseball集合来调用所有clsBaseball对象的update方法

    回答你的问题:

    在上述过程中的任何时候,是否使用clsBaseball

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

    2) 他单击更新: 实例化clsBaseball的新实例(或使用现有实例),传递用户输入的值并调用clsBaseball的更新方法。在这个