gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 21:25:21 25 4
gpt4 key购买 nike

我是使用类的新手,并且想学习将它们与表单集成的巧妙方法。具体来说,当您将数据输入表单时,该表单是否应该与类紧密关联?如何?

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

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

当约翰单击“新棒球卡”按钮时,他的 frmBaseball 会弹出。

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

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

    最佳答案

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

    类使您能够对现实世界的事物进行建模,并且它们有助于在逻辑上分离的 tiered architecture 中实现它们。 .在您的情况下,您的表单提供表示层,您的类提供应用程序层,您的 Excel 表提供数据层(通常是数据库) - 这是 3 层。

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

    在回答您的问题时:

    在上述过程中的任何时候都使用了 clsBaseball 吗?

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

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

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

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

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

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

    关于class - 一起使用表单和类的 VBA Excel 最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18083203/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com