44
Đại Hc Sư Phm Tp. HChí Minh Đại Hc Sư Phm Tp. HChí Minh Chuyên đề VBA Chuyên đề VBA Visual Basic for Application Thông tin ging viên LƯƠNG TRẦN HY HIẾN LƯƠNG TRẦN HY HIẾN Bộ môn Tin Học Khoa Toán – Tin học Phone: 0989 366 990 0989 366 990 Chuyên đề VBA – HIENLTH 2 Email: [email protected] Website: http://fit.hcmup.edu.vn/~hienlth/VBA http://fit.hcmup.edu.vn/~hienlth/VBA Thông tin môn hc Chuyên đề VBA Số đvht: 4 (60t = 30LT + 30TH) Môi trường làm việc: Bộ MS Office 2003 (2007) Chuyên đề VBA – HIENLTH 3 VBA for WORD VBA for EXCEL VBA for PowerPoint VBA for Access VBA for Outlook Mc tiêu • Nhằm cung cấp cho sinh viên các kiến thức liên quan đến lập trình Visual Basic trong bộ MS Office. • Cung cấp các kiến thức về ngôn ngữ VBA. Viết các Macro từ đơn giản đến phức tạp. Chuyên đề VBA – HIENLTH 4 Viết các Macro từ đơn giản đến phức tạp.

0_VBA_4Slides

Embed Size (px)

Citation preview

Page 1: 0_VBA_4Slides

Đại Học Sư Phạm Tp. Hồ Chí MinhĐại Học Sư Phạm Tp. Hồ Chí Minh

Chuyên đề VBA Chuyên đề VBA

Visual Basic for Application

Thông tin giảng viên

•• LƯƠNG TRẦN HY HIẾNLƯƠNG TRẦN HY HIẾN• Bộ môn Tin Học• Khoa Toán – Tin học• Phone: 0989 366 9900989 366 990

Chuyên đề VBA – HIENLTH 22

• Phone: 0989 366 9900989 366 990• Email: [email protected]• Website:http://fit.hcmup.edu.vn/~hienlth/VBAhttp://fit.hcmup.edu.vn/~hienlth/VBA

Thông tin môn học

• Chuyên đề VBA• Số đvht: 4 (60t = 30LT + 30TH)• Môi trường làm việc:

– Bộ MS Office 2003 (2007)

Chuyên đề VBA – HIENLTH 33

– Bộ MS Office 2003 (2007) • VBA for WORD• VBA for EXCEL• VBA for PowerPoint• VBA for Access• VBA for Outlook

Mục tiêu

• Nhằm cung cấp cho sinh viên các kiến thức liên quan đến lập trình Visual Basic trong bộ MS Office.

• Cung cấp các kiến thức về ngôn ngữ VBA.• Viết các Macro từ đơn giản đến phức tạp.

Chuyên đề VBA – HIENLTH 44

• Viết các Macro từ đơn giản đến phức tạp.

Page 2: 0_VBA_4Slides

Đề cương môn học: VBAVBA

• Chương 1: Giới thiệu tổng quan VBA• Chương 2: VBA for Word• Chương 3: VBA for Excel• Chương 4: VBA for Access • Chương 5: VBA for Outlook

Chuyên đề VBA – HIENLTH 55

• Chương 5: VBA for Outlook• Chương 6: Bài tập

Đánh giá kết quả học tập

• Làm bài tập: Thang điểm 10• Bài tập không nộp đúng hạn, bài làm giống

nhau 0 điểm.• Nhóm sinh viên(3-5 SV) chọn số đề tài sao

cho tổng điểm là 10, một bài không quá 4

Chuyên đề VBA – HIENLTH 66

cho tổng điểm là 10, một bài không quá 4nhóm chọn.

• Nộp qua email: [email protected] trướcngày 55//99//20102010.

• Tiêu đề thư: VBA_DongNai_STTNhom

Tài li ệu tham khảo

• Slide bài giảng của giảng viên• Ebook cung cấp:

–– Absolute.Beginners.Guide.to.VBAAbsolute.Beginners.Guide.to.VBA.chm–– Excel VBA Macro ProgrammingExcel VBA Macro Programming.chm

Chuyên đề VBA – HIENLTH 77

–– Writing Excel Macros With VBA 2nd EdWriting Excel Macros With VBA 2nd Ed.pdf–– Access VBA ProgrammingAccess VBA Programming.chm

• Tham khảo tài liệu trên Internet• Các ví dụ mẫu

Tài li ệu tham khảo - URL

• http://www.caulacbovb.com/• http://www.vbaexpress.com/• http://www.excel-vba.com/• http://word.mvps.org• http://homepage.swissonline.ch/cindymeister

Chuyên đề VBA – HIENLTH 88

• http://homepage.swissonline.ch/cindymeister• http://www.excelguru.ca/sitemenu• http://www.fontstuff.com/• http://www.andreavb.com/forum/viewboard_10.ht

ml

Page 3: 0_VBA_4Slides

Câu hỏi và thảo luận

Chuyên đề VBA – HIENLTH 99

Đại Học Sư Phạm Tp. Hồ Chí MinhĐại Học Sư Phạm Tp. Hồ Chí Minh

Chuyên đề VBA Chuyên đề VBA

Giới thi ệu tổng quan

Chương 1: Giới thi ệu tổng quan

• Là bộ phần mềm lập trình dành riêngcho MS Office và tích hợp sẵn trong MSOffice.

• Với VBA, các thao tác thực hiện mộtcách tự động theo ý muốn người sử

Chuyên đề VBA – HIENLTH 1111

cách tự động theo ý muốn người sửdụng.

• Các cú pháp tương đương Visual Basic6.0 + Thêm 1 số cái khác

• Không phân biệt hoa/thường

Để VBA (Macro) hoạt động

• WORD, EXCEL, PowerPoint, Outlook, Access 2003: Tool/Macro/Security

Chuyên đề VBA – HIENLTH 1212

Page 4: 0_VBA_4Slides

Để VBA (Macro) hoạt động

• Security Level: Chọn Medium hay Low.

•Medium : Hỏi

•Low : Luôn chạy

Chuyên đề VBA – HIENLTH 1313

Để VBA (Macro) hoạt động

• WORD, EXCEL, PowerPoint, Outlook, Access 2007: Show Developer tab in Ribbon

Chuyên đề VBA – HIENLTH 1414

Sử dụng VBA

• Mở cửa sổ soạn thảo: Alt + F11

Chuyên đề VBA – HIENLTH 1515

Sử dụng Macro –Thu Macro tự động

• Tools / Macro / Record New Macro

Chuyên đề VBA – HIENLTH 1616

Page 5: 0_VBA_4Slides

Sử dụng Macro –Thu Macro tự động

• Đặt tên Macro

Phạm vi áp d ụng:• Tất cả file Word

Gán phím t ắt cho Macro

Chuyên đề VBA – HIENLTH 1717

• Tất cả file Word• File hi ện tại

Sử dụng VBA

• Alt + F8: Tạo/Chạy/Sửa/Xóa Macro

Chuyên đề VBA – HIENLTH 1818

Sử dụng Macro – Thực thi

• Alt + F8• Chọn Macro� Run

Chuyên đề VBA – HIENLTH 1919

Sử dụng Macro – Thực thi

• Alt + F8• Chọn Macro� Edit

Chuyên đề VBA – HIENLTH 2020

Page 6: 0_VBA_4Slides

Demo 01 VBA Example

Sub loichao()MsgBox "Chao mung cac ban den voi

chuyen de VBA", vbInformation, "Thong bao"

End Sub

Chuyên đề VBA – HIENLTH 2121

End Sub

F5: để chạy

Hiển thị câu thông báoMsgBox “Chuỗi thông báo”, biểu tượng + nút nhấn,

“Tiêu đề”Biểu tượng:• vbCritical• vbInformation• vbQuestion• vbExclamation

Chuyên đề VBA – HIENLTH 2222

• vbExclamationCác loại nút nhấn:• vbYesNo• vbYesNoCancel• vbOKCancel• vbOKOnly• vbRetryCancel

Các loại biểu tượng

Chuyên đề VBA – HIENLTH 2323

Các loại nút nhấn

Chuyên đề VBA – HIENLTH 2424

Page 7: 0_VBA_4Slides

Nhập liệu

• InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile][, context])

• Hiển thị hộp thoại nhập liệu, giao tiếp với người dùng• Tham số:

– prompt: Giá trị mà bạn muốn hiển thị trong InputBox– Title: Tiêu đề của InputBox– Default: Giá trị mặc định khi InputBox xuất hiện

Chuyên đề VBA – HIENLTH 2525

– Default: Giá trị mặc định khi InputBox xuất hiện– xpos, ypos: Vị trí xuất hiện của InputBox– Helpfile: Đường dẫn file help– Context: Ngữ cảnh của file help

• VD:bien = InputBox("Nhap vao ngay sinh cua ban", "nhap lieu", "01/01/1981", 0, 0)

Các kiểu dữ liệu VBA

• Boolean: mang giá trị True/False• Byte: Số nguyên nhỏ [0 – 255]• Currency: Giá trị tiền tệ• Date: Dùng để biểu diễn ngày, giờ

Chuyên đề VBA – HIENLTH 2626

• Date: Dùng để biểu diễn ngày, giờ• Double: Số thực dấu chấm động• Integer: Số nguyên có dấu• Long: Số nguyên lớn có dấu• Object: Chứa tham chiếu đến đối tượng

Các kiểu dữ liệu VBA• Single: Số thực dấu chấm động• String: Chuỗi• Variant: Ký tự• Kiểu người dùng:

