Jea*_*ett 42 excel vba excel-vba
什么是良好的做法和良好的代码卫生?将代码放入模块或表格中?
我有这个Excel工作簿,每个工作表中都有用户界面.工作簿中的每个工作表都执行某项总体任务的不同部分.我应该将相关的代码放在Sheet对象或模块中吗?分组成一个模块,还是单独的模块?
我正在使用Excel 2003.
jev*_*lio 49
绝对是模块.
由于Excel VBA等原始系统中的工具很差,因此最佳实践,强迫性的代码卫生和惯例的宗教遵循非常重要,特别是如果您尝试使用它进行任何远程复杂的操作.
本文解释了不同类型的代码容器的预期用法.它不符合为什么要进行这些区分,但我相信大多数尝试在Excel平台上开发严肃应用程序的开发人员都遵循它们.
还有一个我发现有用的VBA编码约定列表,尽管它们与Excel VBA没有直接关系.请忽略他们在该网站上的疯狂命名约定,这都是疯狂的匈牙利人.
Mic*_*ael 10
根据我的经验,最好将尽可能多的代码放入命名良好的模块中,并且只需要将尽可能多的代码放入实际的工作表对象中.
示例:使用Workheet_SelectionChange或Worksheet_Calculate等工作表事件的任何代码.
Ben*_*ack 10
我建议根据每个工作表或模块的特定功能和目的来分离代码.通过这种方式,您只需将相对于工作表UI的代码放在工作表的模块中,并且只将与模块相关的代码放在相应的模块中.此外,使用单独的模块来封装在多个不同工作表之间共享或重用的代码.
例如,假设您有多张表格负责以特殊方式显示数据库中的数据.在这种情况下我们有什么样的功能?我们具有与每个特定工作表相关的功能,与从数据库获取数据相关的任务,以及与使用数据填充工作表相关的任务.在这种情况下,我可能会从一个用于数据访问的模块开始,一个用于使用数据填充工作表的模块,并且在每个工作表中我都有用于访问这些模块中的代码的代码.
它可能像这样布局.
模块:DataAccess:
Function GetData(strTableName As String, strCondition1 As String) As Recordset
'Code Related to getting data from the database'
End Function
Run Code Online (Sandbox Code Playgroud)
模块:PopulateSheet:
Sub PopulateASheet(wsSheet As Worksheet, rs As Recordset)
'Code to populate a worksheet '
End Function
Run Code Online (Sandbox Code Playgroud)
表:Sheet1代码:
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
Run Code Online (Sandbox Code Playgroud)