tên_biến có thể chứa dữ liệu số bất kỳ hay dữ liệu chuỗi có thể chuyển đổi thành số, trong khoảng 0 đến 255.. Hàm này chấp nhận dữ liệu số hay chuỗi có thể chuyển thành số, trong giới hạ
Trang 2Thông tin giảng viên
•• LƯƠNG TRẦN HY HIẾNLƯƠNG TRẦN HY HIẾN
Trang 3Thông tin môn học
• VBA for WORD
• VBA for EXCEL
• VBA for PowerPoint
• VBA for Access
• VBA for Outlook
Trang 4Mụ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
• Viết các Macro từ đơn giản đến phức tạp
Trang 5Đề cương môn học: VBA
• Chương 1: Giới thiệu tổng quan VBA
• Chương 5: VBA for Outlook
• Chương 5: VBA for Outlook
• Chương 6: Bài tập
Trang 6Đá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ốngnhau 0 điểm
• Nhóm sinh viên(3-5 SV) chọn số đề tài saocho tổng điểm là 10, một bài không quá 4
cho tổng điểm là 10, một bài không quá 4nhóm chọn
• Nộp qua email: hyhien@gmail.com trướcngày 55//99//20102010
• Tiêu đề thư: VBA_DongNai_STTNhom
Trang 7Tà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.VBA Absolute.Beginners.Guide.to.VBA chm
–– Excel VBA Macro Programming Excel VBA Macro Programming.chm
–– Writing Excel Macros With VBA 2nd Ed Writing Excel Macros With VBA 2nd Ed.pdf
–– Access VBA Programming Access VBA Programming chm
• Tham khảo tài liệu trên Internet
• Các ví dụ mẫu
Trang 8Tài liệu tham khảo - URL
Trang 9Câu hỏi và thảo luận
Trang 11Chươ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ử
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
Trang 12Để VBA (Macro) hoạt động
• WORD, EXCEL, PowerPoint, Outlook,
Access 2003: Tool/Macro/Security
Trang 13Để VBA (Macro) hoạt động
• Security Level: Chọn Medium hay Low
•Medium: H ỏ i
•Low: Luôn ch ạ y
Trang 14Để VBA (Macro) hoạt động
• WORD, EXCEL, PowerPoint, Outlook, Access 2007: Show Developer tab in Ribbon
Trang 15Sử dụng VBA
• Mở cửa sổ soạn thảo: Alt + F11
Trang 16Sử dụng Macro – Thu Macro tự động
• Tools / Macro / Record New Macro
Trang 17Sử dụng Macro – Thu Macro tự động
Trang 18Sử dụng VBA
• Alt + F8: Tạo/Chạy/Sửa/Xóa Macro
Trang 19Sử dụng Macro – Thực thi
• Alt + F8
• Chọn Macro Run
Trang 20Sử dụng Macro – Thực thi
• Alt + F8
• Chọn Macro Edit
Trang 21Demo 01 VBA Example
Trang 22Hiển thị câu thông báo
MsgBox “Chuỗi thông báo”, biểu tượng + nút nhấn,
Trang 23Các loại biểu tượng
Trang 24Các loại nút nhấn
Trang 25– 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
– 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)
Trang 26Cá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ờ
• 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
Trang 27Các kiểu dữ liệu VBA
Trang 28Khai báo biến, hằng
Khai báo biến:
• Public/Dim/Private <tên biến> [as
Trang 29Khai 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 , , ! , # , $ , % , & , – Không chứa khoảng trắng , , ! , # , $ , % , & ,
@
Trang 30Khai báo tường minh trong VBA
Trang 31• Khai báo biến trong phần
Byte Số nguyên 0-255 Integer Số nguyên Long Số nguyên dài Single Số thực
• Khai báo biến trong phần
viế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 Số thực Boolean -1/0 - True/False
String Chuỗi
Trang 32Khai báo biến, hằng
Trang 33Cá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
trình
• VBA cung cấp các hàm chuyển đổi kiểu khá tiện
Trang 34CBool Chuyển 0 thành false, các trị khác thành true
CByte
Chuyể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ỳ hay
dữ liệu chuỗi có thể chuyển đổi thành số, trong khoảng 0 đến 255 Nếu tên_biến ngoài khoảng đó, VBA báo lổi Overflow Nếu tên_biến là dấu chấm động, nó được
làm tròn thành số nguyên gần nhất trước khi chuyển đổi kiểu.
CDec
Chuyển đổi tên_biến thành kiểu phụ Decimal Hàm này chấp nhận dữ liệu số hay
chuỗi có thể chuyển thành số, trong giới hạn của kiểu Decimal Đây là hàm cung cấp phươ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
CDate
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
và 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 Anh dd/mm/yy và dùng hàm Cdate thì ngày được sẽ chuyễn đổi sang dạng Mỹ.
CCur
Chuyển đổi tên_biến thành kiểu Currency CCur chấp nhận dữ liệu số hay chuỗi bất
kỳ 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àng ngàn theo thông tin địa phương của máy tính Chỉ dùng cho VBA.
Trang 35Chuyể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.
CSng Chuyển đổi tên_biến thành kiểu Single.
CStr Chuyển đổi tên_biến thành kiểu String CStr chấp
nhận kiểu dữ liệu bất kỳ.
CVar Chuyển đổi tên_biến thành kiểu Variant CVar chấp
nhận kiểu dữ liệu bất kỳ.
Trang 36Hàm chuyển đổi chuỗi thành số…:Val
• Val là một hàm chuyển đổi kiểu “dễ
Trang 40Cá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) e num
Log (num) Lg(num)
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
Trang 41Cá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
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
Trang 42Cá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
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
Trang 43Cá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
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 VBLib (tên, ví d (tên, ví dụ ụ) )
Trang 44Các cấu trúc điều khiển
Trang 45Các cấu trúc điều khiển
Trang 46Dim i, n as integer
Dim S as long
‘Nhập số nguyên dương n
S = 0 WHILE i<=n
S = S + i
i = i + 1 WEND
‘Xuat tong cua n so nguyen duong dau tien: S
End Sub
Trang 47Cấu trúc lặp
• Cấu trúc DO WHILE … LOOP
DO WHILE <Biểu thức điều kiện>
‘Các câu lệnh muốn thực thi khi BTDK còn đúng
Trang 48Cấu trúc lặp
• Cấu trúc DO … LOOP WHILE
DO
‘Thực hiện lệnh LOOP WHILE <biểu thức điều kiện>
Trang 49Cấu trúc lặp
• Cấu trúc DO … LOOP UNTIL
DO
‘Thực hiện lệnh LOOP UNTIL <biểu thức điều kiện>
Trang 51Sub ConvertToProper()’Excel VBA
Sub ConvertToProper()’Excel VBA
Dim cellObject As Range
For Each cellObject In Selection
cellObject.Formula = WorksheetFunction(Proper(cellObject.Formula))
Next
Trang 54Xá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ảng
y = LBound (tên_mảng) ‘Cận dưới của mảng
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
Trang 55Mả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 Single
Dim arr2( 0 to 1 , 1 to 4 ) as Single
Dim arr2( 0 to 1 , 1 to 4 ) as Single
Trang 56Làm việc với các đối tượng
• Tham chiếu đến thuộc tính:
• Xác lập giá trị cho 1 thuộc tính:
Object.PropertyName = Value
VD: ActiveCell.Font.Size = 16
• Làm việc với các phương thức:
Object.MethodName
Trang 57Làm quen với các đối tượng
• Có thể gán đối tượng cho 01 biến:
Dim sht As Worksheet
Set 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
WITH đối tượng
.Thuộc tính 1 Thuộc tính 2
Trang 58Đối tượng Application
Trang 59Đối tượng Application
Trang 60Đối tượng Window
Trang 61Làm quen UserForm
• Chuột phải Project (tên_file)Insert UserForm
Trang 62Làm quen UserForm
• Giao diện Form:
• Thanh ToolBox:
Trang 63Làm quen User Form
• Nên đặt lại tên cho các đối tượng
Trang 64Làm quen Module
• Chuột phải Project (tên_file)Insert Module
Trang 65Làm quen với Module
• Viết code: Hàm (Sub)
Trang 67Làm việc với Document
Documents.Open(FileName)
VD: Documents.Open “D:\bangdiem.doc”
Trang 68Là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ế_độ
• Đóng: Tài_liệu.Close chế_độ
– wdSaveChanges: Lưu tất cả thay đổi
– wdDoNotSaveChanges: Không lưu
– wdPromptToSaveChanges: Hỏi???
Trang 69Làm việc với Document
Trang 70Là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
• Tài_liệu.Undo (times)
• Tài_liệu.Redo (times)
Trang 71Là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 1
ActiveDocument Paragraphs(1) Range.Italic = True
• Thuộc tính của Range:
– Bold, Italic, Font
– Bold, Italic, Font
– Copy, Cut, Paste, Delete
– InsertAfter (text)
– InsertBefore (text)
– InsertParagraph
– InsertParagraphAfter
Trang 72Range – Vùng chọn
InsertAfter (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 break
Trang 73Range – Vùng chọn
InsertParagraphBefore Chèn paragraph vào đầu vùng chọn
StartOf (Unit, Extend) Mở rộng đầu vùng chọn đến đầu unit
MoveLeft (Unit, Count, Extend) Mở rộng vùng chọn/range sang trái
Count > 0, Extend = wdExtend
MoveRight (Unit, Count, Extend) Mở rộng vùng chọn/range sang phải
Count > 0, Extend = wdExtend
MoveUp (Unit, Count, Extend) Mở rộng vùng chọn/range lên trên
Count > 0, Extend = wdExtend
Trang 74Range – Vùng chọn
HomeKey (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ọn
Count > 0 hay Count < 0
EndKey (Unit, Extend) Mở rộng vùng chọn về cuối Unit
Extend = wdExtend Extend = wdExtend
MoveEnd (Unit, Count) Thu hẹp/Mở rộng vùng chọn
Count > 0 hay Count < 0
MoveStartUntil (Cset, Count) Thu hẹp/Mở rộng vùng chọn đến khi gặp Cset
Count > 0 hay wdFordward, wdBackward
MoveEndUntil (Cset, Count) Thu hẹp/Mở rộng vùng chọn đến khi gặp Cset
Trang 75Range – Vùng chọn
MoveStartWhile (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
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
MoveUntil (Cset, Count) Thu hẹp/Mở rộng vùng chọn đến khi gặp Cset
Count > 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,
Trang 76Expand (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
Trang 77Là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ụ:
ActiveDocument.Paragraphs(1).Range Select
Trang 78Là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
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 )
Trang 79Selection – Con trỏ
TypeText (Text) Nhập text Selection.TypeText
(“Hello”) TypeParagraph Nhập dấu paragraph Selection.TypeParagraph TypeBackSpace Xóa lui Selection.TypeBackSpace StartOf (Unit) Di chuyển con trỏ đến đầu unit gần
Trang 80Selection – 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
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
Trang 81Làm việc với đối tượng Selection
Trang 82Selection – Soạn thảo
Copy CopyFormat Copy format vủa ký tự đầu (/và của dấu paragraph) CopyAsPicture Copy vùng chọn thành ảnh
Cut Delete Paste PasteFormat Áp dụng format cho vùng chọn
Font
Trang 83Character, 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:
• Đế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:
Trang 84Đối tượng Paragraph
Trang 85VBA 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:
• 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
Trang 86VBA for Word Example
Chép nội dung file sẵn có sang file mới:
Public Sub AutoExec()
Dim MsgBoxResult
Dim SaveFileName
MsgBoxResult = MsgBox ( "Click Yes to load the default
letter" & vbCrLf & "Click No to load default Word.",
vbYesNo , "Document Environment")
vbYesNo , "Document Environment")
If MsgBoxResult = vbYes Then
Documents.Open ("THUCHANH_VBA.doc") SaveFileName = InputBox( "Enter a name for the letter",
"Letter Name ?")
If SaveFileName <> "" Then
ActiveDocument SaveAs (SaveFileName) End If