vba 模塊 裡的 子程序?除了使用Excel提供的标準類外,VBA還提供類模塊功能,使開發者可根據需要定義自己的類,我來為大家科普一下關于vba 模塊 裡的 子程序?以下内容希望對你有幫助!
除了使用Excel提供的标準類外,VBA還提供類模塊功能,使開發者可根據需要定義自己的類。
将常用代碼封裝為類,可重複應用在不同的應用程序中,從而提高程序的開發效率。
在自定義類中,通過屬性、方法和事件向用戶提供服務,把完成運算的過程隐藏起來。
1 類的作用在VBA中,開發人員不使用類模塊也能開發絕大多數的應用系統。不使用類模塊編寫程序時,一些程序代碼和程序處理的數據是分離的。這樣可能會出現多個不同過程用一定的規則修改數據。當需要調整修改數據的規則時,就需要修改多段程序的代碼。
如果使用類将數據和處理這些數據的代碼封裝在一起,将使管理任務更加簡單。主要體現在以下幾個方面:
1.1 數據作為對象的屬性,都與特定對象相關聯,使數據與對象具有特定的關系(不再是分離的松散關系)。
1.2 數據作為對象的屬性,用戶隻能通過設置的接口(屬性、方法和事件)進行修改,使對象的數據可保持在有效的範圍内。
1.3 使用對象提供的方法,對一個對象可以進行的操作提供統一接口。在對象的定義中,隻需要修改一次代碼,即可調整數據的修改規則。
1.4 使用類可以将複雜的過程封裝在類的内部,類的使用人員不需要知道類的實現過程,隻需要熟悉類的屬性、方法和事件即可。
2 創建類模塊通過創建一個“數據庫類”來說明自定義類的操作細節。該類的功能在于可創建與Access數據庫的連接。将數據庫連接字符封裝在類模塊中,用戶通過屬性給出要訪問的Access數據庫名和SQL語句,執行内置的方法即可返回記錄集。
2.1 新建類模塊
Alt F11→“插入”→“類模塊”→在“屬性”窗口中修改類的名稱為"clsADO"。
2.2 創建類屬性
2.2.1 創建私有變量
Option Explicit
'使用本類模塊,需添ADO的引用"Microsoft ActiveX Data Objects 2.8 Library"
Private cnn As Connection '連接對象
Private rs As Recordset '記錄集對象
Private m_DBFullName As String 'Access數據庫名稱(包含路徑信息)
Private m_CommandText As String 'SQL語句
2.2.2 創建Property Get過程來獲取對象的屬性值
Property Get DBFullName() As String '返回數據庫名稱
DBFullName = m_DBFullName
End Property
Property Get CommandText() As String '返回SQL語句
CommandText = m_CommandText
End Property
2.2.3 創建Property Let過程改變對象屬性
Property Let DBFullName(strDBFullName As String) '設置數據名稱
If LCase(Right(strDBFullName, 4)) <> ".mdb" And _
LCase(Right(strDBFullName, 6)) <> ".accdb" Then
Exit Property
End If
m_DBFullName = strDBFullName
End Property
Property Let CommandText(strSQL As String) '設置SQL語句
m_CommandText = strSQL
End Property
2.3 定義類的方法
Private Sub ConnDB() '連接數據庫
If cnn.State = 0 And Len(m_DBFullName) > 0 Then
cnn.Provider = "Microsoft.Jet.OLEDB.4.0"
cnn.Open m_DBFullName
End If
End Sub
Public Sub CloseDB() '關閉連接
cnn.Close
End Sub
Public Function RunSQL() As Recordset '執行SQL語句
If Len(m_CommandText) > 0 Then
Call ConnDB '創建數據庫連接
If rs.State <> 0 Then rs.Close
rs.Open Source:=m_CommandText, _
ActiveConnection:=cnn, _
CursorType:=adOpenStatic, _
LockType:=adLockReadOnly
Set RunSQL = rs '返回記錄集
End If
End Function
2.4 定義類模塊的事件
Private Sub Class_Initialize() '初始化類
Set cnn = New Connection
Set rs = New Recordset
End Sub
Private Sub Class_Terminate() '終止類
If cnn.State = 1 Then
cnn.Close
End If
Set cnn = Nothing
Set rs = Nothing
End Sub
3 使用類模塊3.1 用新定義的類聲明對象
Dim tstADO As New clsADO
3.2 使用對象編寫過程
Sub test()
Dim rs As Recordset, fld As Field
On Error Resume Next
tstADO.DBFullName = ThisWorkbook.Path & "\Northwind.mdb" '設置屬性
tstADO.CommandText = "select * from 客戶" '設置屬性
Set rs = tstADO.RunSQL '調用自定義對象的方法
With Worksheets(1)
i = 1: j = 1
For Each fld In rs.Fields
.Cells(i, j) = fld.Name
j = j 1
Next
j = 1
i = i 1
Do While Not rs.EOF
For Each fld In rs.Fields
.Cells(i, j) = fld.Value
j = j 1
Next
j = 1
rs.MoveNext
i = i 1
Loop
End With
End Sub
以上過程執行完後,即可在工作簿的第一個工作表中顯示數據庫“Northwind.mdb”中的數據庫表“客戶”的全部數據。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!