Sổ tay VBAER và Những điều cần biết

Liên hệ QC

levanduyet

Hãy để gió cuốn đi.
Thành viên danh dự
Tham gia
30/5/06
Bài viết
1,798
Được thích
4,699
Giới tính
Nam
1. Tính thời gian thực hiện của một đoạn mã

Đôi khi trong lập trình chúng ta cần xem, dùng đoạn code nào thì nhanh hơn, các bạn có thể xem và sử dụng đoạn mã sau:

Mã:
    Dim StartTime As Double

'   Bắt đầu tính thời gian
   StartTime = Timer

'   Các đoạn mã của bạn ở đây
'
'

' Kết thúc đoạn mã của bạn
' Tính và thông báo thời gian thực hiện

    MsgBox Format(Timer - StartTime, "00.00") & " giây."

Một cách khác:

So sánh thời gian thực hiện đến phần ngàn giây:

Mã:
Public Declare Function QueryPerformanceFrequency _
                         Lib "kernel32" (lpFrequency As Currency) As Long
Public Declare Function QueryPerformanceCounter _
                         Lib "kernel32.dll" (lpPerformanceCount As Currency) As Long

Sub CalculateTime()
    Dim Ar(1 To 20, 1 To 4) As Currency, WS As Worksheet
    Dim n As Currency, str As Currency, fin As Currency
    Dim y As Currency
    Dim i As Long, j As Long
    Application.ScreenUpdating = False
    For i = 1 To 4
        For j = 1 To 20
            Set WS = ThisWorkbook.Sheets.Add
            WS.Range(“A1”).Value = 1
            QueryPerformanceFrequency y
            QueryPerformanceCounter str
            Select Case i
            Case 1: Macro1
            Case 2: Macro1_Version2
            Case 3: Macro1_Version3
            Case 4: Macro1_Version4
            End Select
            QueryPerformanceCounter fin
            Application.DisplayAlerts = False
            WS.Delete
            Application.DisplayAlerts = True
            n = (fin - str)
            Ar(j, i) = CCur(Format(n, "##########.############") / y)
        Next j
    Next i
    With Range(“A1”).Resize(1, 4)
        .Value = Array("Macro1", "Macro2", "Macro3", "Macro4")
        .Font.Bold = True
    End With
    Range("A2").Resize(20, 4).Value = Ar
    With Range("A22").Resize(1, 4)
        .FormulaR1C1 = "=AVERAGE(R2C:R21C)"
        .Offset(1).FormulaR1C1 = "=RANK(R22C,R22C1:R22C4,1)"
        .Resize(2).Font.Bold = True
    End With
    Application.ScreenUpdating = True
End Sub

Nguồn: MrExcel Library

Lê Văn Duyệt
 
Lần chỉnh sửa cuối:
2. Chú ý khi dùng hoặc không dùng Option Base 1

Trong lập trình đôi khi các bạn quên đi việc có khai báo/không có khai báo
Mã:
Option Base 1
để mà viết code cho đúng.

Khi chúng ta khai báo Option Base 1 ở đầu một module, điều đó có nghĩa phần tử thấp nhất của mảng sẽ bắt đầu là 1.
Ví dụ: khi khai báo
Mã:
Dim Arr(1) As Long
Thì bạn đã tạo một mảng với một phần tử.

Để tránh nhầm lẫn khi làm việc với mảng bạn nên khai báo Option Base và nên dùng LBoundUBound để lấy các giới hạn dưới hoặc trên của một mảng.
Ví dụ : bạn hãy dùng
Mã:
For N = LBound(Arr) To UBound(Arr)
    ' code của bạn ở đây
End If
thay vì dùng
Mã:
For N = 1 To UBound(Arr)
    ' code của bạn ở đây
End If

Đọc thêm về mảng tại đây.

Lê Văn Duyệt
 