– Khai báo:

Chuyên đề VBA – HIENLTH 2727

– Khai báo:Type KhachHang

HoTen As StringMaKH As LongNgayGiaNhap As Date

End Type

Khai báo biến, hằng

Khai báo biến:• Public/Dim/Private <tên biến> [as

<kiểu>]• Ví dụ:

Chuyên đề VBA – HIENLTH 2828

– Dim x as Integer

– Dim y– Public d as Date

• Nên khai báo đầy đủ kiểu để giảm số lỗi.

Page 8: 0_VBA_4Slides

Khai báo biến, hằng

• Quy tắc đặt tên biến:– Bắt đầu với ký tự chữ– Không vượt quá 255 ký tự– Không trùng từ khóa VBA– Không chứa khoảng trắng, ., !, #, $, %, &,

Chuyên đề VBA – HIENLTH 2929

– Không chứa khoảng trắng, ., !, #, $, %, &, @

Khai báo tường minh trong VBA

Option Explicit• Chương trình sẽ tự kiểm tra và nhắc khai báo

biến tường minh (khai báo trong phần General)

Chuyên đề VBA – HIENLTH 3030

Require Variable Declaration

• Có thể khai báo

tự động trong mục:

Menu Tools - Option

Phạm vi sử dụng của biến

• Khai báo biến ở General– Sử dụng ở bất kỳ đoạn

lệnh nào trong form.– Chỉ mất khi ứng dụng

được giải phóng.

• Khai báo biến trong phần

Teân kieåu Ghi chuù

Byte Soá nguyeân 0-255

Integer Soá nguyeân

Long Soá nguyeân daøi

Single Soá thöïc

Chuyên đề VBA – HIENLTH 3131

• Khai báo biến trong phầnviết lệnh xử lý sự kiện chođối tượng.– Chỉ có phạm vi giữa hai

dòng Sub và End Sub

Double Soá thöïc

Boolean -1/0 - True/False

Date Ngaøy

String Chuoãi

Khai báo biến, hằng

Khai báo hằng:• CONST <tên hằng> [as <kiểu>] = trị• Ví dụ:

– Const x = 5

Chuyên đề VBA – HIENLTH 3232

– Const x = 5– Const y = 1

Page 9: 0_VBA_4Slides

Các hàm chuyển đổi ki ểu…

• Trong lập trình, cần chuyển đổi qua lại giữa các kiểu dữ liệu.

• Các hàm chuyển đổi kiểu là một phần không thể thiếu của các ngôn ngữ lập trình.

Chuyên đề VBA – HIENLTH 3333

trình.• VBA cung cấp các hàm chuyển đổi kiểu

khá tiện.

CBool Chuyển 0 thành false, các trị khác thành true

CByteChuyển đổi tên_biến thành kiểu Byte. tên_biến có thể chứa dữ liệu số bất kỳ haydữ liệu chuỗi có thể chuyển đổi thành số, trong khoảng 0 đến 255. Nếu tên_biếnngoài khoảng đó, VBA báo lổi Overflow. Nếu tên_biến là dấu chấm động, nó đượclàm tròn thành số nguyên gần nhất tr ước khi chuyển đổi ki ểu.

CDecChuyển đổi tên_biến thành kiểu phụ Decimal. Hàm này chấp nhận dữ liệu số haychuỗi có thể chuyển thành số, trong giới hạn của kiểu Decimal. Đây là hàm cung cấpphương thức duy nhất để tạo kiểu phụ Decimal.

Chuyển đổi tên_biến thành kiểu Date. CDate chấp nhận số và chuỗi biểu diễn ngày

Chuyên đề VBA – HIENLTH 3434

CDateChuyển đổi tên_biến thành kiểu Date. CDate chấp nhận số và chuỗi biểu diễn ngàyvà chuyển đổi thành dạng được mô tả bởi thông tin địa phương trên máy tính. Thí dụmáy tính được cài đặt dạng ngày của Mỹ mm/dd/yy, nếu ta nhập ngày dạng Anhdd/mm/yy và dùng hàm Cdate thì ngày được sẽ chuyễn đổi sang dạng Mỹ.

CCurChuyển đổi tên_biến thành kiểu Currency. CCur chấp nhận dữ liệu số hay chuỗi bấtkỳ biểu diễn giá trị tiền tệ. Hàm này nhận dạng thập phân hay dấu phân cách hàngngàn theo thông tin địa phương của máy tính. Chỉ dùng cho VBA.

CDblChuyển đổi tên_biến thành kiểu double. Chấp nhận dữ liệu số bất kỳ nằm trong giớihạn của kiểu Double hoặc bất kỳ dữ liệu chuỗi có thể chuyển đổi thành số trong giớihạn của kiểu Double.

CDbl

Chuyển đổi tên_biến thành kiểu double. Chấp nhận dữ liệu số bất kỳ nằm trong giới hạn của kiểu Double hoặc bất kỳ dữ liệu chuỗi có thể chuyển đổi thành số trong giới hạn của kiểu Double.

CInt Chuyển đổi tên_biến thành kiểu Integer.

CLng Chuyển đổi tên_biến thành kiểu Long.

CSng Chuyển đổi tên_biến thành kiểu Single.

Chuyên đề VBA – HIENLTH 3535

CSng Chuyển đổi tên_biến thành kiểu Single.

CStrChuyển đổi tên_biến thành kiểu String. CStr chấp nhận kiểu dữ liệu bất kỳ.

CVarChuyển đổi tên_biến thành kiểu Variant. CVar chấpnhận kiểu dữ liệu bất kỳ.

Hàm chuyển đổi chuỗi thành số…:Val

• Val là một hàm chuyển đổi kiểu “dễ dãi”.

• Val(chuoi) �dạng số đầu tiên tìm thấy trong chuỗi

Chuyên đề VBA – HIENLTH 3636

• Val(“30something”) � 30CInt(“30something”) �lỗi

Page 10: 0_VBA_4Slides

Các toán tử

• Toán tử đại số:+ - * / ^ Mod

• Toán tử cộng chuỗi: &• Toán tử so sánh:

Chuyên đề VBA – HIENLTH 3737

• Toán tử so sánh:= > < >= <= <>

• Toán tử logic:And Or Xor Not

KHAI BÁO TH Ủ TỤC/HÀM

Khai baùo thủ tục:

[Public][Private]SUB < Tên thủ tục >( [TS1 As <Kieåu >, TS2 As <Kiểu>])Thân hàm

END SUB

Chuyên đề VBA – HIENLTH 3838

Ví duï:

Sub HoanVi(a as Integer, b as Integer)Dim c as Integerc = aa = bb = c

End Sub

KHAI BÁO TH Ủ TỤC/HÀM

Khai baùo hàm:

[Public][Private]Function < Tên hàm >( [TS1 As <Kieåu >, TS2 As <Kiểu>]) as <Kiểu>

Thân hàm< Tên hàm > = Kết quả trả về

End Function

Chuyên đề VBA – HIENLTH 3939

Ví duï:Function TinhTrungBinh(a as single, b as single) as single

Dim kq as singlekq = (a+b)/2TinhTrungBinh = kq

End Function

Các hàm toán học của VBA

Abs(num) Giá trị tuyệt đối của num

Atn(num) Arctangent của num

Cos(num) Cosi của num

Int(num) Phần nguyên của num

Exp(num) enum

Log(num) Lg(num)

Chuyên đề VBA – HIENLTH 4040

Log(num) Lg(num)

Rnd(num) Số ngẫu nhiên trong 0 < x < 1

Sgn(num) Dấu của num

Sin(num) Sin của nu

Sqr(num) Bình phương của num

Tan(num) Tangent của num

Page 11: 0_VBA_4Slides

Các hàm chuỗi của VBA

Asc(str) Lấy mã ASCII của str

Chr(numchar) Lấy ký tự (dạng Variant) ứng với mã ASCII là nmchar

Chr$(numchar) Lấy ký tự (dạng String) ứng với mã ASCII là nmchar

CStr(exp) Chuyển biểu thức sang dạng chuỗi

InStr(start, s1, s2) Lấy vị trí kí tự đầu tiên của s2 trong s1 bắt đầu ở start

Chuyên đề VBA – HIENLTH 4141

InStr(start, s1, s2) Lấy vị trí kí tự đầu tiên của s2 trong s1 bắt đầu ở start

LCase(str) Chuyển sang chữ thường, dạng variant

LCase$(str) Chuyển sang chữ thường, dạng string

Left(str, len) Lấy len kí tự tính từ bên trái, dạng variant

Left$(str, len) Lấy len kí tự tính từ bên trái, dạng string

Các hàm chuỗi của VBA

Len(str) Số lượng ký tự trong str

LTrim(str) Cắt các khoảng trắng đầu str, dạng variant

LTrim$(str) Cắt các khoảng trắng đầu str, dạng string

Mid(str, start, len) Lấy len kí tự bắt đầu từ start trong str, dạng variant

Mid$(str,start,len) Lấy len kí tự bắt đầu từ start trong str, dạng string

Chuyên đề VBA – HIENLTH 4242

Mid$(str,start,len) Lấy len kí tự bắt đầu từ start trong str, dạng string

Right(str, len) Lấy len kí tự tính từ bên phải, dạng variant

Right$(str, len) Lấy len kí tự tính từ bên phải, dạng string

RTrim(str) Bỏ các khoảng trắng bên phải, dạng variant

Rtrim$(str) Bỏ các khoảng trắng bên phải, dạng string

Các hàm chuỗi của VBA

Trim(str) Bỏ tất cả các khoảng trắng dư, dạng variant

