代码之家  ›  专栏  ›  技术社区  ›  Jean-François Corbett

将excelvba代码放在模块或表格中[[关闭]

  •  37
  • Jean-François Corbett  · 技术社区  · 15 年前

    什么是良好实践和良好规范卫生?将代码放入模块或工作表中?

    我用的是excel2003。

    3 回复  |  直到 7 年前
        1
  •  52
  •   Community CDub    7 年前

    当然是模块。

    • 可以删除、复制和移动图纸,结果令人惊讶。
    • 以逻辑方式拆分为模块(数据访问、实用程序、电子表格格式等)的代码可以作为单元重用,如果宏变大,则更易于管理。

    由于该工具在excelvba等原始系统中非常糟糕,因此最佳实践、严格的代码卫生和遵守约定是非常重要的,特别是当您试图用它做任何远程复杂的事情时。

    This article 解释不同类型代码容器的预期用途。不符合条件 应该做出这些区别,但我相信大多数试图在Excel平台上开发严肃应用程序的开发人员都会遵循这些区别。

    还有一份 VBA coding conventions 我发现这很有用,尽管它们与excelvba没有直接关系。请忽略他们在那个网站上疯狂的命名惯例,仅此而已 .

        2
  •  11
  •   Michael    15 年前

    根据我的经验,最好是将尽可能多的代码放入命名良好的模块中,并且只将需要的代码放入实际的工作表对象中。

        3
  •  10
  •   Ben McCormack    15 年前

    我建议根据每个工作表或模块的特定功能和用途来分离代码。以这种方式,您只需要将与工作表的UI相关的代码放在工作表的模块中,并且只将与模块相关的代码放在相应的模块中。另外,使用单独的模块来封装在多个不同工作表之间共享或重用的代码。

    例如,假设有多个工作表负责以特殊方式显示数据库中的数据。在这种情况下,我们有哪些功能?我们拥有与每个特定工作表相关的功能、与从数据库获取数据相关的任务以及与用数据填充工作表相关的任务。在这种情况下,我可以从一个用于数据访问的模块开始,一个用于用数据填充工作表的模块,在每个工作表中,我都有用于访问这些模块中的代码的代码。

    模块: 数据访问

    Function GetData(strTableName As String, strCondition1 As String) As Recordset
        'Code Related to getting data from the database'
    End Function
    

    普及表 :

    Sub PopulateASheet(wsSheet As Worksheet, rs As Recordset)
        'Code to populate a worksheet '
    End Function
    

    工作表: 表1代码 :

    Sub GetDataAndPopulate()
        'Sample Code'
         Dim rs As New Recordset
         Dim ws As Worksheet
         Dim strParam As String
         Set ws = ActiveSheet
         strParam = ws.Range("A1").Value
    
         Set rs = GetData("Orders",strParam)
    
         PopulateASheet ws, rs
    End Sub
    
    Sub Button1_Click()
        Call GetDataAndPopulate
    End Sub
    
    推荐文章