预览加载中,请您耐心等待几秒...
1/2
2/2

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

学习ExcelVBA中的类模块 这几天,我们Team又有一个新的流程上线,所以制作一个新版工作Report的Excel文档的任务又落到了我头上,以前利用ExcelVBA写过很多类似的文档,所以这个任务的完成还算是轻车熟路,基本上把以前写的DailyReport文档拿过来修改一下就OK啦。 在代码的编写中,我想到了新的问题,因为我编写的文档需要大量的按钮控件,点击按钮Excel完成的动作大致相同,以前我只是把相同的问题,归类到一个Sub中去,然后再不同的按钮的Click函数中调用,其实这样做只是提高了代码的可修改性和重用性,学过设计模式的朋友应该了解,这样做的目的无非是如果按钮的响应动作发生变化,我只需要修改Sub中的代码即可,但是即便是这样,我还需要在制作新的Excel文档时手动生成大量的按钮Click事件响应函数,使用“海量”的”CTRL+V”操作,于是懒惰的我开始思考有没有更简单的方法,最开始的时候我还比较享受使用“海量”的”CTRL+V”操作,因为毕竟100个按钮,如果0.5秒操作一次的话,一分钟就搞定了,看来懒人的劳动是必须要量化的,呵呵。不过,实际问题是,在我的代码中每个Click事件的响应函数中需要动态获取按钮本身的Cell位置,也就是所以我需要修改100个的函数,这样的工作量太大了,所以我开始思考:ExcelVBA中是否具有Java中的反射机制? 我在论坛中询问了相关问题,多亏大哥的帮助,他告诉我ExcelVBA虽然没有反射机制,但是我所希望的功能完全可以通过ExcelVBA中的类模块来实现并给出了一个很好的实例。于是,我通过Google了一些类模块的学习资料,认真的学习了一下。类模块机制给开发者提供了自定义控件动作的功能。 下面的例子实现了自定义Excel文档中的CommandButton的Click动作: 首先创建一个类模块, PublicWithEventsanniuAsMSForms.CommandButton PrivateSubanniu_Click() MsgBox"我的名字是:"&anniu.Name&Chr(10)&"我的宽度是:"&anniu.Width EndSub 其次,在Workbook模块中编写以下代码: Dim按钮()As类1 PrivateSubWorkbook_Open() DimaAsObject,j% ForEachaInSheet1.OLEObjects IfInStr(a.Name,"CommandButton")=1Then j=j+1 ReDimPreserve按钮(j) Set按钮(j)=New类1 Set按钮(j).anniu=Sheet1.OLEObjects(a.Name).Object EndIf Next EndSub 以上就完成了自定义CommandButton动作。感兴趣的朋友们,可以自己找找Excel类模块的相关知识系统的学习一下。