大家好,我們今日繼續(xù)講解VBA代碼解決方案的第96講內(nèi)容:利用類模塊完成多個(gè)控件的統(tǒng)一相應(yīng)。為了說明類模塊的作用,我們先設(shè)計(jì)一個(gè)場景,我們?cè)赥extBox1、TextBox2、TextBox3中輸入完數(shù)據(jù)后,利用文本框的Change事件使TextBox4顯示其三個(gè)文本框值相加的和,需要在每一個(gè)文本框的Change事件中寫上相同的重復(fù)代碼,使用類模塊可以簡化代碼。
那么什么類模塊呢?類模塊與窗體模塊類似,只是沒有可見的用戶界面??梢允褂妙惸K創(chuàng)建含有方法和屬性代碼的自己的對(duì)象。使用類模塊可以創(chuàng)建自定義的類,使用此類作為模板創(chuàng)建對(duì)象。類模塊包含一系列的屬性,方法和事件,用來和其他對(duì)象或創(chuàng)建對(duì)象的代碼交互。
下面看我們的實(shí)例講解:有四個(gè)文本框,其中三個(gè)用來輸入數(shù)據(jù),一個(gè)用來顯示其他三個(gè)文本框相加后的合計(jì)數(shù),首先打開VBE,插入一個(gè)類模塊建立一個(gè)類,類模塊的名字就是類的名字修改為"mynzcmds",在類模塊中輸入下面的代碼:
Public WithEvents mynzcmd As MSForms.TextBox
代碼解析:
使用Public語句聲明變量mynzcmd是用來響應(yīng)由TextBox對(duì)象觸發(fā)的事件的對(duì)象變量。
我們還需要補(bǔ)充一個(gè)概念,就是窗體的Initialize事件。Initialize 事件即初始化事件,任何窗體生命周期的第一個(gè)事件都是Initialize。只要在項(xiàng)目中使用了窗體的名稱,在創(chuàng)建實(shí)際窗口及其控件之前,都會(huì)發(fā)生initialize事件??梢栽趇nitialize事件處理過程中正確地初始化窗體變量,它在Load事件之前發(fā)生。
在窗體的Initialize事件中寫入下面的代碼:
Dim mynzcol As New Collection
Private Sub UserForm_Initialize()
Dim i As Integer
Dim mynzmyc As mynzcmds
For i = 1 To 3
Set mynzmyc = New mynzcmds
Set mynzmyc.mynzcmd = Me.Controls("TextBox" & i)
mynzcol.Add mynzmyc
Next
Set mynzmyc = Nothing
End Sub
代碼解析:
第1行代碼在模塊頂部聲明變量mynzcol的類型為集合。
第5行到第9行代碼,將窗體中的三個(gè)文本框賦給mynzcol集合。
在類模塊中寫入下面的代碼:
Private Sub mynzcmd_Change()
Dim i As Integer
Dim mynzDval As Double
For i = 1 To 3
mynzDval = mynzDval + Val(UserForm2.Controls("TextBox" & i))
UserForm2.TextBox4.Value = mynzDval
Next
End Sub
代碼解析:
窗體中的3個(gè)文本框統(tǒng)一的Change事件,當(dāng)任何一個(gè)文本框中的數(shù)據(jù)發(fā)生變化時(shí),所有文本框相加的合計(jì)數(shù)顯示在最后一個(gè)文本框中。
代碼截圖:
類模塊截圖:
代碼運(yùn)行:
當(dāng)錄入數(shù)字時(shí):求和結(jié)果會(huì)實(shí)時(shí)改變
聯(lián)系客服