想使用面向对象语言并不疯狂
VBA 的功能,但您给出的用例不是
与优秀的内置对象相去甚远
已经提供了,所以不清楚你会提供多少
从您为获得它而增加的复杂性中获益。有
在 excel vba 中可以利用相当多的功能,但它是
尽可能发挥其优势。
您可以轻松地为不同的单元格着色
有效率的
通过使用本文末尾的代码 - 显然不这样做
所有你想要的,但显然不需要的东西
对单列和行采用面向对象。
Excel和vba与程序员有很大不同
习惯于来自像 python 这样的东西,提供完整的
类继承。使用 VBA,您只能拥有
接口继承将允许您重用代码。但
如果你不小心,你很容易就会得到很多
的存根代码,您必须从一个类复制到另一个类才能
能够满足您希望您的类实现的接口。
还有一件事你一定要包起来
从传统的面向对象语言开始,这就是多少
您在内存对象中复制的数据,而不是仅仅保留
工作表并根据需要访问它们。有一种自然的
倾向于将所有内容加载到对象中并进行操作
从那里开始 - 但这是一种你应该三思而后行的冲动
在这种环境下。
如果您有一个现有的服务器后端来验证
至少在工作表和数据库之间移动的数据
您有一种方法可以隔离正常的 MVC 问题。实际上你会
使用 Excel 作为一种具有附加功能的网页
电子表格用户喜爱的。如果你没有后端那么你
在验证你的模型和数据时确实必须非常小心
环境。你应该得到
习惯于保护工作表(除了那些单元格)
用户必须输入数据(假设您正在编写代码
使他人受益而不仅仅是自己)。事实上这是一个很好的
用不同的颜色为输入单元格和计算单元格着色的想法
颜色来突出这种差异。后者应该受到保护
而前者在需要时可以触发验证事件
输入并更新模型状态(并且最好与后端一起使用,如果
你有一个)。
保护单元格还允许您隐藏状态信息
工作表中定义明确的部分可用于参考
回到工作对象。事实上,好的用例是那些
将明确定义的单元块分隔为特定的用户界面
类实例。
如果可能,您应该使用范围来引用相关部分
相同的工作表和其他工作表。命名范围是你的朋友。数据
经过验证的列表对于连续数据也非常有帮助,应该
尽可能使用它们,因为它们的工作效率很高。为了
对于大小有限的非连续数据集,您可以使用 ActiveX
组合框可以引用内存中的对象实例,如果它们
事件处理程序会传递一个对于后者唯一的 id。
检查事件更改时,应注意 Worksheet_Change
进行民意调查,您会在网络上看到很多示例。这个可以
如果你不小心,就会浪费相当多的时间。
总结一下:利用你可以从 Excel 中获得的一切力量
避免重新发明轮子。
' Compares the sheet 1 of the workbook you're in
' with sheet1 of the workbook file in 'Filename'
' and colors the cells that differ between the two.
Sub compare_workbooks_sheet1()
Dim Filename As String
Filename = "C:\MyBook.xlsm"
Dim wrkbk1 As Workbook
Set wrkbk1 = Workbooks.Open(Filename:=Filename)
Dim sht1 As Worksheet ' worksheet you're in
Dim sht2 As Worksheet ' worksheet you've opened to compare
Set sht1 = wrkbk1.Worksheets("Sheet1")
Set sht2 = ThisWorkbook.Worksheets("Sheet1")
Dim row As Long, col As Long
With sht2
For row = 1 To sht1.UsedRange.Rows.Count
For col = 1 To sht1.UsedRange.Columns.Count
If sht1.Cells(row, col) <> sht2.Cells(row, col) Then
.Cells(row, col).Interior.ColorIndex = 5
End If
Next
Next
End With
wrkbk1.Close
End Sub