Bài viết: Khai báo sử dụng các thành phần đối tượng của Excel

Liên hệ QC

Nguyễn Duy Tuân

Nghị Hách
Thành viên danh dự
Tham gia
13/6/06
Bài viết
4,649
Được thích
10,138
Giới tính
Nam
Nghề nghiệp
Giáo viên, CEO tại Bluesofts
Môi trường lập trình VBA trong Excel cho phép chúng ta sử dụng 2 thành phần đối tượng:
- Excel
- VB

Khi muốn dùng các thành phần đối tượng (các đối tượng, các thủ tục, hàm,...) của Excel ta khai báo
Application.

Ví dụ
Mã:
Dim fn as WorksheetFunction
Set fn = Application.WorksheetFunction
x = fn.HamExcel(DoiSo)

Các DoiSo dùng trong HamExcel tương như khi ta dùng lập công thức trên Sheet, riêng đối tượng là một tham chiếu thì trong VBA phải là Range

Trên sheet ta có công thức:
Mã:
= Vlookup("KH001",DMKH,2,0)

Trong VBA phải là
Mã:
x = fn.Vlookup("KH001",Application.Range("DMKH"),2,0)

Hoặc
Mã:
x = fn.Vlookup("KH001",Range("DMKH"),2,0)

Cú pháp chuẩn khi muốn khai thác thành phần của Excel đối tượng đầu tiên (mẹ) là Application, tuy nhiên trong Excel biến này được đặt dạng GLOBAL nên không cần phải khai báo. Tất cả các ứng dụng trong Office đều như vậy.

'Trong VBA chính là
Mã:
Dim oApp as Object
Dim fn as Object
Set oApp = Application
Set fn = oApp.WorksheetFunction
x = fn.Vlookup("KH001",oApp.Range("DMKH"),2,0)

Thành phần thứ 2 chúng ta có thể khai thác là VB. VB cung cấp các đối tượng, các hàm và thủ tục.
Để nhận các đối tượng, các hàm, các thủ tục ta chỉ cần khai báo VBA.
Thường thì ta không khai báo đối tượng này vì Excel đã nhận nó là một biến GLOBAL.

Ví dụ format màu nền của ô (Cell) hiện thời

Mã:
Sub Test1()
Application.ActiveCell.Interior.Color = VBA.ColorConstants.vbBlue
End Sub

Sub Test2()
ActiveCell.Interior.Color = vbBlue
End Sub

KhaibaoSDDT.JPG


Test1 và Test2 đều cho kết quả như nhau, chỉ khác là Test2 không cần phải khai báo đối tượng kiểu GLOBAL sẽ ngắn gọn hơn.

Khi bạn soạn thảo thì lưu ý cách làm nhanh. Cứ sau dấu chấm (.) bạn sẽ có một danh sách để chọn rồi. Nếu không hiện danh sách thì nhấn CTRL+Space bar.

Để tìm hiểu cách sử dụng các thành phần trong VB. Trong môi trường VBE, nhấn F1 để nhận help.

Mặc dù ta hiểu trong VBA ta có thể nhận các hàm của Excel theo cách làm trên nhưng không phải hàm nào cũng có, ví dụ như hàm MOD không có trong VBA.

Hàm MOD cho ta phần lẻ của phép chia

Mã:
=MOD(2,7) kết quả là 2 (2 chia cho 7 thì sẽ dư 2)
=IF(MOD(YEAR(TODAY()),4)=0,"Năm nhuận","Không nhuận")

Với hàm MOD trong VBA ta phải tự viết thôi. Gửi các bạn hàm tôi viết đơn giản.

Mã:
Function VBA_MOD(ByVal Tuso, ByVal Mauso)
    x = Tuso / Mauso
    VBA_MOD = (x - Int(x)) * Mauso
End Function
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Help của Excel:

The MOD function can be expressed in terms of the INT function:
MOD(n, d) = n - d*INT(n/d)

nên VBA_MOD có thể viết lại như sau

Function VBA_MOD(ByVal Tuso, ByVal Mauso)
'''' x = Tuso / Mauso
VBA_MOD = Tuso - Int(Tuso / Mauso) * Mauso
End Function

Lại do trong VBA, phép \ là chia nguyên nên thay Int(Tuso / Mauso) bằng (Tuso \ Mauso)Vây, có thể viết lại hàm là
Function VBA_MOD(ByVal Tuso, ByVal Mauso)
VBA_MOD = Tuso - (Tuso \ Mauso) * Mauso
End Function




 
Web KT
Back
Top Bottom