Trim$(str) Bỏ tất cả các khoảng trắng dư, dạng string

Str(num) Đổi num chữ chuỗi dạng variant

Chuyên đề VBA – HIENLTH 4343

Str(num) Đổi num chữ chuỗi dạng variant

Str$(num) Đổi num chữ chuỗi dạng string

UCase(str) Đổi sang chữ hoa, dạng variant

UCase$(str) Đổi sang chữ hoa, dạng string

Xem thêm các hàm trong Xem thêm các hàm trong VBLibVBLib (tên, ví d ụ)(tên, ví d ụ)

Các cấu trúc điều khiển

• Nếu … thìIF <biểu thức> THEN

<lệnh khi đúng>ELSE

<lệnh khi sai>

Chuyên đề VBA – HIENLTH 4444

<lệnh khi sai>END IF

Page 12: 0_VBA_4Slides

Các cấu trúc điều khiển

• Lựa chọnSELECT CASE <biểu thức>

CASE <giá trị>: Lệnh

CASE <giá trị>: Lệnh…

Chuyên đề VBA – HIENLTH 4545

…CASE ELSE: Lệnh

END SELECT

CẤU TRÚC LẶP WHILE...WEND

Vieát chöông trình tính toång cuûa n soá nguyeân döông vôùi n nhaäp töø baøn phím.

Sub Private ….

Dim i, n as integer

WHILE <BIỂU THỨC LOGIC>LỆNH/KHỐI LỆNH 1

WEND

Chuyên đề VBA – HIENLTH 4646

Dim i, n as integer

Dim S as long

‘Nhaäp soá nguyeân döông nS = 0

WHILE i<=n

S = S + i

i = i + 1

WEND

‘Xuat tong cua n so nguyen duong dau tien: SEnd Sub

Cấu trúc lặp

• Cấu trúc DO WHILE … LOOPDO WHILE <Biểu thức điều kiện>

‘Các câu lệnh muốn thực thi khi BTDK còn đúngLOOP ‘Quay về DO WHILE để kiểm tra BTDK

• Ví dụ: S = 1 + 2 + … + N

Chuyên đề VBA – HIENLTH 4747

• Ví dụ: S = 1 + 2 + … + NS = 0, I = 1

Do While I < N

S = S + I

I = I + 1;

Loop

Cấu trúc lặp

• Cấu trúc DO … LOOP WHILEDO

‘Thực hiện lệnhLOOP WHILE <biểu thức điều kiện>

• Ví dụ: S = 1 + 2 + … + N

Chuyên đề VBA – HIENLTH 4848

• Ví dụ: S = 1 + 2 + … + NS = 0, I = 1

Do

S = S + I

I = I + 1;

Loop While I <= N

Page 13: 0_VBA_4Slides

Cấu trúc lặp

• Cấu trúc DO … LOOP UNTILDO

‘Thực hiện lệnhLOOP UNTIL <biểu thức điều kiện>

• Ví dụ: S = 1 + 2 + … + N

Chuyên đề VBA – HIENLTH 4949

• Ví dụ: S = 1 + 2 + … + NS = 0, I = 1

Do

S = S + I

I = I + 1;

Loop Until I > N

Cấu trúc lặp

• Lặp có số lần xác định: FOR … NEXTFOR <Biến = Giá trị đầu> TO <Giá trị cuối>

[STEP khoảng tăng]‘ Phần các lệnh thực thi khi biến chưa đạt giá trị cuối

Chuyên đề VBA – HIENLTH 5050

NEXT BiếnS = 0

For I = 1 to 5 step 1

S = S + i

Next I

Cấu trúc lặp

• Lặp có số lần xác định: FOR EACH… NEXTFOR EACH <phần tử> IN <tập hợp>

Thực hiệnNEXT phần tử

Ví dụ:

Sub ConvertToProper()’Excel VBA

Chuyên đề VBA – HIENLTH 5151

Sub ConvertToProper()’Excel VBA

Dim cellObject As Range

For Each cellObject In Selection

cellObject.Formula = WorksheetFunction(Proper(cellObject.Formula))

Next

End Sub

Một số lệnh ngắt

• Break• Continue• EXIT FOR• EXIT DO

Chuyên đề VBA – HIENLTH 5252

• EXIT DO• EXIT SUB• END

Page 14: 0_VBA_4Slides

Làm việc với mảng• Mảng cố định:

<Phạm vi> tên_mảng(số phần tử) as <kiểu>VD: Dim myInt(5) as Integer

• Mảng động:<Phạm vi> tên_mảng() as <kiểu>

Chuyên đề VBA – HIENLTH 5353

ReDim tên_mảng(số phần tử)ReDim Preserve tên_mảng(số phần tử)

Ví dụ:Dim iDynamicArray() As IntegerReDim iDynamicArray(10)ReDim Preserve iDynamicArray(12)

Xác định cận của mảng

• Các hàm Ubound và LBound có thể tìm cận trên và dưới của một mảng

• Cú pháp:x = UBound(tên_mảng) ‘Cận trên của mảngy = LBound(tên_mảng) ‘Cận dưới của mảng

Chuyên đề VBA – HIENLTH 5454

y = LBound(tên_mảng) ‘Cận dưới của mảng

• Ta có thể định nghĩa cận của mảng:Dim myInt(1 to 10) as Integer

Mảng nhiều chiều

• Dim tên_mảng(cận trên 1, cận trên 2, ....) As <kiểu>

• Ví dụ:Dim arr1(2,4) as SingleDim arr2(0 to 1, 1 to 4) as Single

Chuyên đề VBA – HIENLTH 5555

Dim arr2(0 to 1, 1 to 4) as Single

Làm việc với các đối tượng

• Tham chiếu đến thuộc tính:Object.PropertyNameVD:– Application.ActiveWindow– ActiveCell.Font.Italic

Chuyên đề VBA – HIENLTH 5656

– ActiveCell.Font.Italic• Xác lập giá trị cho 1 thuộc tính:

Object.PropertyName = ValueVD: ActiveCell.Font.Size = 16

• Làm việc với các phương thức:Object.MethodName

Page 15: 0_VBA_4Slides

Làm quen với các đối tượng

• Có thể gán đối tượng cho 01 biến:Dim sht As WorksheetSet sht = Workbooks(“Demo.xls").Worksheets(“Demo01")

• Một đối tượng có nhiều thuộc tính, ta có thể sử dụng cấu trúc WITH như sau:WITH đối tượng

Chuyên đề VBA – HIENLTH 5757

WITH đối tượng.Thuộc tính 1.Thuộc tính 2

END WITH• Ví dụ:

With ActiveCell.Font.Italic = True.Font.Name = "Times New Roman“

End With

Đối tượng Application

Các thuộc tính:• Application.Dialogs: Trả về tập hợp các

dialog được xây dựng sẵn• Application.Height

Chuyên đề VBA – HIENLTH 5858

• Application.Width• Application.Path: Trả về đường dẫn tới đối

tượng Application• Application.ScreenUpdating: Xác lập

screenupdating của ứng dụng

Đối tượng Application

Các phương thức:• Application.CheckSpelling: Kiểm tra lỗi chính

tả (xem thêm)• Application.Help

Chuyên đề VBA – HIENLTH 5959

• Application.Quit: Thoát ứng dụng• Application.Repeat: Lặp lại thao tác cuối

cùng của ứng dụng

Đối tượng Window

Các thuộc tính:• Window.Caption• Window.Height• Window.Width

Chuyên đề VBA – HIENLTH 6060

• Window.WidthCác phương thức:• Window.Active• Window.Close• Window.LargeScroll

Page 16: 0_VBA_4Slides

Làm quen UserForm

• Chuột phải Project (tên_file)�Insert�UserForm

Chuyên đề VBA – HIENLTH 6161

Làm quen UserForm

• Giao diện Form:

Chuyên đề VBA – HIENLTH 6262

• Thanh ToolBox:

Làm quen User Form

• Nên đặt lại tên cho các đối tượng

Chuyên đề VBA – HIENLTH 6363

Làm quen Module

• Chuột phải Project (tên_file)�Insert�Module

Chuyên đề VBA – HIENLTH 6464

Page 17: 0_VBA_4Slides

Làm quen với Module

• Viết code: Hàm (Sub)

Chuyên đề VBA – HIENLTH 6565

Đại Học Sư Phạm Tp. Hồ Chí MinhĐại Học Sư Phạm Tp. Hồ Chí Minh

Chuyên đề VBA Chuyên đề VBA

VBA for Word

Làm việc với Document

• Chỉ định 01 document:– Documents("Memo.doc")– Documents(2)– ActiveDocument: Cửa sổ đang được focus– ThisDocument: Cửa sổ chứa code VBA thực

Chuyên đề VBA – HIENLTH 6767

– ThisDocument: Cửa sổ chứa code VBA thực thi

• Mở 01 tài liệu: Documents.Open(FileName)

VD: Documents.Open “D:\bangdiem.doc”

Làm việc với Document

• Lưu: Tài_liệu.Save• Lưu lại với tên khác:

Tài_liệu.Save As (tên, loại)• Đóng: Tài_liệu.Close chế_độ

Chuyên đề VBA – HIENLTH 6868

• Đóng: Tài_liệu.Close chế_độ– wdSaveChanges: Lưu tất cả thay đổi– wdDoNotSaveChanges: Không lưu– wdPromptToSaveChanges: Hỏi???

Page 18: 0_VBA_4Slides

Làm việc với Document

• Cập nhật màn hình:Application.ScreenUpdating = False/True• Active:

– Documents(“demo.doc”).Activate

Chuyên đề VBA – HIENLTH 6969

