PDA

View Full Version : Lập trình hàm mảng cùng A-Tools, tạo ra hàm chạy như BS_SQL()



Nguyễn Duy Tuân
15-12-11, 04:54 PM
LẬP TRÌNH HÀM MẢNG TRONG EXCEL CÙNG ADD-IN A-TOOLS

Bài viết này tôi trình bày với các bạn kiến thức cũng như phương pháp tạo ra hàm mảng, làm việc với mảng giá trị. Cùng với các ví dụ minh họa tôi sẽ cùng các bạn tạo ra những hàm hữu dụng cho người dùng, ví dụ như tạo hàm DVLOOKUP trả về mảng giá trị thỏa mãn, không như hàm VLOOKUP của Excel chỉ trả về duy nhất một giá trị.

Đây và ví dụ về hàm mảng BS_SQL() của A-Tools. Chúng ta sẽ tạo ra những hàm chạy được như thế này:

http://bluesofts.net/Products/AddIns/A-Tools/Pics/BS_SQL_Demo.gif

Trong A-Tools cung cấp hàm BS_SQL(), truy vấn CSDL các loại và trả về một mảng giá trị. Hàm này được dùng để tạo ra các loại sổ sách rất linh hoạt. Để tìm hiểu cách dùng hàm BS_SQL bạn mở các file trong thu mục cài đặt “C:\A-Tools\HELP & DEMOS”, đặc biệt file “SoketoanSQL.xls” là một ví dụ điển hình về việc dùng hàm BS_SQL để tạo ra một sổ kế toán động cho một doanh nghiệp với tốc độ nhanh và linh hoạt.
A-Tools là công cụ mở cho phép nhà phát triển lập trình để tạo ra các hàm với đặc tính giống như hàm BS_SQL(). Để tạo được hàm mảng, chúng ta thực hiện những phần sau:

1. Nhúng file thư viện “addinatools.dll” vào file Excel của bạn
Mở file Excel. Nhấn ALT+F11 để vào môi trường lập trình VBE (Visual Basic Editor). Vào menu A-Tools->References…, khi hiện ra hộp thoại bạn hãy chọn mục Add-In A-Tools, nếu không thấy hãy chọn nút “Browse…” và chọn file ở đường dẫn “C:\Windows\System32\addinatools.dll”. Kết quả bạn thực hiện được như hình dưới đây:


http://bluesofts.net/Products/AddIns/A-Tools/Help/Programming/reference.jpg

2. Tạo hàm mảng cùng đối tượng BSFormulaArray
a. Thế nào là một hàm mảng
Hàm mảng là hàm trả về một mảng giá trị, mảng có thể là 1 hoặc 2 chiều. Trong Excel có một hàm mảng tên là Table(), trong A-Tools là BS_SQL().
Ví dụ về một hàm mảng:
Function GetArr() As Variant
Dim Arr(2, 1)
Arr(0, 0) = "Q1": Arr(0, 1) = 1
Arr(1, 0) = "Q2": Arr(1, 1) = 2
Arr(2, 0) = "Q3": Arr(2, 1) = 3
GetArr = Arr
End Function

(trong lập trình VB, nếu không muốn xuống dòng ta gõ dấu “:” ngay ở đầu đoạn code.)
Trong bảng tính bạn đặt công thức: =GetArr() rồi ENTER theo cách làm thông thường thì kết quả chỉ trả về phần tử đầu tiên của mảng giá trị là “Q1”. Muốn nó trả về một mảng giá trị thì phải làm như sau:

