整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

如何用代码创建类模块,VBA编程进阶学习,千万别错过

如何用代码创建类模块,VBA编程进阶学习,千万别错过

xcel vba编程进入深水阶段,那就对底层的一些代码构建有一定的了解。

类模块就是其重要的一环,可以利用类模块做一些十分有用的事情。

其实在VBA实际应用中,离不开类模块的运用,只有我们并不知道而已。

每一个代码之后,或许就应用到类模块,大多是系统给我们预置完成的一些模块,看上去并不能很明显地发现,但它实实在在的存在,并处理着所有的表格功能。

本节重点讲一下,如何利用代码来创建一个类模块和删除一个类模块。

然后再给新建的类模块添加代码,代码可以是你想构建的任何功能。

上图为本节示例中的部分代码。

三个按钮分别实现不同的功能,下面具体看代码进行认识,功能都进行了模块化构建,所以在使用的时候要分清楚什么地使用这些代码。

添加类模块过程:

Public Sub AddClassCode(ClassName As String, CodeString As String)
'添加类模块代码
Dim Class As Object
For Each Class In ThisWorkbook.VBProject.VBComponents
    If Class.Name=ClassName Then
        Class.CodeModule.AddFromString (CodeString)
    End If
Next Class
End Sub

删除类模块过程:

Public Sub DelClass(ClassName As String)
'删除类模块
Dim Class As Object
For Each Class In ThisWorkbook.VBProject.VBComponents
    If Class.Name=ClassName Then
        ThisWorkbook.VBProject.VBComponents.Remove Class
    End If
Next Class
End Sub

添加类模块代码过程:

Public Sub AddClassCode(ClassName As String, CodeString As String)
'添加类模块代码
Dim Class As Object
For Each Class In ThisWorkbook.VBProject.VBComponents
    If Class.Name=ClassName Then
        Class.CodeModule.AddFromString (CodeString)
    End If
Next Class
End Sub

调用如上代码使用下面的按钮过程:

Private Sub CommandButton1_Click()
Dim ClassName As String, CodeString As String
ClassName="NewClass01" '定义类模块名称
DelClass ClassName '删除类模块
addClass ClassName '添加类模块
'定义类模块代码
CodeString="Public s As New Worksheet" & VBA.vbCrLf
CodeString=CodeString & "Private Sub opensheet(s As Worksheet)" & VBA.vbCrLf
CodeString=CodeString & "Set s=ActiveSheet(2)" & VBA.vbCrLf
CodeString=CodeString & "s.Select" & VBA.vbCrLf
CodeString=CodeString & "End Sub" & VBA.vbCrLf
AddClassCode ClassName, CodeString '添加类模块代码
End Sub

具体实现方法仔细看代码,就会慢慢明白。

下面列出重点代码:

  • 添加类模块:ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_ClassModule)
  • 删除类模块:ThisWorkbook.VBProject.VBComponents.Remove "类模块对象"
  • 添加类模块代码:ThisWorkbook.VBProject.VBComponents("类模块名").CodeModule.AddFromString (CodeString)

类模块是一个比较难学习的内容,要多次进行练习,如果很难入门,也不要太着急,如果不是深入编程,进行一些很繁杂的程序处理,基本也用不着。

但是,如果学会之后,那将是一个很大的进步。

至于如何利用类模块来实现一些功能,以后有机会,慢慢做一些示例进行讲解。

欢迎关注、收藏

---END--

VBA中类的解读及应用》教程【10165646】是我推出的第五套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。

类,是非常抽象的,更具研究的价值。随着我们学习、应用VBA的深入,有必要理解这些抽象的理论知识。对象,类,过程,方法,属性,事件,接口,接口如何实现等等。掌握了这些理论,不仅对于VBA这种寄生语言的实质有所深入的理解,也对自然界的很多事物将同样有所感悟。目前,这套教程程序文件已经通过32位,64位两种office系统测试。

这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:VBA中类的解读及应用第十二讲:限制复选选择(上)

【分享成果,随喜正能量】沉默,可以让混乱的心,变得清澈。沉默,是城府,是睿智,是内涵;沉默,是最后的清高,也是最后的自由。。

第十二讲 限制复选选择(上)

类是VBA的魂,如果理解了类,那么很多VBA的理论会很容易理解。所以我们要理解类,在理解的基础上掌握它的应用。

  • 今日课题需求:在做选择题时

1) 对于单选这种类型,一共多个答案,如果选择了一个那么其他的将不被选择。

2) 对于多选题,可以选择三个答案,如果选中了三个,那么其他的将不被选择。

需求分析:

这类需求是很普通的,在一个窗体上有若干个答案,我们要通过类来实现我们的需求,这里将涉及到类的命名,类对象的关联,类事件的命名与响应。

下面的几个单元我们讲解这个需求的实现:

1 类模块的搭建

我们先建立一个类模块(mydati)【注释:汉语拼音,答题】,并在类模块中实现事件对象的声明,事件的过程。

类模块代码:

Public WithEvents xuanzhe As MSForms.OptionButton

Public WithEvents yemian As MSForms.UserForm

Private Sub xuanzhe_Click() '类的数据改变事件

Dim index As Long

yy=xuanzhe.Name

index=Mid(xuanzhe.Name, 13) '取出OptionButtonN中的数字N

If yemian.Controls("OptionButton" & index).Value=True Then

Sheets("12.13.14").Cells(1, 1)=yemian.Controls("Label" & index + 1).Caption

For i=1 To 5

If i <> index Then

yemian.Controls("OptionButton" & i).Enabled=False

End If

Next

End If

End Sub

我们看看类模块的代码截图:

【待续】

今日内容回向:

1 类模块中需要建立的内容是什么?

2 WithEvents是声明什么的?

(待续)

今日内容回向:

1 如何理解正则函数?

2 在窗体的构建构成中,执行了哪些动作?

本讲内容参考程序文件:VBA-CLASS(1-28).xlsm

我20多年的VBA实践经验,全部浓缩在下面的各个教程中:

近项目上用到了调用微信和支付宝的第三方支付接口,因为以前没用过,所以这次用到了之后总结一下分享给大家,这里介绍两种支付方式,即app支付和扫码支付方式。

一、app支付(这里只介绍java端调用支付,安卓或ios端自己参考相关的调用文档)

首先可以看一看项目支付流程(图解)

1. 在页面上选择支付方式(微信或支付宝)

2. 由相应的客户端调用相应的支付方式进入相应的支付页面(安卓或ios调用支付接口并进入微信或支付宝支付页面,显示支付的信息)

3. 输入密码进行支付

4. 调用支付结果接口,来返回支付成功与否

四图分别是选择支付方式、微信支付页面、支付宝支付页面、微信支付结果(成功)页面

也是基本的支付三个步骤。

一、先看微信支付:

在调用微信支付之前你应该已经下单成功(即订单信息入库成功),这里需要几个值:

OrderName(订单名称),orderNumber(订单编号,唯一),amount(金额), prepayId(交易会话id)

前三个参数直接从数据库里获取。prepayid是什么?可以具体看微信支付文档,我们可以从下单接口中返回获得这个会话id并且需要入库,这个参数最重要的作用是用于第一次我们没有支付,但已经生成了一个待支付的订单。这种情况下我们不需要再次去调用下单接口返回prepayId,因为我们已经生成过了这个值

下面看手机端页面的js代码:


  1. //微信支付
  2. function wxPay(outTradeNo){
  3. var orderType="0"; //路线 订单
  4. $.ajax({
  5. url :'<%=basePath%>client/travel/getWXClientPayInfo.do?outTradeNo='+outTradeNo+'&orderType='+orderType,
  6. cache : false,
  7. type : "get",
  8. success : function(data)
  9. {
  10. if(data!=null){
  11. data=jQuery.parseJSON(data);
  12. var u=navigator.userAgent;
  13. var isAndroid=u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端
  14. var isiOS=!!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
  15. if(isAndroid){
  16. ClientInterface.pay(outTradeNo,data.prepayid,data.noncestr,data.timestamp,data.sign,orderType);
  17. }