– Documents(“demo.doc”).Activate

– Documents(1).Activate

• In:– ActiveDocument.PrintOut– Documents(1).PrintOut

Làm việc với Document

• Tài_liệu.Active: Kích hoạt document được chỉ định

• Tài_liệu.PrintOut: In tài liệu được chỉ định• Tài_liệu.Select

Chuyên đề VBA – HIENLTH 7070

• Tài_liệu.Undo (times)• Tài_liệu.Redo (times)

Làm việc với Range (vùng chọn)

• Khai báo vùng chọn: Tài_liệu.Range(Start,End)

• Ví dụ: ‘Làm nghiêng đoạn 1ActiveDocument.Paragraphs(1).Range.Italic = True

• Thuộc tính của Range:– Bold, Italic, Font

Chuyên đề VBA – HIENLTH 7171

– Bold, Italic, Font– Copy, Cut, Paste, Delete– InsertAfter (text)– InsertBefore (text)– InsertParagraph– InsertParagraphAfter– InsertParagraphBefore

Range – Vùng chọnInsertAfter (Text) Chèn text vào cuối vùng chọn

InsertBefore (Text) Chèn text vào đầu vùng chọn

InsertBreak (Type) Chèn/ Thay thế vùng chọn thành breakType:• wdPageBreak(default)• wdColumnBreak• wdSectionBreakNextPage

Chuyên đề VBA – HIENLTH 7272

• wdSectionBreakNextPage• wdSectionBreakContinuous• wdSectionBreakEvenPage• wdSectionBreakOddPage• wdLineBreak• wdLineBreakClearLeft• wdLineBreakClearRight• wdTextWrappingBreak

InsertParagraph Chèn/ Thay thế vùng chọn thành paragraph

InsertParagraphAfter Chèn paragraph vào cuối vùng chọn

Page 19: 0_VBA_4Slides

Range – Vùng chọnInsertParagraphBefore Chèn paragraph vào đầu vùng chọn

StartOf (Unit, Extend) M ở rộng đầu vùng chọn đến đầu unit gần nhất

Extend = wdExtend

EndOf (Unit, Extend) M ở rộng cuối vùng chọn đến cuối unit gần nhất

Extend= wdExtend

Chuyên đề VBA – HIENLTH 7373

Extend= wdExtend

MoveLeft (Unit, Count, Extend) Mở rộng vùng chọn/range sang tráiCount > 0, Extend = wdExtend

MoveRight (Unit, Count, Extend) Mở rộng vùng chọn/range sang phảiCount > 0, Extend = wdExtend

MoveUp (Unit, Count, Extend) Mở rộng vùng chọn/range lên trênCount > 0, Extend = wdExtend

MoveDown (Unit, Count, Extend) Mở rộng vùng chọn/range xuống dướiCount > 0, Extend = wdExtend

Range – Vùng chọnHomeKey (Unit, Extend) Mở rộng vùng chọn về đầu Unit

Extend = wdExtend

MoveStart (Unit, Count) Thu hẹp/Mở rộng vùng chọnCount > 0 hay Count < 0

EndKey (Unit, Extend) Mở rộng vùng chọn về cuối UnitExtend = wdExtend

Chuyên đề VBA – HIENLTH 7474

Extend = wdExtend

MoveEnd (Unit, Count) Thu hẹp/Mở rộng vùng chọnCount > 0 hay Count < 0

MoveStartUntil (Cset, Count) Thu hẹp/Mở rộng vùng chọn đến khi gặp CsetCount > 0 hay wdFordward, wdBackward

MoveEndUntil (Cset, Count) Thu hẹp/Mở rộng vùng chọn đến khi gặp CsetCount > 0 hay wdFordward, wdBackward

Range – Vùng chọnMoveStartWhile (Cset, Count) Thu hẹp/Mở rộng vùng chọn chừng nào còn gặp

CsetCount > 0 hay wdFordward, wdBackward

MoveEndWhile (Cset, Count) Thu hẹp/Mở rộng vùng chọn chừng nào còn gặp Cset

Count > 0 hay wdFordward, wdBackward

Chuyên đề VBA – HIENLTH 7575

MoveUntil (Cset, Count) Thu hẹp/Mở rộng vùng chọn đến khi gặp CsetCount > 0, Count < 0 hay wdFordward,

wdBackward

MoveWhile (Cset, Count) Thu hẹp/Mở rộng vùng chọn chừng nào còn gặp Cset

Count > 0, Count < 0 hay wdFordward, wdBackward

Range – Vùng chọn

HomeKey (Unit, Extend) Mở rộng vùng chọn về đầu UnitExtend = wdExtend

EndKey (Unit, Extend) Mở rộng vùng chọn về cuối UnitExtend= wdExtend

Chuyên đề VBA – HIENLTH 7676

Extend= wdExtendExpand (Unit) Mở rộng vùng chọn đến unit

Extend (Char) Mở rộng vùng chọn đến unit lớn hơn nếu ExtendMode = True hoặc đến Char

Page 20: 0_VBA_4Slides

Làm việc với đối tượng Selection

• Đối tượng Selection luôn tham chiếu đến:– Text được chọn– Vị trí cursor điểm chèn

• Ví dụ:

Chuyên đề VBA – HIENLTH 7777

ActiveDocument.Paragraphs(1).Range.Select

Làm việc với đối tượng Selection

• Selection.Collapse Direction: Loại bỏ vùng chọn và đặt điểm chèn tại Direction

• Selection.EndKey (Unit, Extend): Di chuyển vùng chọn đến cuối 01 đơn vị chỉ định

• Selection.EndOf (Unit, Extend): Di chuyển vùng chọn đến cuối 01 bộ được chỉ định

Chuyên đề VBA – HIENLTH 7878

chọn đến cuối 01 bộ được chỉ định• Selection.Expand Unit: Mở rộng vùng chọn theo

đơn vị Unit• Selection.Home (Unit, Extend)• Selection.Move (Unit, Extend)• Selection.StartOf (Unit, Extend)

Selection – Con trỏ

TypeText (Text) Nhập text Selection.TypeText(“Hello”)

TypeParagraph Nhập dấu paragraph Selection.TypeParagraph

TypeBackSpace Xóa lui Selection.TypeBackSpace

Chuyên đề VBA – HIENLTH 7979

StartOf (Unit) Di chuy ển con trỏ đến đầu unit gần nhất

Selection.StartOfUnit:=wdParagraph

EndOf (Unit) Di chuyển con trỏ đến cuối unit gần nhất

Selection – Con trỏMove (Unit, Count) Di chuyển con trỏ

Count > 0 hay Count < 0

HomeKey (Unit) Di chuyển con trỏ về đầu Unit

MoveLeft (Unit, Count) Di chuyển con trỏ sang trái Count > 0

EndKey (Unit) Di chuyển con tr ỏ về cuối Unit

Chuyên đề VBA – HIENLTH 8080

EndKey (Unit) Di chuyển con tr ỏ về cuối Unit

MoveRight (Unit, Count) Di chuyển con trỏ sang phải Count > 0

MoveUp (Unit, Count) Di chuyển con trỏ lên trên Count > 0

MoveDown (Unit, Count) Di chuyển con trỏ xuống dưới Count > 0

Page 21: 0_VBA_4Slides

Làm việc với đối tượng Selection• Các loại Unit:

– wdCharacter– wdWord (mặc định)– wdLine– wdSentence– wdParagraph

Chuyên đề VBA – HIENLTH 8181

– wdParagraph– wdSelection– wdStory– wdCell– wdColumn– wdRow– wdTable

Selection – Soạn thảoCopy

CopyFormat Copy format vủa ký tự đầu (/và của dấu paragraph)

CopyAsPicture Copy vùng chọn thành ảnh

Cut

Chuyên đề VBA – HIENLTH 8282

Delete

Paste

PasteFormat Áp dụng format cho vùng chọn

Font

Text

Character, Word, Sentences• Đếm số lượng ký tự trong 01 file:

Documents(“VBADemo.doc").Characters.Count

• Đếm số lượng từ trong 01 file:Documents(" VBADemo.doc ").Words.Count

• Đếm số lượng câu trong 01 file:

Chuyên đề VBA – HIENLTH 8383

• Đếm số lượng câu trong 01 file:Documents(" VBADemo.doc ").Sentences.Count

• Đếm số lượng đoạn trong 01 file:Documents(" VBADemo.doc ").Paragraphs.Count

• Xác định số Font:Application.FontNames.Count

Đối tượng Paragraph

Một số thuộc tính:• Paragraph.LeftIndex: Thụt lề trái (point)• Paragraph.LineSpacing: Khoảng cách dòng• Paragraph.RightIndex

Chuyên đề VBA – HIENLTH 8484

• Paragraph.RightIndex• Paragraph.SpaceAfter• Paragraph.SpaceBefore• Paragraph.Style

Page 22: 0_VBA_4Slides

VBA for Word Example• Thêm vào trang Word:

Public Sub Them_Chu()Selection.TypeText Text:="Hello World!“

End Sub

• Kiểm tra Word start up ở thư mục nào:

Chuyên đề VBA – HIENLTH 8585

• Kiểm tra Word start up ở thư mục nào:Public Sub AutoExec()MsgBox ("The Word Startup Folder is: " _

& vbCrLf & Word.Application.StartupPath)End Sub

VBA for Word ExampleChép nội dung file sẵn có sang file mới:Public SubAutoExec()

Dim MsgBoxResultDim SaveFileNameMsgBoxResult = MsgBox( "Click Yes to load the default letter" & vbCrLf & "Click No to load default Word.", vbYesNo, "Document Environment")

Chuyên đề VBA – HIENLTH 8686

vbYesNo, "Document Environment")If MsgBoxResult = vbYesThen

