[接上讲]

近的系列文章,在讲工作表中自定义事件的监听和触发。是这一集的后一讲,我们仍是通过一个实例来完成我们的讲解。这讲是利用前几讲的内容,实现一个很小的四则运算的自动测验的程序。如下面的截图:

利用类模块完成测验的自动评估插图

在这个界面中,我们可以先口算一下数值1和数值2按照运算符号计算所得的结果,然后点击一下运算符号,结果会在D列中自动显示,从而达到即时测验的目的。

下面讲解这个程序的实现过程,先看工作表的代码:

Private WithEvents MyS As mysheet

Private Sub MyS_mySelectRan()

If Cells(MyS.HS, MyS.LS) = “+” Then Cells(MyS.HS, 4) = Cells(MyS.HS, 2) + Cells(MyS.HS, 3)

If Cells(MyS.HS, MyS.LS) = “X” Then Cells(MyS.HS, 4) = Cells(MyS.HS, 2) * Cells(MyS.HS, 3)

If Cells(MyS.HS, MyS.LS) = “/” Then Cells(MyS.HS, 4) = Cells(MyS.HS, 2) / Cells(MyS.HS, 3)

If Cells(MyS.HS, MyS.LS) = “-” Then Cells(MyS.HS, 4) = Cells(MyS.HS, 2) – Cells(MyS.HS, 3)

End Sub

Private Sub Worksheet_Activate()

Set MyS = New mysheet

Set MyS.mySht = Sheets(“54”)

Range(“b3”, “d15”).ClearContents

CD = InputBox(“请选择测试的难易程度:A(容易),B(中等),C(难)”, “提示”)

If CD = “A” Then

mixa = 10: maxb = 20

Else

If CD = “B” Then

mixa = 20: maxb = 50

Else

If CD = “C” Then

mixa = 50: maxb = 100

Else

MsgBox “请选择合适的等级”: End

End If

End If

End If

For r = 3 To 15

Cells(r, 2) = Application.WorksheetFunction.RandBetween(mixa, maxb)

Cells(r, 3) = Application.WorksheetFunction.RandBetween(mixa, maxb)

Next

End Sub

Private Sub Worksheet_Deactivate()

Set MyS = Nothing

End Sub

标准模块的代码:

Sub mynz()

Sheets(“54”).Select

Range(“b3”, “d15”).ClearContents

CD = InputBox(“请选择测试的难易程度:A(容易),B(中等),C(难)”, “提示”)

If CD = “A” Then

mixa = 10: maxb = 20

Else

If CD = “B” Then

mixa = 20: maxb = 50

Else

If CD = “C” Then

mixa = 50: maxb = 100

Else

MsgBox “请选择合适的等级”: End

End If

End If

End If

For r = 3 To 15

Cells(r, 2) = Application.WorksheetFunction.RandBetween(mixa, maxb)

Cells(r, 3) = Application.WorksheetFunction.RandBetween(mixa, maxb)

Next

End Sub

代码的截图:

利用类模块完成测验的自动评估插图1
利用类模块完成测验的自动评估插图2
利用类模块完成测验的自动评估插图3

下面我们将代码进行讲解,其中涉及到类模块的代码这里不再讲了,大家可以回顾一下我们以前的讲解内容:

1

Private Sub MyS_mySelectRan()

If Cells(MyS.HS, MyS.LS) = “+” Then Cells(MyS.HS, 4) = Cells(MyS.HS, 2) + Cells(MyS.HS, 3)

If Cells(MyS.HS, MyS.LS) = “X” Then Cells(MyS.HS, 4) = Cells(MyS.HS, 2) * Cells(MyS.HS, 3)

If Cells(MyS.HS, MyS.LS) = “/” Then Cells(MyS.HS, 4) = Cells(MyS.HS, 2) / Cells(MyS.HS, 3)

If Cells(MyS.HS, MyS.LS) = “-” Then Cells(MyS.HS, 4) = Cells(MyS.HS, 2) – Cells(MyS.HS, 3)

End Sub

上述代码是mySelectRan事件实现触发后的过程,当我们单击工作表的A列时,当满足一定条件后会触发mySelectRan事件,在这个事件过程中,会根据A列单元格的运算符号实现数值1和数值2的运算。

2 Private Sub Worksheet_Activate()

Set MyS = New mysheet

Set MyS.mySht = Sheets(“54”)

Range(“b3”, “d15”).ClearContents

CD = InputBox(“请选择测试的难易程度:A(容易),B(中等),C(难)”, “提示”)