Lần chỉnh sửa cuối:
3. Nên dùng các hàm sẵn có để kiểm tra: kiểu của dữ liệu, lỗi, mảng,...

  • Dùng hàm TypeName: để kiểm tra kiểu dữ liệu của biến. Hàm sẽ trả về một chuổi thông tin về biến. Tham khảo thêm tại đây.
  • Dùng hàm IsArray: để kiểm tra có phải là mảng hay không? Tham khảo thêm tại đây.
  • Dùng hàm IsDate: để kiểm tra có phải là dạng ngày hay không? Tham khảo thêm tại đây.
  • Dùng hàm IsNumeric: để kiểm tra xem dữ liệu có phải dạng số hay không? Tham khảo thêm tại đây.
  • Dùng hàm IsNull: Kiểm tra dữ liệu có phải Null hay không? Chú ý: Null hoàn toàn khác với chuổi rỗng hoặc chuổi có chiều dài bằng 0. Tham khảo thêm tại đây.
  • Dùng hàm IsEmpty: để xác định biến có được khởi tạo hay chưa. Tham khảo thêm tại đây.
  • Dùng hàm IsMissing: để xác định xem các biến được khai báo dạng Optional trong một thủ tục có được truyền cho một thủ tục hay không. Tham khảo thêm tại đây.
  • Dùng hàm IsError: để kiểm tra xem một biểu thức là một giá trị lỗi hay không. Tham khảo thêm tại đây.

Lê Văn Duyệt
 
4. Dùng công cụ Mz Tool cho VBA và VB6

Khi lập trình công cụ để lưu trữ code, tạo thư viện là phần không thể thiếu của các lập trình viên.
Vậy nên đối với VBAER thì Mz Tool sẽ giúp ích cho các bạn rất nhiều.
Các bạn hãy tải về và tham khảo tại đây: http://www.mztools.com/v3/mztools3.aspx
Do trang web đã không còn bản 3.0 (bản miễn phí) nên các bạn có thể copy ở link này.

Lê Văn Duyệt
 

File đính kèm

  • mztools3_original.gif
    mztools3_original.gif
    48.6 KB · Đọc: 4,344
Lần chỉnh sửa cuối:
5. Một công cụ không thể thiếu được cho VBAER: Smart Indenter v3.5

Chỉnh sửa các đoạn mã của bạn để dễ nhìn và dễ phát hiện sai, nên dùng công cụ miễn phí Smart Indenter v3.5.
Các bạn có thể tải về tại đây: http://www.oaltd.co.uk/Indenter/Default.htm

Update/Cập nhật ngày 03/06/2018: đối với một số bạn cài đặt trên office 2013 trở về sau có thể bị lỗi, tôi gởi lại file hướng dẫn nhé.
Tải tập tin tại đây.
Lê Văn Duyệt
 

File đính kèm

  • SIOptions.gif
    SIOptions.gif
    30.7 KB · Đọc: 4,232
Lần chỉnh sửa cuối:
6. Các nguồn về Macro 4:

_ Tài liệu của Microsoft về Macro 4 tại đây: http://support.microsoft.com/kb/128185/EN-US.
_ Do đây là định dạng của Windows Help, nên có thể một số phiên bản Windows không mở được. Vậy các bạn có thể tham khảo, tải về tại đây: http://support.microsoft.com/kb/917607
Chú ý: bạn chọn phiên bản cho đúng. Nhưng trước khi tải về, chương trình yêu cầu bạn phải kiểm tra bản quyền của Windows.

Lê Văn Duyệt
 
7. Các hàm API và cách dùng:
Trong lập trinh VBA, đôi khi chúng ta cần phải sử dụng các hàm Windows API

caulacbovb đã viết:
API là gì?
API là viết tắt của Application Programming Interface (giao diện lập trình ứng dụng). Nó là 1 giao tiếp phần mềm được dùng bởi các ứng dụng khác nhau. Cũng giống như bàn phím là một thiết bị giao tiếp giữa ngườI dùng và máy tính, API là 1 giao tiếp phần mếm chẳng hạn như giữa chương trình và hệ điều hành (HĐH). Bộ API của từng HĐH là khác nhau, làm cho các HĐH khác nhau và thường không tương thích với nhau. Ví dụ những phần mềm trên máy Macintosh không thể chạy được trên máy Windows bởi vì Macintosh và Windows có các API hòan tòan khác nhau
Các bạn có thể tham khảo đường link sau:
http://www.caulacbovb.com/forum/viewtopic.php?f=22&t=89

Các bạn có thể tham khảo thêm các ứng dụng Visual Basic 6 chuyên sâu tại đây: http://leandroascierto.com/blog/

VB_Good.jpg


Lê Văn Duyệt
 
Lần chỉnh sửa cuối:
8. Định dạng của tập tin Excel từ phiên bản 2007

Nhiều bạn thắc mắc, tại sao tập tin Excel từ phiên bản 2007 về sau lại nhẹ thế nhỉ ?

Các bạn hãy cùng tôi tìm hiểu xem.