Documents.Open ("THUCHANH_VBA.doc")SaveFileName = InputBox( "Enter a name for the letter",

"Letter Name ?")If SaveFileName <> "" Then

ActiveDocument.SaveAs (SaveFileName)End If

End Sub

VBA for Word Example – Tìm và thaySub ReplaceText()

Dim FindStringArray As StringDim ReplaceStringArray As StringDim i As Integer

FindStringArray = "find 0"ReplaceStringArray = "replace 0"

Chuyên đề VBA – HIENLTH 8787

Selection.Find.Wrap = wdFindContinueWith Selection.Find

.Text = FindStringArray

.Replacement.Text = ReplaceStringArray

.Execute Replace:=wdReplaceAllEnd With

End Sub

Thư viện trợ giúp

• Bấm F2

Chuyên đề VBA – HIENLTH 8888

Page 23: 0_VBA_4Slides

Đại Học Sư Phạm Tp. Hồ Chí MinhĐại Học Sư Phạm Tp. Hồ Chí Minh

Chuyên đề VBA Chuyên đề VBA

VBA for Excel

Các đối tượng của Excel

Chuyên đề VBA – HIENLTH 9090

Các đối tượng trong Excel

• Đối tượng này có thể chứa các đối tượng khác.

• Ví dụ:– Application.Workbooks đề cập (refer) đến tất cả

workbook đang mở trong Excel.

Chuyên đề VBA – HIENLTH 9191

workbook đang mở trong Excel.– Workbooks.Item(1) đề cập đến workbook đầu

tiên và thường được gọi tắt là Workbooks(1).– Workbooks(“Demo.xls”) sẽ đề cập đến workbook

tên đó.– Workbooks(“Demo.xls”).Worksheets(“Sheet1”).

Range(“B3”) đề cập tới ô B3

Các phương thức

• Các đối tượng có các phương thức mà có thể thực hiện các hành động trong nó.– Activate (Hoạt động hay hiện hành)– Clear (Xoá)

Chuyên đề VBA – HIENLTH 9292

– Clear (Xoá)– Copy (Sao chép)– Cut (Cắt bỏ đi)– Delete (Xoá nội dung trong Range)– Select (Lựa chọn)

• VD: Range(“B3”).Select

Page 24: 0_VBA_4Slides

Các thuộc tính

• Mỗi đối tượng đều có các đặc điểm riêng.

• Đối với đối tượng Range, các thuộc tính đặc trưng như sau:– ColumnWidth

Chuyên đề VBA – HIENLTH 9393

– ColumnWidth– Font– Formula– Text– Value

Example

• Điền vào cell B1 trị là chuỗi “Happy”:Range("B1").SelectActiveCell.FormulaR1C1 = “Happy"

• Chọn nhiều ô:

Chuyên đề VBA – HIENLTH 9494

Range("A2:A8").Select

• Điền vào ô công thức:Range("E2").SelectActiveCell.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])"

Tham chiếu đến ô và vùng

Chuyên đề VBA – HIENLTH 9595

• VD: Range(“A1:A3”).Select thì vùng A1:A3 được bôi đen.

Ví dụ• Với workbook đang hoạt động, trong worksheet Sheet1, bạn

gán nội dung “Chuyen de VBA” vào ô B3. Sau đó cho nội dung chữ đó đậm, nghiêng, màu đỏ và nền màu vàng.

• VD:Sub Thunghiem()

ActiveWorkbook.Sheets(“Sheet1”).Range("B3").SelectActiveCell.FormulaR1C1 = “Chuyên de VBA”Selection.Font.Bold = True

Chuyên đề VBA – HIENLTH 9696

Selection.Font.Bold = TrueSelection.Font.Italic = TrueSelection.Font.ColorIndex = 3With Selection.Interior

.ColorIndex = 6

.Pattern = xlSolidEnd WithRange("B4").Select

End Sub

Page 25: 0_VBA_4Slides

Số chỉ mục

• Thuộc tính Cells có thể sử dụng để trả về đối tượng mảng là ô đơn.

• Số chỉ mục hàng và cột của ô cung cấp cho Cells(row_no,col_no).

• Nếu không có số hàng và cột thì Cells() sẽ trả

Chuyên đề VBA – HIENLTH 9797

• Nếu không có số hàng và cột thì Cells() sẽ trả về đối tượng là toàn bộ ô trong sheet (giống như phím tắt Ctr + A).

• Ví dụ:– Cells(4,1) trả về ô A4– Cells() trả về toàn bộ ô trong sheet– Cells.ClearContents : Xóa toàn bộ nội dung

Số hàng và số cột (Rows and Columns)

• Rows(4): Hàng số 4• Rows: Toàn bộ dòng trong sheet hiện hành• Columns(4): Cột D (cột thứ 4)• Columns(“D”): Cột D• Columns: Toàn bộ cột trong sheet hiện hành

Chuyên đề VBA – HIENLTH 9898

• Columns: Toàn bộ cột trong sheet hiện hành• VD:

– Rows(2).Font.Bold = Truecho toàn bộ hàng 2 trong sheet Week4 chữ đậm của workbook hiện hành.

Offset cells

• Được sử dụng để tham chiếu đến ô khác mà có quan hệ với ô đang hoạt động.

• offset(no_rows_down, no_cols_to_right)• VD:

Sub Offset()Range("B1").Activate

Chuyên đề VBA – HIENLTH 9999

Range("B1").ActivateActiveCell.Offset(1, 1).Font.ColorIndex = 3ActiveCell.Offset(4, 1).Font.Bold = TrueActiveCell.Offset(8, 1).Value = “VBA"ActiveCell.Offset(8, 1).Font.Size = 12Range("E9").ActivateActiveCell.Offset(-1, -2).Font.Italic = True

End Sub

Ki ểu tham chiếu R1C1

• Khi sử dụng kiểu R1C1, Excel sẽ tham chiếu đến ô mà được xác định bởi số hàng và cột.

• VD: – Nhập vào công thức Sum(“B2:B4”) trong ô B5.– Ô B5 có địa chỉ hàng 5 và cột B và có giá trị là tổng

Chuyên đề VBA – HIENLTH 100100

– Ô B5 có địa chỉ hàng 5 và cột B và có giá trị là tổng các ô của 3 hàng trước đó, gồm dòng thứ 2 đến dòng thứ tư nhưng cùng cột.Range(“B5”).SelectActiveCell.FormulaR1C1 = “=Sum(R[-3]C:R[-1]C)”

Page 26: 0_VBA_4Slides

Example

• Chức năng tự điền nhanh:Range("B9").SelectSelection.AutoFill

Destination:=Range("B9:E9"), Type:=xlFillDefault

Chuyên đề VBA – HIENLTH 101101

Type:=xlFillDefault

Ví dụ ứng dụng Word trong Excel

Sub proWord()Dim varDoc As ObjectSet varDoc = CreateObject("Word.Application")varDoc.Visible = TrueSheets("Sheet1").Range("A1:b1").CopyvarDoc.Documents.AddvarDoc.Selection.Paste

Chuyên đề VBA – HIENLTH 102102

varDoc.Selection.PastevarDoc.Activedocument.SaveAs ThisWorkbook.Path & "/" & "testWord.doc"varDoc.Documents.ClosevarDoc.Quit

End Sub

VBA for Excel Tips

• Đóng gói (không xem mã nguồn):– Chuột phải VBAProject(tên_file.xls), chọn

VBA Project Properties.

Chuyên đề VBA – HIENLTH 103103

• Lần sau mở xem code (Alt + F11):

Chuyên đề VBA – HIENLTH 104104

Page 27: 0_VBA_4Slides

Liên kết ứng dụng khác

Bước 1: Chèn thư viện sử dụng• (Alt + F11) Tools / References…

– Microsoft Word 11.0 Object Library– Microsoft Excel 11.0 Object Library

Chuyên đề VBA – HIENLTH 105105

– Microsoft PowerPoint 11.0 Object Library– Microsoft Access 11.0 Object Library– Microsoft Outlook 11.0 Object Library

Ví dụ: Tạo ứng dụng WordSub GetWord()

Dim objApp As Object

On Error Resume NextSet objApp = GetObject(, "Word.Application")

ElseOn Error GoTo ErrHandler

End If

'Add some text to the documentWith objApp.Documents(1)

Chuyên đề VBA – HIENLTH 106106

If Err.Number <> 0 ThenErr.ClearOn Error GoTo ErrHandlerSet objApp =

CreateObject("Word.Application")With objApp

.Visible = True

.Documents.AddEnd With

.Paragraphs(1).Range.InsertParagraphBefore

.Paragraphs(1).Range.Text = "Hello!" & vbNewLineEnd With

ErrHandler:Set objApp = NothingOn Error GoTo 0

End Sub

Ví dụ: Tạo ứng dụng ExcelSub GetExcel()

Dim objApp As ObjectOn Error Resume NextSet objApp = GetObject(, "Excel.Application")

If Err.Number <> 0 Then

Else'Bound to instance, activate

error handlingOn Error GoTo ErrHandler

End If

'Add some text to the document

Chuyên đề VBA – HIENLTH 107107

If Err.Number <> 0 ThenErr.Clear 'Could not get

instance, so create a new oneOn Error GoTo ErrHandlerSet objApp =

CreateObject("Excel.Application")With objApp

.Visible = True

.Workbooks.AddEnd With

'Add some text to the documentWith objApp.ActiveWorkbook

.Worksheets.Add