If CD = “A” Then

mixa = 10: maxb = 20

Else

If CD = “B” Then

mixa = 20: maxb = 50

Else

If CD = “C” Then

mixa = 50: maxb = 100

Else

MsgBox “请选择合适的等级”: End

End If

End If

End If

For r = 3 To 15

Cells(r, 2) = Application.WorksheetFunction.RandBetween(mixa, maxb)

Cells(r, 3) = Application.WorksheetFunction.RandBetween(mixa, maxb)

Next

End Sub

当工作表Activate 事件发生时,实现了类的实例化和工作表监听的关联后会根据用户选择的难易程度在数值1列和数值2列实现数值的自动填充。这个自动填充的过程同样出现在标准模块的”刷新”按钮中。

当用户选择的是容易的级别,那么数值1和数值2的数据取值是10和20 之间;当用户选择的”中等”级别,那么数值1和数值2的数据取值是20和50 之间;当用户选择的是难的级别,那么数值1和数值2的数据取值是50和100之间。大家在看代码的时候要注意,这里利用了一个工作表函数RandBetween。

下面我们看运行的情况:

利用类模块完成测验的自动评估插图4

整个过程是十分友好的。好了,整个工作表事件的触发与监听讲到这里。

内容回向:

1 本讲的实例事件的触发在类模块的哪个部分?

2 运算结果的数值是如何准确定位的?

备注:本讲代码参考程序文件:VBA-CLASS(下51-56).xlsm

利用类模块完成测验的自动评估插图5

在取代OFFICE新的办公软件没有到来之前,谁能在数据处理方面做到,谁是。其中登峰至极的技能非VBA莫属!众鸟高飞尽,孤云独去闲。相看两不厌,只有敬亭山。

学习VBA是个过程,这个过程是自己忍受孤独的过程。

“水善利万物而不争”,你看她绵绵密密,微处则无声,巨则汹涌。学习亦如此,把握现在,为达千里,需要默默耕耘,知道什么是自己所需要的,不要蜷缩在一小块自认为天堂的世界里,待到暮年时去自欺欺人。要在当下,用一颗充满生机的心灵,努力提高自己,这才是进取。越是有意义的事情,困难会越多。愿力决定始终,智慧决定成败。不管遇到什么,都是风景。看淡纷争,看轻得失。一杯茶,满也好,少也好,不要去计较;浓也好,淡也好,其中都有值得品的味道。去感悟真实的时间,静下心,多学习,积累福报。而不是天天混日子,也不是天天熬日子。一切众生的心都在变化,像时间一样,永远不会停留,把握现在是福报。

VBA是利用Office实现自己小型办公自动化的有效手段,我记得20年前自己初学VBA时,那时的资料甚少,只能看源码自己琢磨,真的很难。20年过去了,为了不让学习VBA的朋友重复我之前的经历,我根据自己多年VBA实际利用经验,推出了五部VBA专门教程,回向给需要学习的朋友:

套:VBA代码解决方案是VBA中各个知识点的讲解,覆盖绝大多数的VBA知识点,初学必备;

第二套:VBA数据库解决方案数据库是数据处理的专业利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作。

第三套:VBA数组与字典解决方案数组和字典是VBA的精华,字典是VBA代码水平提高的有效手段,值得深入的学习。

第四套:VBA代码解决方案之视频是专门面向初学者的视频讲解,可以快速入门,更快的掌握这门技能。

第五套:VBA中类的解读和利用 这是一部高级教程,讲解类的虚无与肉身的度化,可以对促进自己理论的提高。

学习的过程也是修心的过程,修一个平静的心。在代码的世界中,心平静了,心情好了,身体自然而然好。心静则正,内心里没有那么多邪知邪见,也没有那么多妄想。在平静中积累自己的财富。我的上述教程是我多的经验的传递,大家可以根据1,3,2,5或者是4,3,2,5的顺序逐渐深入的逐渐学习。

利用类模块完成测验的自动评估插图6

后将一阙词送给致力于VBA学习的朋友:

浮云掠过,暗语无声,

唯有清风,惊了梦中啼莺。

望星,疏移北斗,

奈将往事雁同行。

阡陌人,昏灯明暗,忍顾长亭。

多少VBA人,

暗夜中,悄声寻梦,盼却天明。

怎无凭!

分享成果,随喜正能量

作者 nasiapp

在线客服
官方客服
我们将24小时内回复。
12:01
您好,有任何疑问请与我们联系!

选择聊天工具: