Hỏi về Module và Class Module (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

ThanhThao

Thành viên mới
Tham gia
19/7/06
Bài viết
49
Được thích
57
Chào các bác!

Em cũng hay sử dụng VBA trong công việc. Theo thói quen, ở cửa sổ Microsoft Visual Basic, tại menu Insert, em hay vào Module để viết lệnh. Tuy nhiên em còn thấy Class Module cũng tựa như vậy, nhưng em chưa vào bao giờ.

Các bác chỉ dẫn cho em sự khác biệt giữa 2 loại trên nhé, xin cám ơn!
 
Mã:
Dim objCar AS clsCar

Set objCar = New clsCar

   objCar.Start  '// Start is method
   objCar.Speed = 150 '// Km/h  --> Speed is property
   objCar.Run  '// Run is method

Set objCar = Nothing

Đó, Class dùng để tạo ra các object (Bạn nhìn xung quanh ta mà xem, ko cái gì ko phải là đối tượng cả: cái nhà, cái cửa ra vào, cái cửa sổ, quyển sách, cái máy tính, con người, bầu trời, chim thú, cây cối, chứng từ kế toán, đối tượng công nợ, v.v...). Khi viết class, nếu ta chưa dùng đến thì các methods, properties, events chưa load vào bộ nhớ nên rất tiết kiệm resources. Nếu ta dùng đến (Set objCar = New clsCar) thì nó mới load object vào bộ nhớ và kho ta kill object (Set objCar = Nothing) thì ta đã giải phóng object ra khỏi bộ nhớ.

Thế còn module thì sao, đó chỉ là những thư viện dùng chung (nghĩa là thường thì các hàm, các biến ko liên quan đến đối tượng nào cụ thể cả). Khi chạy ứng dụng thì tất cả những gì viết trong đó sẽ được load vào bộ nhớ. Vì vậy, khi ra viết ứng dụng, ko nên cái gì cũng để chung vào Module cả đống mà nhiều khi chả dùng tý nào trong ứng dụng.

Đấy chỉ là 1 vài lý thuyết chung nhất về lập trình, ko cần ngôn ngữ cấp cao cấp thấp gì cả nhưng ko phải ai cũng biết những căn bản trong lập trình để tạo ra tính chuyên nghiệp. Tính chuyên nghiệp cũng không chỉ thể hiện ở ngôn ngữ như VS .NET 2005 mà có khi thể hiện ở những file Excel.
 
Lần chỉnh sửa cuối:
Theo bác thì ta nên sử dụng Module và Class module ở mức độ như thế nào?
 
ThanhThao đã viết:
Theo bác thì ta nên sử dụng Module và Class module ở mức độ như thế nào?

Mình tưởng là mình đã giải thích rất rõ ở trên rồi chứ nhỉ. Không hiểu sao ở Excel lại gọi là Class module chứ đã là Class thì là Class.

1 cái (module trong VB(A)) dùng làm thư viện (hàm số, biến số, hăng số, enum,...). Còn 1 cái dùng để mô tả đối tượng (với các phương thức, thuộc tính, events...). Có lẽ bạn chưa quen viết object nhỉ.
 
mọi người cho em hỏi em viết như thế này có sai gì không sao lại trả ra kết quả sai nhỉ
vì thấy CreateObject("Scripting.FileSystemObject") không hiện ra gợi ý trong quá trình viết code nên chả biết nó có những cái gì để mà viết tiếp nên em tính viết 1 class để hỗ trợ viết code cho thuận tiện
chèn 1 classmodule tên fso
nội dung code
Mã:
Option Explicit
Dim mfso As Object
Sub Class_Initialize()
Set mfso = CreateObject("Scripting.FileSystemObject")
End Sub
Sub vbNewFolder(ByVal DuongDan As String)
    If Right(DuongDan, 1) = "\" Then DuongDan = Left(DuongDan, Len(DuongDan) - 1)
    If Not mfso.FolderExists(DuongDan) Then mfso.CreateFolder (DuongDan)
End Sub
Sub vbNewFiles(ByVal DuongDan As String)
    Dim mFiles
    Set mFiles = mfso.CreateTextFile(DuongDan, 1, 1)
    Set mFiles = Nothing
End Sub
Sub vbCopyFolder(ByVal Nguon As String, ByVal Dich As String)
    mfso.CopyFolder Nguon, Dich
End Sub
Sub vbCopyFiles(ByVal Nguon As String, ByVal Dich As String)
    mfso.CopyFile Nguon, Dich
End Sub
Sub vbMoveFolder(ByVal Nguon As String, ByVal Dich As String)
    mfso.MoveFolder Nguon, Dich
End Sub
Sub vbMoveFiles(ByVal Nguon As String, ByVal Dich As String)
    mfso.MoveFile Nguon, Dich
End Sub
Sub vbDeleteFolder(ByVal DuongDan As String)
    mfso.DeleteFolder DuongDan
End Sub
Sub vbDeleteFiles(ByVal DuongDan As String)
    mfso.DeleteFile DuongDan
End Sub
Function vbExistFolder(ByVal DuongDan As String) As Boolean
    If (mfso.FolderExists(DuongDan)) Then vbExistFolder = True Else vbExistFolder = False
End Function
Function vbExistFiles(ByVal DuongDan As String) As Boolean
    If (mfso.FileExists(DuongDan)) Then vbExistFiles = True Else vbExistFiles = False
End Function
Sub vbWriteFiles(ByVal DuongDan As String, ByVal NoiDung As String)
    On Error Resume Next
    With mfso.CreateTextFile(DuongDan, 1, 1)
        .Write NoiDung
        .Save
        .Close
    End With
End Sub
Function vbReadFiles(ByVal DuongDan As String) As String
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    vbReadFiles = mfso.OpenTextFile(DuongDan, ForReading).ReadAll
End Function
thêm 1 module và chèn code
Mã:
Option Explicit


Sub TextThu()
Dim a As fso
Set a = New fso
a.vbNewFolder "C:\aaa"
a.vbNewFolder "C:\bbb"
a.vbNewFiles "C:\aaa\xxx.xml"
a.vbCopyFiles "C:\aaa\xxx.xml", "C:\bbb\xxx.xml"
MsgBox "files xxx.xml " & IIf(a.vbExistFiles("C:\aaa\xxx.xml"), "", "khong") & " ton tai"
a.vbDeleteFiles "C:\aaa\xxx.xml"
MsgBox "files xxx.xml " & IIf(a.vbExistFiles("C:\aaa\xxx.xml"), "", "khong") & " ton tai"
a.vbMoveFiles "C:\bbb\xxx.xml", "C:\aaa\xxx.xml"
[COLOR=#ff0000]MsgBox "noi dung file xxx " & a.vbReadFiles("C:\aaa\xxx.xml")[/COLOR]
a.vbWriteFiles "C:\aaa\xxx.xml", "bbbbb"
[COLOR=#ff0000]MsgBox "noi dung file xxx " & a.vbReadFiles("C:\aaa\xxx.xml")[/COLOR]
a.vbDeleteFolder "C:\aaa"
a.vbDeleteFolder "C:\bbb"
Set a = Nothing
End Sub
chỗ màu đỏ ban đầu lại xuất ra yđ trong khi không có dữ liệu (muốn xuất ra kết quả là rỗng)
chỗ màu đỏ thứ 2 xuất ra yđb trong khi đã có dữ liệu là bbbbb (muốn xuất ra kết quả là bbbbb )
vậy phải viết như thế nào để xuất ra kết quả đúng
 
mọi người cho em hỏi em viết như thế này có sai gì không sao lại trả ra kết quả sai nhỉ
vì thấy CreateObject("Scripting.FileSystemObject") không hiện ra gợi ý trong quá trình viết code nên chả biết nó có những cái gì để mà viết tiếp nên em tính viết 1 class để hỗ trợ viết code cho thuận tiện
chèn 1 classmodule tên fso
nội dung code
Mã:
Option Explicit
Dim mfso As Object
Sub Class_Initialize()
Set mfso = CreateObject("Scripting.FileSystemObject")
End Sub
Sub vbNewFolder(ByVal DuongDan As String)
    If Right(DuongDan, 1) = "\" Then DuongDan = Left(DuongDan, Len(DuongDan) - 1)
    If Not mfso.FolderExists(DuongDan) Then mfso.CreateFolder (DuongDan)
End Sub
Sub vbNewFiles(ByVal DuongDan As String)
    Dim mFiles
    Set mFiles = mfso.CreateTextFile(DuongDan, 1, 1)
    Set mFiles = Nothing
End Sub
Sub vbCopyFolder(ByVal Nguon As String, ByVal Dich As String)
    mfso.CopyFolder Nguon, Dich
End Sub
Sub vbCopyFiles(ByVal Nguon As String, ByVal Dich As String)
    mfso.CopyFile Nguon, Dich
End Sub
Sub vbMoveFolder(ByVal Nguon As String, ByVal Dich As String)
    mfso.MoveFolder Nguon, Dich
End Sub
Sub vbMoveFiles(ByVal Nguon As String, ByVal Dich As String)
    mfso.MoveFile Nguon, Dich
End Sub
Sub vbDeleteFolder(ByVal DuongDan As String)
    mfso.DeleteFolder DuongDan
End Sub
Sub vbDeleteFiles(ByVal DuongDan As String)
    mfso.DeleteFile DuongDan
End Sub
Function vbExistFolder(ByVal DuongDan As String) As Boolean
    If (mfso.FolderExists(DuongDan)) Then vbExistFolder = True Else vbExistFolder = False
End Function
Function vbExistFiles(ByVal DuongDan As String) As Boolean
    If (mfso.FileExists(DuongDan)) Then vbExistFiles = True Else vbExistFiles = False
End Function
Sub vbWriteFiles(ByVal DuongDan As String, ByVal NoiDung As String)
    On Error Resume Next
    With mfso.CreateTextFile(DuongDan, 1, 1)
        .Write NoiDung
        .Save
        .Close
    End With
End Sub
Function vbReadFiles(ByVal DuongDan As String) As String
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    vbReadFiles = mfso.OpenTextFile(DuongDan, ForReading).ReadAll
End Function
thêm 1 module và chèn code
Mã:
Option Explicit


Sub TextThu()
Dim a As fso
Set a = New fso
a.vbNewFolder "C:\aaa"
a.vbNewFolder "C:\bbb"
a.vbNewFiles "C:\aaa\xxx.xml"
a.vbCopyFiles "C:\aaa\xxx.xml", "C:\bbb\xxx.xml"
MsgBox "files xxx.xml " & IIf(a.vbExistFiles("C:\aaa\xxx.xml"), "", "khong") & " ton tai"
a.vbDeleteFiles "C:\aaa\xxx.xml"
MsgBox "files xxx.xml " & IIf(a.vbExistFiles("C:\aaa\xxx.xml"), "", "khong") & " ton tai"
a.vbMoveFiles "C:\bbb\xxx.xml", "C:\aaa\xxx.xml"
[COLOR=#ff0000]MsgBox "noi dung file xxx " & a.vbReadFiles("C:\aaa\xxx.xml")[/COLOR]
a.vbWriteFiles "C:\aaa\xxx.xml", "bbbbb"
[COLOR=#ff0000]MsgBox "noi dung file xxx " & a.vbReadFiles("C:\aaa\xxx.xml")[/COLOR]
a.vbDeleteFolder "C:\aaa"
a.vbDeleteFolder "C:\bbb"
Set a = Nothing
End Sub
chỗ màu đỏ ban đầu lại xuất ra yđ trong khi không có dữ liệu (muốn xuất ra kết quả là rỗng)
chỗ màu đỏ thứ 2 xuất ra yđb trong khi đã có dữ liệu là bbbbb (muốn xuất ra kết quả là bbbbb )
vậy phải viết như thế nào để xuất ra kết quả đúng
Muốn cho nó gợi ý thì như sau:
Trên GPE có hết mà Bạn Tham khảo thêm

http://www.giaiphapexcel.com/forum/...ng-quanh-chủ-đề-Tổng-quan-về-FileSystemObject

Hay Link Bác Bill
https://msdn.microsoft.com/en-us/library/314cz14s(v=vs.84).aspx

Mã:
Public Sub FileSystemObject()
    Dim fso As Scripting.FileSystemObject
    Set fso = New Scripting.FileSystemObject        ''// Phai Check Tools\References\Microsoft Scripting Runtime\OK
    '' // // Fso.                                   ''//Khi viet Fso.( Chấm là nó Gợi Ý cho ... no so xuong mot list ve cu phap
    Set fso = Nothing
End Sub
 
Lần chỉnh sửa cuối:
Web KT

Bài viết mới nhất

Back
Top Bottom