.Worksheets(1).Range("A1") = "Hello!"End With

ErrHandler:Set objApp = Nothing

On Error GoTo 0End Sub

Ví dụ: Tạo ứng dụng PowerPointSub GetPowerpoint()

Dim objApp AsObject

On Error Resume NextSet objApp = GetObject(, "Powerpoint.Application")

ElseOn Error GoTo ErrHandler

End If

With objApp.ActiveWindow.View.GotoSlide _

Index:=objApp.ActivePresentation.Slides

Chuyên đề VBA – HIENLTH 108108

If Err.Number <> 0 ThenErr.ClearOn Error GoTo ErrHandlerSet objApp =

CreateObject("Powerpoint.Application")With objApp

.Visible = True

.Presentations.AddEnd With

Index:=objApp.ActivePresentation.Slides.Add(Index:=1,Layout:=1).SlideIndex.ActivePresentation.Slides(1).Shapes.Title.TextFrame.Textrange.Text = "Hello!"End With

ErrHandler:Set objApp = NothingOn Error GoTo 0

End Sub

Page 28: 0_VBA_4Slides

Ví dụ: Tạo ứng dụng AccessSub GetAccess()

Dim objApp As Object

On Error Resume NextSet objApp =

GetObject(, "Access.Application")

ElseOn Error GoTo

ErrHandlerEnd If

MsgBox "I have successfully bound to an Access application!"

Chuyên đề VBA – HIENLTH 109109

"Access.Application")

If Err.Number <> 0 ThenErr.ClearOn Error GoTo ErrHandlerSet objApp =

CreateObject("Access.Application")

objApp.Visible = True

bound to an Access application!"

ErrHandler:Set objApp = NothingOn Error GoTo 0

End Sub

Đại Học Sư Phạm Tp. Hồ Chí MinhĐại Học Sư Phạm Tp. Hồ Chí Minh

Chuyên đề VBA Chuyên đề VBA

VBA for PowerPoint

Đối tượng Presentation

• Tham chiếu đến đối tượng:– Presentations(1)– Presentations("Proposal.ppt")– ActivePresentation

• Mở 01 file trình chiếu:

Chuyên đề VBA – HIENLTH 111111

• Mở 01 file trình chiếu:– Presentations.Open(FileName)

• Thêm 01 file trình chiếu:– Presentations.Add(WithWindow)– Trong đó:

• WithWindow = True: Muốn file Hiển thị• WithWindow = False: Muốn file ẩn

Các thuộc tính của đối tượng Presentation

• Presentation.FullName: Đường dẫn và tên đầy đủ.

• Presentation.Name: Tên file trình chiếu.• Presentation.Path: Đường dẫn đến file trình

chiếu.

Chuyên đề VBA – HIENLTH 112112

chiếu.• Presentation.SlideMaster: Tham chiếu đến

đối tượng Slide Master• Presentation.TitleMaster: Tiêu đề Slide

Master

Page 29: 0_VBA_4Slides

Các thuộc tính của đối tượng Presentation

• Presentation.Slides: Tham chiếu đến tập hợp các đối tượng Slides.

• Presentation.SlideShowSettings: Tham chiếu đến đối tượng SlideShowSetting

• Presentation.TitleMaster: Tiêu đề Slide

Chuyên đề VBA – HIENLTH 113113

• Presentation.TitleMaster: Tiêu đề Slide Master

• Presentation.PrintOut: In• Presentation.Save• Presentation.SaveAs kiểu

Đối tượng Slide

• Tham chiếu đến Slide:– ActivePresentation.Slides(1)– ActivePresentation.Slides("Slide1")– ActivePresentation.Slides.Range (Array("Slide1","Slide2"))

• Tạo mới 01 Slide:

Chuyên đề VBA – HIENLTH 114114

• Tạo mới 01 Slide:– Presentation.Slides.Add(Index, Layout)– Ví dụ:With ActivePresentation.Slides

.Add Index:=.Count + 1, Layout:=ppLayoutOrgchartEnd With

Các thuộc tính của Slide

• Slide.Background• Slide.Layout• Slide.Master• Slide.Name

Chuyên đề VBA – HIENLTH 115115

• Slide.Name• Slide.Shapes• Slide.SlideShowTransition

Các đối tượng trên 01 slide

• ActivePresentation.Shapes(1): Tham chiếu tới hình thứ 1 trên slide.

• Thêm hình:– Slide.Shapes.AddConnector– Slide.Shapes.AddCurve– Slide.Shapes.AddLabel– Slide.Shapes.AddLine

Chuyên đề VBA – HIENLTH 116116

– Slide.Shapes.AddLine– Slide.Shapes.AddMediaObject– Slide.Shapes.AddPicture– Slide.Shapes.AddPolyline– Slide.Shapes.AddShape– Slide.Shapes.AddTextbox– Slide.Shapes.AddTextEffect– …

Page 30: 0_VBA_4Slides

Trình chi ếu

• Presentation.SlideShowSettings.Run• Đến slide kế tiếp:

SlideShowWindows(Index:=1).View.Next

• Đến slide thứ n:

Chuyên đề VBA – HIENLTH 117117

• Đến slide thứ n:SlideShowWindows(Index:=1).View.GotoSlide n

• Muốn ngừng (ngủ):Private Declare Sub Sleep Lib "kernel32" (ByVal

dwMilliseconds As Long)Sleep(1000)’Ngủ 1 giây

Đại Học Sư Phạm Tp. Hồ Chí MinhĐại Học Sư Phạm Tp. Hồ Chí Minh

Chuyên đề VBA Chuyên đề VBA

VBA for Access

Mô hình đối tượng củaActiveX Data Object

Chuyên đề VBA – HIENLTH 119119

Các phiên bản của ADO

• ADO bắt đầu từ phiên bản 2.0, được cài đặt cùng vớiMicrosoft Office 97

• Visual Studio 98 hoặc Microsoft Office 2000 đi kèmvới ADO 2.1

• Windows 2000 được cài đặt ADO 2.5• Microsoft Office XP có ADO 2.6

Chuyên đề VBA – HIENLTH 120120

• Microsoft Office XP có ADO 2.6• Windows XP được cài đặt ADO 2.7• Microsoft Office 2003 có ADO 2.8• ADO.NET là phiên bản dành cho người lập trình

Microsfot Visual Studio .NET và có cấu trúc khác vớicác phiên bản ADO trước đó.

Page 31: 0_VBA_4Slides

Các bước chuẩn bị• Tạo tham chiếu: (Alt + F11) – Sử dụng ADO

– Tool / References– Chọn Microsoft ActiveX Data Object 2.8 Library

Chuyên đề VBA – HIENLTH 121121

Đối tượng Connection

1. Mục tiêu sử dụng, khai báo Connection2. Tạo kết nối tới CSDL3. Các loại Cursor4. Các thuộc tính thường dùng

Chuyên đề VBA – HIENLTH 122122

4. Các thuộc tính thường dùng5. Hành động Excute6. Tập hợp Errors

Mục tiêu sử dụng• Mục tiêu sử dụng

– Tạo kết nối tường minh với CSDL, tiết kiệm tài nguyên cho hệ quảntrị CSDL

– Quản lí lỗi phát sinh khi làm việc với CSDL• Khai báo

Public CN As ADODB.Connection• Sử dụng

Set CN = New ADODB. Connection

Chuyên đề VBA – HIENLTH 123123

Set CN = New ADODB. Connection

‘Các thao tác trên biến CN…CN.Close ‘Đóng kết nối với CSDL

• Chú ý– Chương trình nên tận dụng tối đa khả năng dùng chung kết nối với

CSDL– Ngắt kết nối càng sớm càng tốt khi không còn làm việc với CSDL– Không khai báo CN cục bộ

Tạo kết nối với CSDL• Data provider

– Là một phần mềm phục vụ cho các ứng dụng sử dụng ADO đểthực hiện các thao tác về dữ liệu

• Bước 1: Xác định các thông tin và đặc điểm của kết nối– Sử dụng DSN (Data Source Name), xem demo trên máy– ConnectionString

• Provider: chỉ ra data provider của OLE-DB tương ứng với CSDL

Chuyên đề VBA – HIENLTH 124124

• Data Source: chỉ ra CSDL cần kết nối• User ID, Password: username và password để truy cập CSDL• Có thể lấy được Connection String từ ADO Data Control

– CursorLocation• Chỉ ra tập hợp các chức năng mà hệ quản trị CSDL sẽ hỗ trợ trong

phiên làm việc

• Bước 2: Tiến hành kết nối– Gọi hành động Open

Page 32: 0_VBA_4Slides

Tạo kết nối với CSDL

• Ngay tại VBA của Access:Dim conn As ADODB.ConnectionSet conn = CurrentProject.Connection

• Ở ngoài Access:Public conn As ADODB.ConnectionSet conn = New ADODB.Connection

Chuyên đề VBA – HIENLTH 125125

Set conn = New ADODB.Connectionconn.ConnectionString = "Provider =

Microsoft.Jet.OLEDB.4.0 ;Data Source=C:\Documents and Settings\HPT\Desktop\QLHS.mdb"

conn.CursorLocation = adUseClientconn.Open

Tạo kết nối với CSDL

• Kiểm tra kết nốiIf conn.State <> adStateOpen Then

MsgBox “Ket noi khong thanh cong”Else

MsgBox “Ket noi thanh cong”

Chuyên đề VBA – HIENLTH 126126

MsgBox “Ket noi thanh cong”End If

• Đóng kết nốiconn.Close ‘hoặc Set conn = Nothing

Các loại Cursor• Cursor