Bôi đen/chọn vùng ô gồm 3 dòng và 2 cột (Vì mảng trên là gồm 3 dòng và 2 cột (mảng 2 chiều: dòng & cột, phần tử chạy từ 0), sau đó gõ hàm
=GetArr() rồi nhấn CTRL + SHIFT + ENTER kết quả sẽ trả về toàn bộ mảng như hình dưới đây:


http://bluesofts.net/Products/AddIns/A-Tools/Help/Programming/GetArr.jpg

Nếu vùng chọn mà số dòng hoặc số cột lớn hơn số phần tử của mảng kết quả thì các ô thừa đó sẽ có giá trị “#N/A”, nếu vùng chọn thiếu so với số phần tử của mảng thì thì kết quả thiếu giá trị. Vậy theo cách làm thông thường của Excel chúng ta phải chọn vùng đặt công thức với số dòng và cột phải đúng bằng số phần tử dòng và cột của mảng trả về. Đây là một sự cứng nhắc và người dùng khó mà tuân thủ đúng, vì mảng kết quả trả về của hàm với số phần tử sẽ thay đổi tùy thuộc vào hoàn cảnh nào đó, ví dụ hàm trả về danh sách nhân viên của một phòng, nếu phòng A thì danh sách là 10, phòng B thì danh sách là 5…

Add-in A-Tools cung cấp đối tượng BSFormulaArray để làm việc này một cách linh hoạt và dễ dàng. Chỉ cần đặt công thức, nhấn ENTER là kết quả trả về cả mảng đủ với số phần tử của mảng. Với đối tượng BSFormulaArray nhà phát triển có thể tạo ra bất kể hàm mảng nào một cách thuận tiện, có thể truy vấn dữ liệu từ nhiều loại CSDL như Excel, Access, Foxpro, MySQL, MS SQL Server,….

b. Các thành phần của đối tượng BSFormulaArray
Để tìm hiểu các thành phần của A-Tools, trong VBE nhấn F2 để mở cửa sổ quản lý đối tượng “Object Browser”. Khi cửa sổ hiện lên, góc đỉnh bên trái bạn chọn AddinATools trong combo box.

Các thành phần của đối tượng BSFormulaArray như hình dưới đây:


http://bluesofts.net/Products/AddIns/A-Tools/Help/Programming/BSFormulaArray.jpg

Giải thích các thành phần chính:
+ Begin()
Loại: Hàm, giá trị trả về là kiểu Boolean.
Ứng dụng: dùng để kiểm tra hàm của người dùng có phải trạng thái bắt đầu chạy hay không. Nếu kết quả là TRUE tức là bắt đầu và bạn hãy viết các đoạn code cho hàm và nạp thông tin về hàm cùng mảng kết qủa vào hàm Add(). Hàm này bắt buộc chạy lúc ban đầu.

+ Add()
Loại: Hàm, giá trị trả về là kiểu Variant chứa mảng kết quả.
Ứng dụng: dùng để nạp thông tin về hàm của bạn và kết quả cần trả về của hàm. Chạy sau hàm Begin().

+ Result
Loại: Thuộc tính, giá trị trả về là kiểu Variant chứa mảng kết quả mà hàm cần trả về bảng tính.
Ứng dụng: dùng để trả về hàm của gọi. Nó được dùng khi hàm Begin() = FALSE.

c. Cấu trúc hàm mảng
Là một hàm mảng, bạn bắt buộc làm theo cấu trúc dưới đây:
Function YourFunc() As Variant
Dim fa As New BSFormulaArray
Dim fi As New BSFormulaInfo
On Error GoTo lbEndFunc
If fa.Begin Then
Dim Result 'It is an array, SQL statement or Recordset
'Fill value to Result
‘Các đoạn code để tạo ra mảng kết quả của bạn
YourFunc = fa.Add(fi, Result)
Else
YourFunc = fa.Result
End If
lbEndFunc:
Set fi = Nothing
Set fa = Nothing
If Err <> 0 Then
'MsgBox Err.Description, vbCritical
End If
End Function


d. Các ví dụ tạo hàm mảng
Các ví dự dưới đây đều nằm trong file “BSFormulaArray.xls” tại đường dẫn “C:\A-Tools\HELP & DEMOS\A-Tools VBA Programming”. Để xem và chạy thử bạn hãy mở file này ra.
+ Hàm GetArray() - Ví dụ đơn giản hàm trả về mảng gồm 3 dòng và 2 cột.
Function GetArray() As Variant
Dim fa As New BSFormulaArray
Dim fi As New BSFormulaInfo
On Error GoTo lbEndFunc
If fa.Begin Then
Dim Arr(2, 1)
Arr(0, 0) = "Q1": Arr(0, 1) = 1
Arr(1, 0) = "Q2": Arr(1, 1) = 2
Arr(2, 0) = "Q3": Arr(2, 1) = 3
GetArray = fa.Add(fi, Arr)
Else
GetArray = fa.Result
End If
lbEndFunc:
Set fi = Nothing
Set fa = Nothing
If Err <> 0 Then
'MsgBox Err.Description, vbCritical
End If
End Function
Bây giờ bạn ra bảng tính, gõ
=GetArray() rồi ENTER bạn sẽ thấy tự Excel điền cho bạn một mảng gồm 3 dòng và 2 cột.

+ Ví dụ hàm GetRangeValue() – Trả về một mảng giá trị, mảng này lấy từ một vùng dữ liệu nơi khác
Function GetRangeValue() As Variant
Dim fa As New BSFormulaArray
Dim fi As New BSFormulaInfo
On Error GoTo lbEndFunc
If fa.Begin Then
GetRangeValue = fa.Add(fi, Range("data").Value)
Else
GetRangeValue = fa.Result
End If
lbEndFunc:
Set fi = Nothing
Set fa = Nothing
If Err <> 0 Then
'MsgBox Err.Description, vbCritical
End If
End Function

+ Ví dụ hàm DVLOOKUP() – Tìm kiếm và trả về mảng giá trị tìm được. Hàm VLOOKUP trong Excel chỉ trả về duy nhất 1 giá trị tìm được, việc tìm là tìm trên cột đầu tiên.
Hàm DVLOOKUP() tôi viết dưới đây có thể tìm giá trị “LookupValue” tại cột có vị trí “LookupColIndex” (ngầm định là 1) trong bảng “LookupTable”, nếu tìm được trả về các giá trị thỏa mãn tại cột có vị trí “ResultColIndex”,

Function DVLOOKUP(ByVal LookupValue As Variant, ByVal LookupTable As Range, ByVal ResultColIndex As Long, Optional ByVal LookupColIndex As Long = 1) As Variant
Dim fa As New BSFormulaArray
Dim fi As New BSFormulaInfo
Dim I As Long, LastRow As Long, ArrCount As Long
On Error GoTo lbEndFunc
ReDim Arr(0)
ArrCount = -1
If fa.Begin Then
'LastRow = LookupTable.Rows.Count
LastRow = LookupTable.Cells(LookupTable.Rows.Count + 1, LookupColIndex).End(xlUp).Row - LookupTable.Row + 1
For I = 1 To LastRow
If LookupTable.Cells(I, LookupColIndex) = LookupValue Then
ArrCount = ArrCount + 1
ReDim Preserve Arr(ArrCount)
Arr(ArrCount) = LookupTable.Cells(I, ResultColIndex)
End If
Next I
DVLOOKUP = fa.Add(fi, Arr)
Else
DVLOOKUP = fa.Result
End If
lbEndFunc:
Set fi = Nothing
Set fa = Nothing
If Err <> 0 Then
'MsgBox Err.Description, vbCritical
End If
End Function


Tại worksheet đặt công thức:
=DVLOOKUP(G9,A4:D100,1,2) rồi nhấn ENTER
Kết quả sẽ trả về mảng giá trị thỏa mãn tại ô G9
Xem ví dụ trong file BSFormulaArray.xls


http://bluesofts.net/Products/AddIns/A-Tools/Help/Programming/DVLOOKUP.jpg

Bài viết tiếp theo tôi sẽ đưa ra cách khai thác dữ liệu bằng SQL, dữ liệu lấy từ các nguồn CSDL cũng như lấy từ máy chủ...

DOWNLOAD tài liệu (http://www.bluesofts.net/Products/AddIns/A-Tools/Help/atools_Programming.rar)

Nguyễn Duy Tuân
16-12-11, 03:04 AM
e. Cấu trúc hàm BSFormulaArray.Add() và đối tượng BSFormulaInfo

Function Add(AFormulaInfo As BSFormulaInfo, Aresult As Variant) As Variant

Hàm Add() được dùng để nạp thông tin hàm cho A-Tools, hàm trả về giá trị kiểu Variant cho hàm người dùng. Hàm gồm hai đối số.
AformulaInfo nhận kiểu BSFormulaInfo để lưu các thông tin cũng như tùy chọn cho hàm.
Aresult nhận kiểu Variant có thể là:
+ Mảng kết quả mà hàm cần trả về bảng tính
+ Chuỗi lệnh truy vấn CSDL SQL, ví dụ “SELECT * FROM DATA”
+ Recordset – Đối tượng trong ADODB chứa bảng truy vấn bởi lệnh SQL.

BSFormulaInfo chứa các thuộc tính như bảng dưới đây:

http://bluesofts.net/Products/AddIns/A-Tools/Help/Programming/BSFormulaInfo.jpg

Mô tả các thuộc tính:
+ DBKEY
Loại: Thuộc tính, kiểu chuỗi
Ứng dụng: Nhận mã DBKEY để kết nối với CSDL bên ngoài. DBKEY được tạo trong menu A-Tools->DBKEY-Kết nối CSDL bên ngoài. Chỉ phải dùng thuộc tính này nếu tham số Aresult trong hàm Add là câu lệnh SQL và truy vấn tới CSDL bên ngoài. Nếu không khai báo DBKEY A-Tools sẽ lấy dữ liệu tại tệp Excel đang mở.

+ HeaderRow
Loại: Thuộc tính, kiểu Boolean
Ứng dụng: dùng nếu Aresult trong hàm Add là câu lệnh SQL hoặc Recordset. Nếu là TRUE (ngầm định) thì bảng kết quả có dòng tiêu đề, nếu FALSE thì bảng kết quả không có.

+ NAME
Loại: Thuộc tính, kiểu chuỗi
Ứng dụng: Cho phép đặt tên vùng kết quả theo tên được khai báo. Bình thường trong Excel ta phải làm: chọn (bôi đen) vùng, nhấn CTRL+F3 và tạo tên.

+ AUTONAMES
Loại: Thuộc tính, kiểu chuỗi nhận hàm AutoNames() để đặt tên tự động.
Ứng dụng: Được dùng nếu Aresult trong hàm Add là câu lệnh SQL hoặc Recordset. Nếu là “AutoNames()” thì tất cả các cột dữ liệu trong bảng kết quả sẽ được đặt tên theo tên của trường dữ liệu. Nếu là “AutoNames(TEN_BANG)” thì bảng kết quả được đặt tên (define name) là TEN_BANG, bạn thay “TEN_BANG” bằng một cái tên hợp lệ bất kỳ. Nếu là “AutoNames(TEN_BANG, PREFIX_)” thì bảng kết quả được đặt tên là “TEN_BANG”, các cột trong bảng đều được đặt tên với tiếp đầu ngữ là “PREFIX_”. Việc đặt tên rất hữu ích khi vùng dữ liệu được đặt tên lại được dùng trong một công thức khác.

+ Insert
Loại: Thuộc tính, kiểu Boolean
Ứng dụng: Nếu là TRUE, mảng kết quả của hàm trả về bảng tính với phương thức chèn dữ liệu, các dữ liệu đứng sau sẽ được đẩy xuống dưới. Nếu là FALSE (ngầm định), mảng kết quả sẽ được ghi đè.

+ SERVERSOURCE
Loại: Thuộc tính, kiểu Boolean
Ứng dụng: dùng nếu Aresult trong hàm Add là câu lệnh SQL. Nếu là TRUE thì dữ liệu trong bảng kết quả được truy vấn dữ liệu từ máy chủ. Nếu FALSE (ngầm định) thì dữ liệu trong bảng kết quả được truy vấn dữ liệu từ máy đang làm việc.

+ OptionStr
Loại: Thuộc tính, kiểu chuỗi
Ứng dụng: Cho phép gán giá trị cho các thành phần của BSFormulaInfo trong chuỗi, các cặp gán cách nhau bới dấu “;”. Ví dụ “DBKEY=MDB; INSERT=YES”
Tương đương với việc gán

fi.DBKEY = ”MDB”
fi.Insert = True

Các thành phần còn lại các bạn hãy đọc tài liệu. Tài liệu hướng dẫn lập trình BLUESOFTS đang soạn thảo thời gian tới sẽ upload lên website www.bluesofts.net

+ Ví dụ hàm GetXlSQL() – Truy vấn dữ liệu trong tệp Excel đang mở bằng câu lệnh SQL.

Function GetXlSQL(ByVal SQL As String) As Variant
Dim fa As New BSFormulaArray
Dim fi As New BSFormulaInfo
On Error GoTo lbEndFunc
If fa.Begin Then
GetXlSQL = fa.Add(fi, SQL)
Else
GetXlSQL = fa.Result
End If
lbEndFunc:
Set fi = Nothing
Set fa = Nothing
If Err <> 0 Then
'MsgBox Err.Description, vbCritical
End If
End Function

Bây giờ bạn có thể lấy toàn bộ dữ liệu trong vùng data tại trong tệp Excel đang mở bằng công thức:

=GetXlSQL("select * from data")

+ Ví dụ hàm GetBySQL() – Kết quả trả về bởi câu lệnh truy vấn vào CSDL Access “Examble.mdb” được kết nói tới DBKEY có tên MDB.

Function GetBySQL(ByVal SQL As String) As Variant
Dim fa As New BSFormulaArray
Dim fi As New BSFormulaInfo
On Error GoTo lbEndFunc
If fa.Begin Then
fi.DBKEY = "MDB"
fi.HeaderRow = True
'the same ==> fi.OptionStr = "DBKEY=MDB;HR=YES"
GetBySQL = fa.Add(fi, SQL)
Else
GetBySQL = fa.Result
End If
lbEndFunc:
Set fi = Nothing
Set fa = Nothing
If Err <> 0 Then
'MsgBox Err.Description, vbCritical
End If
End Function

Bây giờ bạn lập công thức:

=GetBySQL("select * from nkc") rồi ENTER

Kết quả là toàn bộ dữ liệu trong bảng NKC trong CSDL Access “Examble.mdb”.


http://bluesofts.net/Products/AddIns/A-Tools/Pics/BS_SQL_Demo.gif


Bạn hãy mở file BSFormulaArray.xls để chạy thử các hàm trong topic này!

Nguyễn Duy Tuân
20-12-11, 10:20 AM
+ Ví dụ hàm GetByRecordset() – Kết quả trả lấy từ đối tượng ADODB.Recordset với câu lệnh SQL. Đối số Aresult của hàm Add là đối tượng Recordset.

Function GetByRecordset(ByVal SQL As String) As Variant
Dim fa As New BSFormulaArray
Dim fi As New BSFormulaInfo
On Error GoTo lbEndFunc
If fa.Begin Then
Set cnn = GetConnDB(ActiveWorkbook.FullName)
Set Rs = GetRS(SQL, cnn)
fi.HeaderRow = True '<=> fi.OptionStr = "HR=YES"
GetByRecordset = fa.Add(fi, Rs)
Else
GetByRecordset = fa.Result
End If
lbEndFunc:
Set fi = Nothing
Set fa = Nothing
If Err <> 0 Then
'MsgBox Err.Description, vbCritical
End If
End Function

Hàm GetConnDB() và GetRS() được khai báo trong file BSFormulaArray.xls

Ứng dụng trên bảng tính. Đặt công thức
=GetByRecordset("select * from data")

+ Ví dụ hàm GetSQL() – Kết quả trả lấy từ câu lệnh SQL, với chuỗi tham số tùy chọn. Đối số Aresult của hàm Add là chuỗi khai báo SQL. Hàm GetSQL() tương tự hàm BS_SQL() của Add-in A-Tools.

Function GetSQL(ByVal SQL As String, Optional ByVal OPTIONS As String = vbNullString) As Variant
'Function GetSQL() is the same BS_SQL() in A-Tools
Dim fa As New BSFormulaArray
Dim fi As New BSFormulaInfo
On Error GoTo lbEndFunc
If fa.Begin Then
fi.OptionStr = OPTIONS
GetSQL = fa.Add(fi, SQL)
Else
GetSQL = fa.Result
End If
lbEndFunc:
Set fi = Nothing
Set fa = Nothing
If Err <> 0 Then
'MsgBox Err.Description, vbCritical
End If
End Function

Nguyễn Duy Tuân
03-01-12, 11:38 AM
f. Lập trình sự kiện với hàm mảng
Phương pháp dùng Class Module
Bước 1: tạo Class Module. Trong VBE, vào menu Insert chọn Class Module. Đặt tên là clsFMLArray


http://www.bluesofts.net/Products/AddIns/A-Tools/Help/Programming/clsFMLArray.jpg

Bước 2: Soạn thảo các mã lệnh khởi hoạt, giải phòng bộ nhớ và các thủ tục sự kiện trong clsFMLArray

Public WithEvents fa As BSFormulaArray

Private Sub Class_Initialize()
Set fa = New BSFormulaArray
End Sub
'-----------------------------------------------------------
Private Sub Class_Terminate()
Set fa = Nothing
End Sub
'-----------------------------------------------------------
Private Sub fa_OnBeforeUpdate(ByVal OldRange As Object, _
ByVal NewRange As Object, _
Result As Variant, _
ByVal AFormulaInfo As AddinATools.IBSFormulaInfo)
If AFormulaInfo.ID <> 100 Then Exit Sub
'Run for function GetBySqlWithEvents() only!
MsgBox "OldRange: " & OldRange.Address & Chr(13) & "NewRange: " & NewRange.Address & Chr(13) & "Replace CODE=""A"" with ""AAAAA"" in event ""OnGetValue""", vbInformation, "Event: OnBeforeUpdate"
Result(0, 0) = "www.atoolspro.com"
End Sub
'-----------------------------------------------------------
Private Sub fa_OnAfterUpdate(ByVal NewRange As Object, _
ByVal AFormulaInfo As AddinATools.IBSFormulaInfo)
If AFormulaInfo.ID <> 100 Then Exit Sub
'Run for function GetBySqlWithEvents() only!
MsgBox "NewRange: " & NewRange.Address, vbInformation, "Event: OnAfterUpdate"
End Sub
'-----------------------------------------------------------
Private Sub fa_OnGetValue(ByVal Row As Long, _
ByVal Column As Long, _
Value As Variant, _
ByVal AFormulaInfo As AddinATools.IBSFormulaInfo)
If AFormulaInfo.ID <> 100 Then Exit Sub
'Run for function GetBySqlWithEvents() only!
If Column = 1 And Row > 0 Then
If Value = "A" Then
Value = "AAAAA"
End If
End If
End Sub

Bước 3: Khởi tạo biến kiểu clsFMLArray và tạo hàm để chạy các sự kiện trên.
+ Ví dụ hàm GetBySqlWithEvents. Trong Module khai báo như sau:

Dim faEvent As New clsFMLArray

Function GetBySqlWithEvents(ByVal SQL As String) As Variant
Dim fi As New BSFormulaInfo
On Error GoTo lbEndFunc
If faEvent.fa.Begin Then
If Not faEvent Is Nothing Then Set faEvent = Nothing
Set faEvent = New clsFMLArray
Set cnn = GetConnDB(ActiveWorkbook.FullName)
Set Rs = GetRS(SQL, cnn)
fi.ID = 100
GetBySqlWithEvents = faEvent.fa.Add(fi, Rs)
Else
GetBySqlWithEvents = faEvent.fa.Result
End If
lbEndFunc:
Set fi = Nothing
If Err <> 0 Then
'MsgBox Err.Description, vbCritical
End If
End Function

Khác với các hàm ở ví dụ trước ta dùng biến fa As BSFormulaArray, hàm ta dùng biến faEvent As clsFMLArray

Nếu không muốn dùng Class Module thì ta có thể khai báo tên các thủ tục sự kiện vào trong các thuộc tính của BSFormulaInfo như sau:

+ Ví dụ hàm GetBySqlWithEvents2

Function GetBySqlWithEvents2(ByVal SQL As String) As Variant
Dim fi As New BSFormulaInfo
On Error GoTo lbEndFunc
If faEvent.fa.Begin Then
If Not faEvent Is Nothing Then Set faEvent = Nothing
Set faEvent = New clsFMLArray
Set cnn = GetConnDB(ActiveWorkbook.FullName)
Set Rs = GetRS(SQL, cnn)
fi.ID = 100
fi.OnGetValue = "GetValueForSpeedup"
'GetValueForSpeedup is faster then event "OnGetValue" in class
fi.OnBeforeUpdate = "DoBeforeUpdate"
fi.OnAfterUpdate = "DoAfterUpdate"
'If assign fi.OnGetValue = "GetValueForSpeedup" then event "OnGetValue" in class do not run.
GetBySqlWithEvents2 = faEvent.fa.Add(fi, Rs)
Else
GetBySqlWithEvents2 = faEvent.fa.Result
End If
lbEndFunc:
Set fi = Nothing
If Err <> 0 Then
'MsgBox Err.Description, vbCritical
End If
End Function
'-----------------------------------------------------------
Function GetValueForSpeedup(ByVal DataArray, ByVal Row As Long, ByVal Column As Long, ByVal Value As Variant)
'DataArray: two-dimensional array, lowest element at index 0
'Gia tri tai dong 2 cot 3 = DataArray(1,2) , tren bang tinh thi la gia tri cua dong 2 cot 3
If Column = 1 And Row > 0 Then
If Value = "A" Then
GetValueForSpeedup = "AAAAA"
End If
End If
End Function
'-----------------------------------------------------------
Sub DoBeforeUpdate(ByVal OldDataTable As Range, ByVal NewDataTable As Range, ByVal DataArray)
MsgBox "DoBeforeUpdate"
End Sub
'-----------------------------------------------------------
Sub DoAfterUpdate(ByVal DataTable As Range)
MsgBox "DoAfterUpdate"
End Sub

Câu lệnh SQL trong A-Tools được thừa kế từ ngôn ngữ chuẩn T-SQL và được phát triển thêm các hàm khai báo cùng chuỗi SQL để làm được những báo cáo phức tạp. Để khai thác được cách dùng SQL trong A-Tools, người dùng nên đọc LẦN LƯỢT các file trong thư mục cài đặt A-Tools.

Bai 1 - Huong dan su dung ham BS_SQL
Bai 2 - Cac ham ho tro nhom ham Database Functions.xls
Bai 3 Hàm CSDL (Database Functions).xls
Bai 4 - Huong dan tao bao cao.xls

Nguyễn Duy Tuân
03-02-12, 01:30 PM
Gửi các bạn tài liệu (ebook) và các file ví dụ lập trình VBA cùng A-Tools.

DOWNLOAD tài liệu (http://www.bluesofts.net/Products/AddIns/A-Tools/Help/atools_Programming.rar)