Công cụ cần:
  • Dĩ nhiên bạn phải có phiên bản Excel 2007 trở về sau.
  • Phần mềm giải nén tập tin. Các bạn có thể dùng 7-zip, tải về tại đây: http://www.7-zip.org/download.html
  • Notepad++ dùng để mở các tập tin xml. Các bạn có thể tải về tại đây: http://notepad-plus-plus.org/

1. Đầu tiên các bạn hãy mở tạo một tập tin Excel, ghi vài chữ. Giả sử ở ô A1, sheet1 tôi nhập chữ "Tập tin Excel 2007"

Excel20071.jpg


Sau đó lưu vào thư mục nào đó bạn đã định sẵn, với định dạng của tập tin là xlsx

2. Bạn vào thư mục chứa tập tin này, hãy đổi đuôi tập tin từ xlsx sang zip. Khi được hỏi thì bạn hãy đồng ý.
Chú ý: bạn nên copy rồi hãy đổi định dạng của tập tin.

Excel20072.jpg


3. Sau đó bạn hãy dùng chương trình giải nén để mở tập tin vừa mới đổi.
Bạn thấy gì nào?

Excel20073.jpg


Các bạn hãy dùng Notepad ++ để mở các tập tin xml này.

Excel20074.jpg



4. Các bạn hãy thử tìm xem chuổi Tập tin Excel 2007 nằm trong tập tin nào? Và hãy thử đổi thành Tập tin Excel 2010, sau đó lưu lại.

Bây giờ các bạn hãy nén tất cả các tập tin vừa bung ra, thành tập tin Excel2010.zip

5.Sau đó, các bạn hãy đổi đuôi tập tin này thành Excel2010.xlsx, rồi hãy mở ra xem sao?

Excel20075.jpg


Các bạn thấy gì nào?

Và cuối cùng chúng ta đã có câu trả lời cho câu hỏi ban đầu, tập tin Excel từ phiên bản 2007 trở về sau tại sao lại "nhẹ" thế ?

Chúc các bạn có nhiều khám phá vui.


Lê Văn Duyệt
 
Lần chỉnh sửa cuối:
10. Làm thế nào để sử dụng file excel được phát triển trên môi trường VSTO cho Office (Visual Studio Tools for Office)

Khi tập tin Excel được phát triển trên môi trường VSTO, để người dùng cuối (end-user) có thể dùng được chúng ta cần phải cài thêm bộ:
Visual Studio Tools for Office Runtime trên máy người dùng cuối.

Thông tin các bạn có thể tham khảo tại đây: http://msdn.microsoft.com/en-us/library/d2tx7z6d%28v=vs.80%29.aspx

Microsoft Visual Studio 2005 Tools for Office Second Edition Runtime (build 8.0.50727.940) (x86): tại đây.

Lê Văn Duyệt
 
11. Tách riêng workbook chứa dữ liệu và workbook chứa code:

Trong Access, dân lập trình thường tách riêng tập tin chứa các form và code với tập tin chứa CSDL.
Hai tập tin Access này được link với nhau qua chức năng Link Tables trong Access.
Với cách làm này việc cập nhật code sẽ được dễ dàng, chỉ việc gởi tập tin chứa các form và code cho khách hàng.

Vậy đối với Excel, chúng ta có thể làm điều tương tự hay không?

Xin thưa là có.

Làm được điều này (tách tập tin chứa dữ liệu và tập tin chứa code), sẽ giúp chúng ta dễ dàng bảo trì, cập nhật code mà không ảnh hưởng đến tập tin chứa dữ liệu của khách hàng.

Ví dụ: Trong tập tin chứa dữ liệu của khách hàng chỉ có đoạn code sau trong thủ tục sự kiện Open của workbook

Mã:
Private Sub Workbook_Open()
    On Error Resume Next
    X = Workbooks(“Code.xlsm”).Name
    If Not Err = 0 Then
        On Error GoTo 0
        Workbooks.Open Filename:= _
                       ThisWorkbook.Path & Application.PathSeparator & “Code.xlsm”
    End If
    On Error GoTo 0
    Application.Run “Code.xlsm!CustFileOpen”
End Sub

Thủ tục CustFileOpen trong tập tin chứa code, sẽ làm nhiệm vụ tạo Menu cho ứng dụng và link với các thủ tục thực thi tương ứng.

Nguồn: MrExcel Library

Lê Văn Duyệt
 
Web KT
Back
Top Bottom