– Là một thành phần của CSDL, kiểm soát việc di chuyển giữa các mẩu tin trong RecordSet, cập nhật dữ liệu hay khả năng nhìn thấy sự thay đổi dữ liệu từ người khác

– CursorLocation: các chức năng hỗ trợ cho Cursor của CSDL• Loại CursorLocation mặc định được dùng là adUserServer

– Tăng sự lưu thông trên mạng nhưng lượng dữ liệu truyền trên mạng nhỏ– Thời gian đáp ứng yêu cầu của người dùng nhanh– Thiếu nhiều chức năng của các đối tượng ADO

Chuyên đề VBA – HIENLTH 127127

– Thiếu nhiều chức năng của các đối tượng ADO• Microsoft Cursor Service cho OLE DB cung cấp rất nhiều chức năng

mạnh cho data provider (hay ứng dụng sử dụng ADO)– Tăng tốc độ thực hiện một số chức năng– Đơn giản hoá việc lập trình– Giảm sự lưu thông trên mạng nhưng dữ liệu truyền trên mạng lớn

• Để sử dụng Microsoft Cursor Service– Connection.CursorLocation = adUserClient– RecordSet.CursorLacation = adUseClient

Các thuộc tính thường dùng• ConnectionString

– Chuỗi thông tin dùng để tạo kết nối với một CSDL

• ConnectionTimeout– Số giây tối đa chờ kết nối, nếu vượt quá, coi như không kết nối

được (mặc định = 15)

• CursorLocation– Xác định tập hợp các chức năng của Connection sẽ dùng

Chuyên đề VBA – HIENLTH 128128

– Xác định tập hợp các chức năng của Connection sẽ dùng

• State– Trạng thái của mối kết nối (adStateClosed, Open, Connecting,

Excuting, Fetching)

• Provider– Chỉ định data provider của OLE DB sẽ dùng để kết nối với CSDL– Thường dùng chung trong ConnectionString

Page 33: 0_VBA_4Slides

Làm việc với RecordDim rs As ADODB.RecordsetSet rs = new ADODB.Recordset• Mở:Recordset.Open Source, Connection, CursorType,

LockType, OptionsTrong đó:

Chuyên đề VBA – HIENLTH 129129

Trong đó:– Source: tên bảng hay câu lệnh SQL– Connection: biến connect đã mở trước đó– CursorType:

• adOpenForwardOnly: mở chỉ đọc• adOpenKeyset, adOpenDynamic : mở để thêm/sửa/xóa cập nhật

kịp thời

Làm việc với Recordset

• Các thuộc tính:– Recordset.Source: Trả về tên Table hay câu lệnh

SQL.– Recordset.ActiveConnection: Trả về connection– Recordset.CursorType

Chuyên đề VBA – HIENLTH 130130

– Recordset.CursorType– Recordset.LockType

• Ví dụ: Mở connection sử dụng Table:rs.Open “HocSinh", conn

Các giá trị của CursorType• CursorType: Loại cursor (xem cursor ở phần Connection) mà data

provider sẽ sử dụng khi mở RecordSet• adOpenForwardOnly (mặc định)

– Nhanh, chỉ dùng để duyệt qua các mẩu tin lấy được• adOpenDynamic

– Có thể di chuyển tới - lui, cập nhật mẩu tin– Thấy được các mẩu tin do người khác thêm, xoá, sửa vào CSDL

• adOpenKeySet

Chuyên đề VBA – HIENLTH 131131

• adOpenKeySet– Có thể di chuyển tới - lui, cập nhật mẩu tin– Mẩu tin

• Thêm bởi người khác: Không thấy• Xoá bởi người khác: không truy cập được• Sửa bởi người khác: thấy

• adOpenStatic– Có thể di chuyển tới - lui, cập nhật mẩu tin– Không thấy người khác thao tác với dữ liệu

Các giá trị của LockType• Locktype: hình thức khoá mẩu tin mà data provider sẽ sử

dụng khi mở RecordSet• adLockBatchOptimistic

– Cập nhật nhiều mẩu tin một lúc, chỉ khoá các mẩu tin vào lúc thựchiện hành động cập nhật (UpdateBatch)

• adLockOptimistic

Chuyên đề VBA – HIENLTH 132132

• adLockOptimistic– Cập nhật từng mẩu tin, chỉ khoá mẩu tin vào lúc thực hiện hành

động cập nhật (Update)

• adLockPessimistic– Cập nhật từng mẩu tin, khoá mẩu tin ngay khi có sự thay đổi dữ

liệu

• adLockReadOnly– Mẩu tin chỉ có thể đọc, không thể thay đổi dữ liệu

Page 34: 0_VBA_4Slides

Các thuộc tính thường dùng• AbsolutePosition: Vị trí mẩu tin hiện hành trong RecordSet• RecordCount: Tổng số mẩu tin trong RecordSet

– Thường dùng để xác định số mẩu tin, RecordSet rỗng

• BOF: Vượt ra trước mẩu tin đầu tiên– Thường dùng trong quá trình di chuyển mẩu tin hiện hành, tìm kiếm,

lọc,…

• EOF: Vượt ra sau mẩu tin cuối cùng– Thường dùng trong quá trình di chuyển mẩu tin hiện hành, tìm kiếm,

Chuyên đề VBA – HIENLTH 133133

– Thường dùng trong quá trình di chuyển mẩu tin hiện hành, tìm kiếm,lọc,…

• State: Trạng thái kết nối với CSDL của RecordSet– Hai giá trị thường dùng: adStateClosed và adStateOpen

• Bookmark: Đánh dấu mẩu tin hoặc di chuyển mẩu tin hiện hành tới vịtrí đánh dấu

• EditMode: Tình trạng của mẩu tin hiện hành– Giá trị thường dùng: adEditNone

Ví dụ 1

Sub RecordsetOpenTable_1()Dim rs As ADODB.Recordset ‘Khai báo biến RecordsetSet rs = new ADODB.Recordset

rs.Open “HocSinh", conn

Chuyên đề VBA – HIENLTH 134134

rs.Open “HocSinh", conn ‘Thực hiện….rs.Close ‘Đóng kết nốiSet rs = Nothing

End Sub

Ví dụ 2

Sub RecordsetOpenTable_2()Dim rs As ADODB.Recordset ‘Khai báo biến RecordsetSet rs = new ADODB.RecordsetWith rs

.Source = “HocSinh“

Chuyên đề VBA – HIENLTH 135135

.ActiveConnection = conn

.OpenEnd Withrs.Close ‘Đóng kết nốiSet rs = Nothing

End Sub

Làm việc với Recordset

• SELECT [DISTINCT] field_names FROM table_name WHERE criteria ORDER BY field_names [DESC];

• Ví dụ dùng SQL:Sub RecordsetOpenSELECT()

Dim rs As ADODB.RecordsetDim strSELECT As String

Chuyên đề VBA – HIENLTH 136136

Dim strSELECT As StringSet rs = new ADODB.RecordsetstrSELECT = "SELECT * FROM HocSinh WHERE

NoiSinh=‘KhanhHoa‘ ORDER BY TenHS;“rs.Open strSELECT, conn, adOpenKeysetrs.CloseSet rs = Nothing

End Sub

Page 35: 0_VBA_4Slides

Làm việc với RecordSet• Lấy giá trị 01 trường:

Recordset.Fields(FieldName)Recordset(FieldName)Recordset.Fields(FieldIndex)Recordset(FieldIndex)

Chuyên đề VBA – HIENLTH 137137

Recordset(FieldIndex)

• Ví dụ:‘Sau khi mở kết nối, truy vấn SQLrs.Fields(“TenHS”) ’Lấy tên HSrs(0) ‘Lấy giá trị cột số 0 (cột đầu tiên)

Làm việc với RecordSet

• Các điều khiển:– Recordset.MoveFirst– Recordset.MoveLast– Recordset.MoveNext– Recordset.MovePrevious

Chuyên đề VBA – HIENLTH 138138

– Recordset.MovePrevious• Kiểm tra:

– Recordset.BOF: Mẫu tin đầu tiên?– Recordset.EOF: Mẫu tin cuối cùng?

• Di chuyển:– Recordset.Move NumRecords, Start

Tìm 01 record thỏa mãn điều kiện nào đó?

Recordset.Find Criteria, SkipRows, SearchDirection, Start

Trong đó:– Criteria: Điều kiện tìm– SkipRows: Tìm từ SkipRows mẫu tin tính từ vị trí

Chuyên đề VBA – HIENLTH 139139

– SkipRows: Tìm từ SkipRows mẫu tin tính từ vị trí mẫu tin hiện tại. Mặc định là 0.

– SearchDirection:• adSearchForward: Hướng tăng (record tiếp)• adSearchBackward: Hướng giảm (record trước)

– Start: Vị trí bắt đầu

Ví dụ về tìmSub SearchRecordsWithFind()

Dim rs As ADBDO.RecordsetDim strCriteria As StringSet rs = new ADODB.RecordsetWith rs

.Source = “HocSinh“

.ActiveConnection = conn

.CursorType = adOpenKeyset

.OpenEnd With

Chuyên đề VBA – HIENLTH 140140

End With strCriteria = “NoiSinh=‘Khánh Hòa'“rs.Find strCriteriaDo While Not rs. EOF

MsgBox rs(“HoHS") & " " & rs(“TenHS") rs.Find strCriteria, 1

Loop rs.CloseSet rs = Nothing

End Sub

Page 36: 0_VBA_4Slides

Thêm mới 01 mẫu tin (record)

rs.AddNewrs(“tên_trường") = “giá_trị“rs.UpdateVí dụ:

Chuyên đề VBA – HIENLTH 141141

Ví dụ:‘Khai báo kết nốirs.AddNewrs(“MaHS”) = “Trần Văn”rs(“TenHS”) = “Chiến”rs.Update

LockType và hànhđộng cập nhật• Khi mẩu tin được thêm mới hay sửa đổi, dữ liệu được data provider tạm

thời lưu trong bộ nhớ trước khi cập nhật vào CSDL– Để cập nhật dữ liệu vào CSDL, sử dụng hành động

• Update

• UpdateBatch

– Để bỏ qua các thay đổi về dữ liệu, sử dụng hành động• CancelUpdate nếu cập nhật dùng Update

• Gọi CancelUpdate khi EditMode=adEditNone sẽ có lỗi

Chuyên đề VBA – HIENLTH 142142

• Gọi CancelUpdate khi EditMode=adEditNone sẽ có lỗi• CancelBatch nếu cập nhật dùng UpdateBatch

• Các LockType– adLockReadOnly: Không cập nhật được– adLockPessimistic, adLockOptimistic: sử dụng Update

• Dữ liệu tự động cập nhật khi di chuyển tới mẩu tin khác• Nếu không Update hoặc CancelUpdate, đóng RecordSet sẽ có lỗi

– adLockBatchOptimistic: sử dụng UpdateBatch• Dữ liệu đã thay đổi sẽ bị mất khi đóng RecordSet mà chưa cập nhật

Sửa 01 mẫu tin (record)rs.Find điều_kiện_tìmDo While Not rs.EOF

rs(“tên_trường") = “giá_trị“ rs.Updaters.Find điều_kiện_tìm, 1

LoopVí dụ:

Chuyên đề VBA – HIENLTH 143143

Ví dụ:dkTim = “NoiSinh = ‘Khánh Hà’ “rs.Find dkTimDo While Not rs.EOF

rs(“NoiSinh”) = “Khánh Hòa”rs.Updaters.Find dkTim, 1

Loop

Xóa 01 mẫu tin (record)

rs.Find điều_kiện_tìmIf Not rs.EOF Then

rs.Deleters.Update

End IfVí dụ:

Chuyên đề VBA – HIENLTH 144144

Ví dụ:dkTim = “MaHS = ‘HS001’ “rs.Find dkTimIf Not rs.EOF Then

rs.Deleters.Update

End If

Page 37: 0_VBA_4Slides

Đại Học Sư Phạm Tp. Hồ Chí MinhĐại Học Sư Phạm Tp. Hồ Chí Minh

Chuyên đề VBA Chuyên đề VBA

VBA for Outlook

Bắt đầu sử dụng Outlook 2003

Chuyên đề VBA – HIENLTH 146146

Tùy chọn

Chuyên đề VBA – HIENLTH 147147

Gõ tên hiển thị trên Email

Chuyên đề VBA – HIENLTH 148148

Page 38: 0_VBA_4Slides

Đặt địa chỉ Email

• Giả sử dùng Gmail

Chuyên đề VBA – HIENLTH 149149

Cài đặt thông số

• POP3• pop.gmail.com• smtp.gmail.com

Chuyên đề VBA – HIENLTH 150150

Cài đặt thông số

Chuyên đề VBA – HIENLTH 151151

Lựa chọn cách kết nối Internet

Chuyên đề VBA – HIENLTH 152152

Page 39: 0_VBA_4Slides

Thông báo kết quả

Chuyên đề VBA – HIENLTH 153153

Giao diện Outlook 2003

Chuyên đề VBA – HIENLTH 154154

Cho phép dùng POP trong Gmail

Chuyên đề VBA – HIENLTH 155155

Bật POP

Chuyên đề VBA – HIENLTH 156156

Page 40: 0_VBA_4Slides

Điều chỉnh cổng gửi/nhận thư

• Tools / Email Account

Chuyên đề VBA – HIENLTH 157157

Điều chỉnh cổng gửi/nhận thư

Chuyên đề VBA – HIENLTH 158158

Điều chỉnh cổng gửi/nhận thư

Chuyên đề VBA – HIENLTH 159159

Điều chỉnh cổng gửi/nhận thư

Chuyên đề VBA – HIENLTH 160160

Page 41: 0_VBA_4Slides

Điều chỉnh cổng gửi/nhận thư

Chuyên đề VBA – HIENLTH 161161

Điều chỉnh cổng gửi/nhận thư

• POP3: 995• SMTP: 465

Chuyên đề VBA – HIENLTH 162162

Nội dung chương này

• Xác định, copy, di chuyển, xóa email• Xác định người gửi, chủ đề, nội dung,…• Gửi email• Thêm, xóa, download attach

Chuyên đề VBA – HIENLTH 163163

• Thêm, xóa, download attach• Sử dụng Outlook ở các ứng dụng khác

trong MS Office

Khai báo

Dim ns As NameSpaceDim ib As MAPIFolderSet ns = ThisOutlookSession.SessionSet ib = ns.GetDefaultFolder(olFolderInbox)

Chuyên đề VBA – HIENLTH 164164

Set ib = ns.GetDefaultFolder(olFolderInbox)Khai báo Namespace và MAPIFolder.Ví dụ: Truy xuất tới thư mục Input trong

Personal Folders.ns.Folders(1).Folders(3)ns.Folders("Personal Folders").Folders(“Input")

Page 42: 0_VBA_4Slides

Liệt kê tất cả các FolderSub demo()

Dim ns As NameSpaceDim folder As MAPIFolderDim subfolder As MAPIFolder

' Dat namespace lam viecSet ns = ThisOutlookSession.Session

folder ns.FoldersFor Each folder In ns.FoldersMsgBox "TM cha: " & folder.NameIf folder.Folders.Count > 1 Then

For Each subfolder In folder.FoldersMsgBox subfolder.Name

Next 'subfolderEnd If

Next 'folder

Set ns = NothingEnd Sub

Làm việc với Email - MailItem

• Khai báo: Dim msg As MailItem• Các thuộc tính: (msg.Tên_thuộc_tính)

– BCC, CC: Địa chỉ BCC, CC– Body, BodyFormat: Nội dung thư– HTMLBody: Nội dung thư dạng HTML

Chuyên đề VBA – HIENLTH 166166

– HTMLBody: Nội dung thư dạng HTML– Recipients: Người nhận– SenderName: Người gửi– Subject: Chủ đề thư– To: Tên người nhận– UnRead: Đã đọc chưa?– SenderEmailAddress: Email người gửi

Mail Items

• Các phương thức:– Close– Copy, Move, Delete– Save– Print Out

Chuyên đề VBA – HIENLTH 167167

– Print Out– Send– Forward, Reply, ReplyAll

Gửi email đơn giản

Sub Send_First_Email() Dim mi As MailItemSet mi = Application.CreateItem(olMailItem)

mi.ToTo = "[email protected]"

Chuyên đề VBA – HIENLTH 168168

mi.ToTo = "[email protected]"mi.SubjectSubject = "Test email"mi.BodyBody = "test"

mi.SendSendEnd Sub

Page 43: 0_VBA_4Slides

Ví dụ: Tạo email trả lời tự độngSub autoreply_Thanks()

Dim ns As NameSpaceDim oInbox As MAPIFolderDim msg As MailItem

'Tao doi tuong InboxSet ns = ThisOutlookSession.SessionSet oInbox = ns.GetDefaultFolder(olFolderInbox)

'Duyet các chua doc trong inboxFor Each msg In oInbox.Items

Chuyên đề VBA – HIENLTH 169169

For Each msg In oInbox.ItemsWith msg

If .UnRead ThenWith .Reply

.Subject = "THANKS FOR EMAIL"

.Body = "Thanks for email!!! Good luck!"

.SendEnd With

End IfEnd WithNext msg

End Sub

Chọn email người nhận

• mi.To: Thêm 01 người nhận• mi.Recipients.Add:Thêm được nhiều

người nhận

Chuyên đề VBA – HIENLTH 170170

Attachment

• mi.Attachments.Add• mi.Attachments.FileName• mi.Attachments.Delete• mi.Attachments.SaveAs (Path)

Chuyên đề VBA – HIENLTH 171171

• mi.Attachments.SaveAs (Path)

Sử dụng Email ở các ứng dụng khác

• (Alt + F11) Tools / References…– Microsoft Outlook 11.0 Object Library

Chuyên đề VBA – HIENLTH 172172

Page 44: 0_VBA_4Slides

Khai báo sử dụng

Dim ol As Outlook.ApplicationSet ol = CreateObject("Outlook.Application")Dim ns As NameSpaceDim folder As MAPIFolder‘Thiết lập kết nối

Chuyên đề VBA – HIENLTH 173173

‘Thiết lập kết nốiSet ns = ol.GetNamespace("MAPI")ns.Logon

‘Thực hiện các công việc tương tự Outlook

Ví dụ gửi mail ở ExcelPublic Function SendEMail(Recipient As String, Subj As String, Body As String)

Dim App As ObjectDim Mail As Object

Set App = CreateObject("Outlook.Application")Set Mail = App.CreateItem(0)

With Mail.Subject = Subj ‘Tiêu đề thư

Chuyên đề VBA – HIENLTH 174174

.Subject = Subj ‘Tiêu đề thư

.Recipients.Add (Recipient) ‘Email người nhận

.Body = Body ‘Nội dung thưEnd WithMail.Send

Set Mail = NothingSet App = Nothing

End Function

Câu hỏi và thảo luận

Chúc các bạn hoàn thành tốt bài tập và ứng dụng vào công việc thực tế!

Chuyên đề VBA – HIENLTH 175175