Tải bản đầy đủ (.pdf) (21 trang)

Macro Excel-Phần 2 pptx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.13 MB, 21 trang )

1 of 21 7/20/2007 12:01 PM
#11

Trang chủ Nội Quy Ghi Danh Thành Viên Thư viện Bài Trong Ngày
Tìm Kiếm

Giải Pháp Excel > Góc học tập > Học tập Online
Kiến thức cơ bản về Visual Basic for Applications (VBA)
Ký danh
Ghi Nhớ?
Mật mã
Ðăng Nhập
Trang 2/4 <12 34>
Ðiều Chỉnh Kiếm Trong Bài
04-12-06, 12:05 PM
PhanTuHuong
6th Excel Member

Tham gia ngày: 06 2006
Nơi Cư Ngụ: Hà Nội
Bài gởi: 1,060
Thanks: 86
Thanked 366 Times in 204 Posts
7.2. Sử dụng VBAProject
Trong menu Tools, chọn VBAProject Properties, cửa sổ VBAProject hiện ra như hình 31.
• VBProject: Để nhận dạng dự án của bạn trong Window Registry (khai báo trong Window) và trong
Object Browser. Điều quan trọng là nó có tên duy nhất.
• Project Description: Mô tả tên của dự án của bạn trong Type Library. Thư viện Type Library chứa toàn
bộ những mô tả về đối tượng và giao diện của dự án của bạn.
Hình 31: Sử dụng VBAProject Properties
Mời tài trợ cho giaiphapexcel.com, Nội quy , Sử dụng diễn đàn: Tìm tài liệu , Post bài , Xem


Ký danh
2 of 21 7/20/2007 12:01 PM
Hình 32: Dự án Su_dung_VBA trong <All Librairies> và bảo vệ code trong Protection
Có những dự án (project) của bạn lập ra mà không muốn người khác xem code, bạn có thể khoá lại. Để
thực hiện công việc này, trong tab Protection bạn lựa chọn như sau:
• Lock project: Khoá code trong module, không cho nhìn thấy và không cho sửa chữa. Bạn phải chọn
mục Lock project for viewing.
• Password to view project properties: Bạn phải gõ nội dung mã khoá trong hộp Password, nội dung
mã khoá biến thành dấu sao *. Sau đó, bạn phải xác nhận nội dung mã khoá trong Confirm password
bằng cách gõ lại nội dung mã khoá vừa vào. Nếu bạn gõ không
đúng nội dung, VBA sẽ báo lỗi và bạn phải
gõ lại cho đúng. Số ký tự tối đa là 24 ký tự, có thể là số, chữ và các ký tự đặc biệt.
Sau đó, mỗi khi mở file trên, để có thể xem được code, bạn vào menu Tools/Macro, chọn Visual Basic
Editer (hoặc ấn Alt + F11). Cửa sổ Microsoft Visual Basic hiện ra, tuy nhiên toàn bộ nội dung code đều
không hiện ra (hình vẽ 33). Để xem được nội dung code, bạn nháy kép vào Su_dung_VBA Project, cửa sổ
Su_dung_VBA Password hiện ra. Bạn phải khai báo đúng Password thì nội dung code mớ
i hiện ra.
3 of 21 7/20/2007 12:01 PM
#12
Hình 33: Hộp thoại hỏi mã khoá khi bạn mở Project bị khoá.
Ghi chú: Lưu ý khi sử dụng mã khoá, nếu bạn quên thì sẽ không thể mở được project. Vì vậy, bạn phải
nhớ nội dung mã khoá và nên chọn nội dung nào dễ nhớ. Nếu muốn đổi mã khoá thì bạn vào cửa sổ
Password để thay đổi.
thay đổi nội dung bởi: PhanTuHuong, 04-12-06 lúc 12:11 PM.
04-12-06, 02:57 PM
PhanTuHuong

6th Excel Member

Tham gia ngày: 06 2006

Nơi Cư Ngụ: Hà Nội
Bài gởi: 1,060
Thanks: 86
Thanked 366 Times in 204 Posts
7.3. Sử dụng chức năng Security
Mấy năm gần đây, do virus macro phát triển nên Microsoft đã bổ sung thêm chế độ an toàn trong các ứng
dụng. Chức năng Security điều khiển sự làm việc của macro, tức là có thể cho hoạt động hoặc không.
1. Bạn vào menu Tools/Macro và chọn Security (hình 34), cửa sổ Security hiện ra.
2. Trong Security, tại tab Security Level có 4 trường hợp chọn như sau:
- Very High: Đặt chế độ an toàn rất cao, các macro không thể chạy được, chỉ trừ macro củ
a Office.
- High: Chỉ những macro được xác nhận mới có thể chạy, các macro khác cũng bị vô hiệu hóa. Để có
macro được xác nhận, bạn phải đăng ký trong menu Tools\Option\Securitry\More Macro\Trusted
Publisher.
- Medium: Đặt chế độ an toàn trung bình. Khi chọn trường hợp này, nếu bạn mở file có chứa macro thì nó
sẽ cảnh báo như hình 35. Bạn có thể lựa chọn Enable Macros để cho macro hoạt động hoặc Disable
Macros để macro không hoạt động. Trong trường hợp file của bạn không sử dụng macro (thủ t
ục hay hàm
tự tạo) mà khi mở Excel cảnh báo như hình 31 thì file của bạn bị nhiễm virus macro.
- Low: Không đặt chế độ an toàn, tức là Excel không cảnh báo bất cứ vấn đề gì cả.
3. Như vậy, khi bạn sử dụng VBA thì nên đặt Security Level ở mức độ Medium hoặc Low. Khi đó các thủ
tục, hoặc hàm mới hoạt động được.
4 of 21 7/20/2007 12:01 PM
#13
Hình 34: Vào menu Security và cửa sổ Security
Hình 35: Cảnh báo macro chứa trong file
thay đổi nội dung bởi: PhanTuHuong, 04-12-06 lúc 03:07 PM.
04-12-06, 03:14 PM
PhanTuHuong
6th Excel Member


Tham gia ngày: 06 2006
Nơi Cư Ngụ: Hà Nội
Bài gởi: 1,060
Thanks: 86
Thanked 366 Times in 204 Posts
8. Viết macro
Khi bạn tiến hành ghi (record) macro, Excel sẽ tự động tạo module và bổ sung nó vào trong workbook và
viết lại những hành động bạn đã ghi thuộc về module đó.
Khi bạn muốn viết mã (code) trong workbook, bạn có thể bổ sung module trong workbook đó. Sự ghép
nối cho phát triển macro được gọi là Visual Basic Integrated Development Evironment (IDE). Macro có
trong module được hiện ra trong IDE thay thế cho bảng tính trong workbook (như Excel đời trước 97).
8.1. Viết macro
Trước tiên chuyển sang workbook mới (nhưng cho phép workbook cũ đó vẫn mở) như sau:
5 of 21 7/20/2007 12:01 PM
1. Tiếp theo bấm chuột vào nút New trong thanh công cụ (toolbar), hoặc vào menu File rồi chọn New.
2. Bấm chuột phải tại tên của Sheet1 và chọn Rename trong menu tắt.
3. Gõ nội dung Text rồi ấn Enter.
Viết macro:
1. Từ menu Tools/Macros bạn chọn Visual Basic Editor.
2. Trong cửa sổ Microsoft Visual Basic bạn vào menu Insert và chọn Module (hình 36).
3. Nếu cần, bạn có thể thay đổi tên của module theo ý muốn. Trong cửa sổ Properties, bên cạnh (Name)
bạn chọn Module1 và sửa thành Chuongtrinh.
4. Bấm vào vùng trống của cửa sổ Chuongtrinh (phần code).
5. Gõ Sub MyFirst rồi bấ
m Enter. Khi đó Excel sẽ tự động điền () và End Sub, thể hiện như hình 36.
6. Gõ các lệnh từng bước một theo sự mô tả ở dưới. Bạn có thể có được những giúp đỡ trong Sub
Address_abs() tại mục 4 và hình 13.
Trước đó, macro của bạn chứa các lệnh đơn giản.
- Bước 1: Chọn sheet có tên Text (dùng Sheets(“Text”).Select)

- Bước 2: Gõ đoạn I can write macros! trong ô B2 trong sheet đó.
- Bước 3: Bôi đậm chữ.
Cuối cùng, bạn kiểm tra (test) lại macro Text:
1. Quay tr
ở về sheet Text.
2. Từ menu Tools/Macros chọn Macros.
3. Trong cửa sổ Macros, bạn chọn macro có tên là MyFirst và chọn Run.
Mọi việc sẽ tốt đẹp, đoạn chữ đậm I can write macros! sẽ được nhập vào ô B2.
Khi code bị lỗi thì sẽ có bảng thông báo lỗi, ví dụ như hình 37.
Hình 36: Tạo Module và Sub trong workbook
6 of 21 7/20/2007 12:01 PM
#14
Hình 37: Lỗi gặp phải trong việc xây dựng macro
Hình 38: Sửa lỗi gặp phải khi viết code
Khi gặp lỗi, bạn tiến hành theo các bước sau đây:
1. Bấm vào nút Debug và tìm kiếm lỗi để sửa lại. Lỗi của câu lệnh đầu tiên sẽ được bôi nền màu vàng
(hình 38).
2. Sửa những câu lệnh sai trong phần được bôi vàng đó.
3. Mũi tên vàng ở lề sẽ cho biết rằng macro đang ở chế độ dừng (break mode).
4. Ngoài ra bạn có thể bấm vào Run, sau đó chọn Reset để xác lậ
p lại (hình 38) hoặc chọn Design Mode
để xác lập chế độ thiết kế. Còn nếu muốn macro chạy tiếp thì chọn Continue (hoặc ấn phím F5).
5. Quay trở về sheet Text và xem macro làm việc có chính xác không.
05-12-06, 12:35 PM
PhanTuHuong
6th Excel Member

Tham gia ngày: 06 2006
Nơi Cư Ngụ: Hà Nội
Bài gởi: 1,060

Thanks: 86
Thanked 366 Times in 204 Posts
7 of 21 7/20/2007 12:01 PM
#15
8.2. Sửa chữa lỗi
Khi bạn gõ một dòng code trong macro và gõ Enter, Excel sẽ kiểm tra dòng đó. Nếu nó tìm được số hạng
mà hiểu được, ví dụ như range, thì sẽ trở thành Range (chữ r tự động chuyển thành chữ hoa R ở đầu).
Nếu code đó thiếu hoặc tìm ra lỗi, Excel sẽ biến nội dung đó thành màu đỏ và hiện ra bảng thông báo lỗi
(hình 39). Có nhiều loại lỗi khác nhau, tuỳ vào lỗi cụ thể mà có từng kiểu nội dung b
ảng thông báo.

Hình 39: Báo lỗi code
Nếu bạn muốn biết thêm thông tin về lỗi đó thì bấm vào nút Help. Để sửa chữa lỗi đó, bạn bấm OK và sửa
nội dung dòng có màu đỏ cho đúng.
Có những trường hợp gặp phải những lỗi mà không được thông báo cho đến khi Visual Basic biên dịch nó
trước khi chạy. Trường hợp mà bạn gặp đó là lỗi compile-time. Visual Basic sẽ cho biết vị trí của lỗi đó và
sẽ gửi cho bạn thông báo v
ề lỗi đó.
Còn các lỗi khác chỉ xuất hiện khi macro chạy thật sự. Đó được gọi là lỗi run-time. Để sửa chữa lỗi này thì
bạn bấm vào Goto rồi sửa đoạn code đó.
Một số “lỗi” gặp phải không hẳn là lỗi, nó chỉ xuất hiện khi macro chạy. Ví dụ như chia một số cho không
(zero) có thể xảy ra ngoài ý muốn. Dựa vào hoàn cảnh đó mà bạn có thể sử
dụng câu lệnh On Error để
“bẫy lỗi” (xem ở mục 13).
05-12-06, 12:46 PM
PhanTuHuong
6th Excel Member

Tham gia ngày: 06 2006
Nơi Cư Ngụ: Hà Nội

Bài gởi: 1,060
Thanks: 86
Thanked 366 Times in 204 Posts
9. Tham chiếu đến ô và vùng
Bạn có thể sử dụng macro để tham chiếu đến các ô hoặc vùng trong worksheet. Nếu bạn muốn gán dữ
liệu vào worksheet, bạn sẽ phải sử dụng đến đối tượng Range. Đối tượng Range được sử dụng vào loại
nhiều nhất trong Excel để tham chiếu đến ô riêng lẻ (a cell) hoặc vùng (range). Có vài cách cho giá trị đối
tượng Range đã được mô tả phía dưới đây.
9.1. Tham chiếu kiểu A1
8 of 21 7/20/2007 12:01 PM
Dưới đây là bảng ví dụ các dạng tham chiếu đến ô, vùng của ô theo kiểu A1 khi sử dụng phương thức
Range.(ĐỀ CẬP ĐẾN THAY BẰNG THAM CHIẾU ĐẾN)
Ví dụ 1:
Trích:
Range(“A1:A3”).Select
thì vùng A1:A3 sẽ được chọn (bôi đen)
Ví dụ 2:
Với workbook có tên Popupmenu, trong worksheet Sheet1, bạn gán nội dung Bo mon DCCT vào ô B3. Sau
đó cho nội dung chữ đó đậm, nghiêng, màu đỏ và nền màu vàng.
Code:
Hướng dẫn chọn vùng tắt:
Bạn có thể dùng ngoặc vuông [ ] để chọn vùng ô thay vì (). So sánh với ví dụ như sau:
Trích:
[A1:A3].Select là cách chọn vùng giống như Range(“A1:A3”).Select
thay đổi nội dung bởi: PhanTuHuong, 05-12-06 lúc 12:49 PM.
The Following User Says Thank You to PhanTuHuong For This Useful Post:
Sub Thunghiem()
Workbook(“Popupmenu”).Sheets(“Sheet1”).Range("B3").Select
ActiveCell.FormulaR1C1 = "Bo mon DCCT"
Selection.Font.Bold = True

Selection.Font.Italic = True
Selection.Font.ColorIndex = 3
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
Range("B4").Select
End Sub
9 of 21 7/20/2007 12:01 PM
#16
MrHieu
07-12-06, 10:13 PM
PhanTuHuong
6th Excel Member

Tham gia ngày: 06 2006
Nơi Cư Ngụ: Hà Nội
Bài gởi: 1,060
Thanks: 86
Thanked 366 Times in 204 Posts
9.2. Số chỉ mục (Index numbers)
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 mà 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ụ 1:
Cells(4,1) trả về ô A4
Cells() trả về toàn bộ ô trong sheet
Ví dụ 2:
Trích:
Worksheets(“Sheet2”).Cells(3,2).Value = 2000

trả về số 2000 trong ô B3 tại Sheet2, trong workbook hiện hành.
Ghi chú: Thuộc tính Cells được ứng dụng nhiều khi viết các vòng lặp giữa các ô.
9.3. Số hàng và số cột (Rows and Columns)
Đây là một cặp thuộc tính được gọi là Rows và Columns, chúng giúp bạn có thể làm việc với toàn bộ dòng
hoặc cột.
Code:
Ví dụ:
Trích:
Worksheets(“Week4”).Rows(2).Font.Bold = True
cho kết quả là toàn bộ hàng 2 trong sheet Week4 chữ đậm của workbook hiện hành.
Ghi chú: Bạn có thể thực hiện đối với nhiều hàng và cột khi sử dụng phương thức Union.
Ví dụ về sự hợp nhất giữa hai vùng Range1 và Range2 khi sử dụng phương thức Union được điền đầy bởi
công thức =RAND()
Trích:
Tham chiếu Đề cập đến
__________________________________________________
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
10 of 21 7/20/2007 12:01 PM
#17
Worksheets("Sheet1").Activate
Set Vung = Application.Union(Range("Range1"), Range("Range2"))
Vung.Formula = "=RAND()"
07-12-06, 10:24 PM
PhanTuHuong
6th Excel Member


Tham gia ngày: 06 2006
Nơi Cư Ngụ: Hà Nội
Bài gởi: 1,060
Thanks: 86
Thanked 366 Times in 204 Posts
9.4. Đặt tên cho vùng (Named ranges)
Với một số trường hợp bạn phân chia vùng các ô ra với tên xác định để dễ truy cập và nghiên cứu. Công
việc này gần giống như khi bạn sử dụng chức năng đặt tên cho vùng ô trong Excel (xem trong menu
Insert/Name/Define ). Khi bạn chọn tên những vùng đó thì Excel sẽ truy cập đến vùng mà bạn lựa chọn.
Bạn phải đặt tên những vùng đó trước khi viết macro hay dùng chính macro để tạo tên của vùng.
9.4.1. Tên được tạo ra ngoài macro
Để đặt tên cho vùng, đầ
u tiên bạn chọn chọn những ô đó bằng cách bôi đen, sau đó bạn bấm vào phần
Name Box (phần góc trên bên trái, cùng hàng với thanh công thức). Sau đó đặt tên của vùng đó rồi Enter.
Giả thiết rằng bạn đặt tên Congty cho các ô C2:C8 trong sheet Danhsach của workbook Quanly (hình 40).
Ví dụ 1: sẽ làm các ô trong vùng C2:C8 đậm lên.
Trích:
Range(“[Quanly.xls]Danhsach!Congty”).Font.Bold = True
Ví dụ 2: Nếu workbook Quanly và worksheet Danhsach đang hiện hành, thì
Trích:
Range(“Congty”).Font.Bold = False
sẽ làm các ô trong vùng C2:C8 mất đậm (chữ bình thường).
11 of 21 7/20/2007 12:01 PM

Hình 40: Tạo tên của vùng
9.4.2. Tên được tạo ra trong macro
Tên vùng có thể được ấn định khi sử dụng macro để lập, ví dụ dưới đây:
Trích:
Workbooks(“Congty.xls”).Names.Add Name:=”Congty”, _
RefersTo:=”=Danhsach!D1:D10”

Range(“Congty”).Font.Italic = True
Kết quả là các ô trong vùng D1:D10 sẽ bị nghiêng.
9.5. Nhiều vùng (Multiple ranges)
Trường hợp này hay được sử dụng để tham chiếu đến nhiều vùng trong macro, có thể xoá sạch nội dung
trong các ô đó.
Trích:
Worksheets(“Bang”).Range(“A1:C3,H4:L8,P14:Z3 4”).ClearContents
sẽ xoá sạch nội dung những ô đã chỉ định trong worksheet Bang.
Còn đối với những tên vùng bạn đặt (như ở trên), có thể thực hiện như sau:
Trích:
Range(“Danhsach1, Danhsach2, Danhsach3”).ClearContents
Ghi chú: Trong macro, các vùng có thể được xác định, đặt tên và được phối hợp khi sử dụng phương thức
Union. Xem mục 9.3.
9.6. Offset cells
12 of 21 7/20/2007 12:01 PM
Thuộc tính Offset thường được sử dụng để tham chiếu đến ô khác mà có quan hệ với ô đang hoạt động.
Công thức dạng tổng quát:
Trích:
Offset(no_rows_down, no_cols_to_right)
Trích:
no_rows_down
là số nguyên và được hiểu là xuống dưới bao nhiêu dòng.
Trích:
no_cols_to_right
là số nguyên và được hiểu chuyển sang phải bao nhiêu cột.
Ví dụ 1:
Như ở hình 41, giả thiết ô B1 là ô hiện hành. Bây giờ bạn dùng Offset để chữ trong ô C2 có màu đỏ, C5
đậm, C8 nghiêng, C9 có nội dung “Xí nghiệp khảo sát địa kỹ thuật”.
Trích:
Sub Offset()

Range("B1").Activate
ActiveCell.Offset(1, 1).Font.ColorIndex = 3
ActiveCell.Offset(4, 1).Font.Bold = True
ActiveCell.Offset(8, 1).Value = "Xí nghiệp khảo sát địa kỹ thuật"
ActiveCell.Offset(8, 1).Font.Size = 12
Range("E9").Activate
ActiveCell.Offset(-1, -2).Font.Italic = True
End Sub
Kết quả thể hiện ở hình 41.
13 of 21 7/20/2007 12:01 PM
#18
Hình 41: Sử dụng Offset để tham chiếu đến các ô
Ghi chú: Khi giá trị no_rows_down hoặc no_cols_to_right có giá trị âm thì sẽ có hướng ngược lại.
9.7. 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. Ví dụ ô tham
chiếu R4C2 sẽ truy cập đến ô B4.
Khi sử dụng kiểu tham chiếu này, mối quan hệ giữa các ô trong tính toán sẽ được thể hiện trong công
thức.
R[m]C[n] sẽ tham chiếu đến (truy cập đế
n) ô có m dòng phía dưới và n cột phía bên phải so với ô hoạt
động (hiện hành). Giá trị m,n có thể là số âm, khi đó hướng sẽ ngược lại, lên trên và sang bên trái.
Ví dụ 1: 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 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.
Từ đó xây dựng macro như sau:
Trích:
Range(“B5”).Select
ActiveCell.FormulaR1C1 = “=Sum(R[-3]C:R[-1]C)”
Ví dụ 2: Nhập vào công thức = F2-F4 trong ô D5.
Nội dung R1C1 trong FormulaR1C1 có thể không cần dùng đến và nếu bạn muốn, 2 dòng trên có thể ghép

thành 1 như sau:
Trích:
Range(“B5”).Formula = “=R[-3]C[2]-R[-1]C[2]”
Trích:
Ví dụ 3:
Thay đổi công thức thành giá trị kết quả.
Ô G6 có công thức là =G5*G4. Ví dụ ô G5 có giá trị là 2, ô G4 có giá trị là 3, như vậy giá trị nhận được
của ô G6 là 6. Ta sẽ thay nội dung hàm thành giá trị là 6.
Trích:
Range(“G6”).Select
ActiveCell.FormulaR1C1 = “=R[-1]C:R[-2]C”
Selection.Copy
Selection.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
Dòng lệnh cuối cùng là lệnh huỷ bỏ chế độ trạng thái Cut/Copy (đường gạch nhấp nháy bao quanh ô đã
chọn).
09-12-06, 01:06 PM
14 of 21 7/20/2007 12:01 PM
PhanTuHuong
6th Excel Member

Tham gia ngày: 06 2006
Nơi Cư Ngụ: Hà Nội
Bài gởi: 1,060
Thanks: 86
Thanked 366 Times in 204 Posts
10. Cấu trúc điều khiển
Một số trường hợp, bạn phải sử dụng macro để kiểm tra những điều kiện đặc biệt trong worksheet và điều
khiển chúng để đáp ứng được yêu cầu đề ra. Với mỗi điều kiện khác nhau thì macro sẽ thực hiện công việc
khác nhau.

Với cấu trúc điều khiển như vậy không thể tự động ghi được, bạn phải viết chúng trong Visual Basic.
10.1. Câu l
ệnh IF
Đây là kiểu đơn giản nhất, mẫu của câu lệnh IF như sau:
Trích:
If <điều kiện> Then <dòng lệnh 1> [Else <dòng lệnh 2>]
Trong chỉ dẫn trên, các thông số trong [ ] là tuỳ chọn, có thể bỏ qua nếu thấy không cần thiết.
Nếu <điều kiện> được toại nguyện (đúng - True) thì <dòng lệnh 1> được thực hiện, còn nếu không được
toại nguyện (sai - False) thì <dòng lệnh 2> được thực hiện.
Thông thường, bạn hay sử dụng câu lệnh If then Else mà không cần phải giới hạn số dòng lệnh. Mẫu
như sau:
Trích:
If <điều kiện1> Then
<Khối lệnh 1 thực hiện>
[ElseIf <điều kiện2>
<Khối lệnh 2 thực hiện>]
[ElseIf <điều kiện3>
<Khối lệnh 3 thực hiện>]
[Else
<Khối lệnh 4 thực hiện>]
End If
Trong mẫu tổng quát ở trên, từ khoá ElseIf và Else là tuỳ chọn (như biểu thị trong dấu ngoặc vuông). Đầu
tiên VB kiểm tra điều kiện thứ nhất, nếu sai thì sẽ chuy
ển sang điều kiện thứ 2, cho đến khi điều kiện
đúng. VB thi hành khối lệnh tương ứng và sau đó, thi hành dòng chương trình ngay sau End If.
Ví dụ:
Macro dưới đây tìm kiếm giá trị tại ô A1 (là điểm trung bình môn học).
Trích:
Nếu 10 > A1 ≥ 8.0 : “Học lực giỏi”;
Nếu 8 > A1 ≥ 6.5 : “Học lực khá”;

Nếu 6.5 > A1 ≥ 5.0 : “Học lực trung bình”;
Nếu 5 > A1 ≥0 : “Học lực kém”.
Ô B2 thể hiện kết quả học lực.
Trích:
Sub Hocluc()
15 of 21 7/20/2007 12:01 PM
Sheets(“Sheet1”).Select
Range(“A1”).Select
If ActiveCell >= 8 Then
Range(“B2”).Value = “Học lực giỏi”
ElseIf ActiveCell >= 6.5 Then
Range(“B2”).Value = “Học lực khá”
ElseIf ActiveCell >= 5 Then
Range(“B2”).Value = “Học lực trung bình”
Else
Range(“B2”).Value = “Học lực kém”
End If
End Sub
Ghi chú: Bạn có thể bỏ qua dòng Range(“A1”).Select và thay bằng If Range(“A1”).Value >= 8 Then.
Ngoài ra, bạn cũng có thể sử dụng If để kết thúc macro, câu lệnh như sau có thể sử dụng để kết thúc
macro.
Trích:
If ActiveCell = “” Then End Sub
(nếu ô hiện hành mà trống thì sẽ kết thúc Sub, không cần phải có End If)
Ví dụ:
Giả sử bạn tìm kiếm giá trị của một ô và bạn muốn kết quả như sau
• Dừng macro khi ô đó trống.
• Nhập giá trị “Tốt” vào ngay ô bên phải ô đó nếu có giá trị lớn hơn 40.
• Nhập giá trị “Kém” vào ngay ô bên phải ô đó nếu có giá trị nhỏ hơn 40.
Trích:

Sub user_If()
If ActiveCell.Value = "" Then Exit Sub
If ActiveCell.Value >= 40 Then
ActiveCell.Offset(0, 1).Value = "Tốt"
Else
ActiveCell.Offset(0, 1).Value = "Xấu"
End If
End Sub
10.2. Sử dụng Select Case
Select Case là một dạng của If Then Else, được sử dụng khi có nhiều điều kiện chọn lọc giá trị. Câu
lệnh như sau:
Trích:
Select Case <biểu thức kiểm tra>
[Case <biểu thức 1>
<khối lệnh 1>]
[Case <biểu thức 2>
<khối lệnh 2>]
[Case <biểu thức 3>
<khối lệnh 3>]

16 of 21 7/20/2007 12:01 PM
#19
[Case Else <biểu thức n>
<khối lệnh n>]
End Select
Mỗi danh sách biểu thức có 1 hay nhiều giá trị. Các giá trị cách nhau bằng dấu phẩy (,). Còn giá trị biến
đổi trong vùng thì bạn sử dụng từ khoá To. Mỗi khối lệnh có thể chứa 0 hay nhiều dòng lệnh. Nếu biểu
thức nào thoả mãn điều kiện thì khối lệnh tương ứng sẽ thực hiện. Case Else không nhất thiết phải có,
dùng trong trường hợp còn lại củ
a các Case trước.

Ví dụ:
Ô B2 chứa giá trị độ sệt của đất, ô C2 sẽ thể hiện trạng thái của nó.
Trích:
Sub Trangthai()
Sheets(“Sheet1”).Select
Doset = Cells(2,2).Value
Select Case Doset
Case 1, 1 to 10
Cells(2,3).Value= “Chảy”
Case 0.75 to 1
Cells(2,3).Value= “Dẻo chảy”
Case 0.5 to 0.75
Cells(2,3).Value= “Dẻo mềm”
Case 0.25 to 0.5
Cells(2,3).Value= “Dẻo cứng”
Case 0 to 0.25
Cells(2,3).Value= “Nửa cứng”
Case < 0
Cells(2,3).Value= “Cứng”
End Select
End Sub
09-12-06, 01:11 PM
PhanTuHuong
6th Excel Member

Tham gia ngày: 06 2006
Nơi Cư Ngụ: Hà Nội
Bài gởi: 1,060
Thanks: 86
Thanked 366 Times in 204 Posts

17 of 21 7/20/2007 12:01 PM
10.3. Xây dựng các điều kiện
Trong nhiều trường hợp, điều kiện lọc dữ liệu đã trở nên khá phức tạp. Nếu chỉ sử dụng If hay Select Case
thì công việc sẽ rất cồng kềnh, rắc rối. Trong hoàn cảnh đó, And và Or giúp bạn thực hiện công việc đó,
giúp chương trình sáng sủa và dễ đọc.
10.3.1. Sử dụng And
Câu lệnh như sau:
Trích:
If <điều kiện 1> And <điều kiện 2> Then
<khối lệnh 1>
Else
<khối lệnh 2>
End If
`
<khối lệnh 1> chỉ thực hiện khi cả hai điều kiện 1 và 2 đều đúng. Chỉ 1 trong 2 điều kiện sai thì <khối
lệnh 2> sẽ thực hiện.
10.3.2. Sử dụng Or
Câu lệnh như sau:
Trích:
If <điều kiện 1> Or <điều kiện 2> Then
<khối lệnh 1>
Else
<khối lệnh 2>
End If
<khối lệnh 1> thực hiện khi một trong hai điều kiện 1 và 2 đúng. Cả 2 điều kiện sai thì <khối lệnh 2> sẽ
thực hiện.
10.3.3. Sử dụng nhiều And và Or
Câu lệnh như dưới đây:
Trích:
If <điều kiện 1> And <điều kiện 2> And <điều kiện 3> Then

<khối lệnh 1>
Else
<khối lệnh 2>
End If
<khối lệnh 1> chỉ thực hiện khi cả ba điều kiện đều đúng. Chỉ 1 trong 3 điều kiện sai thì <khối lệnh 2> sẽ
thực hiện.
Tương tự đối với Or.
Ví dụ:
Bạn có thể xác định tên đất dựa vào hệ số rỗng t
ự nhiên, chỉ số dẻo, độ sệt.
Trích:
18 of 21 7/20/2007 12:01 PM
#20
Sub Ten_dat()
Dim Hsr, Chisodeo, Doset As Single
Hsr = InputBox("Vao gia tri he so rong:")
Chisodeo = InputBox("Vao gia tri chi so deo:")
Doset = InputBox("Vao gia tri do set:")
If Hsr > 1.5 And Chisodeo >= 17 And Doset > 1 Then
MsgBox "Day la dat BUN SET!"
ElseIf Hsr > 1.0 And Chisodeo >= 7 And Doset > 1 Then
MsgBox "Day la dat BUN SET PHA!"
ElseIf Hsr > 0.9 And Chisodeo >= 1 And Doset > 1 Then
MsgBox "Day la dat BUN CAT PHA!"
Else
MsgBox "Chua ro ten dat!!!!"
End If
End Sub
10-12-06, 03:52 PM
PhanTuHuong

6th Excel Member

Tham gia ngày: 06 2006
Nơi Cư Ngụ: Hà Nội
Bài gởi: 1,060
Thanks: 86
Thanked 366 Times in 204 Posts
11. Hộp thoại trong VBA
Hộp thoại (Dialog) là một trong những cách thức để Windows giao tiếp với người sử dụng. Dưới đây là 2
loại hộp thoại mà bạn dễ dàng tạo ra để điều khiển trong suốt quá trình chạy macro (MsgBox và
InputBox).
11.1. Hộp thông báo (Message box)
Câu lệnh MsgBox sẽ cho hiện lên trên màn hình một hộp thông báo, giá trị nhận được là biến số (variable)
trong macro (như hình 18). Sử dụng MsgBox giúp bạn rất hiệu quả trong việc gỡ rối (hoặc tìm chỗ
sai, giá
trị trung gian, ) khi xây dựng chương trình.
Hàm MsgBox ở dạng tổng quát
Trích:
MsgBox (prompt [, buttons] [, title] [, helpfile, context])
Trên màn hình sẽ hiện hộp thông báo và đợi bạn bấm chuột vào nút chọn và trở về giá trị nguyên nào khi
bạn chọn loại nút.
Trích:
prompt là nội dung lời nhắc của hộp thông báo.
buttons là tuỳ chọn loại nút điều khiển (như Yes, No, OK)
title là tuỳ chọn nội dung chữ trên đầu hộp thông báo
helpfile là tuỳ chọn và điều khiển file trợ giúp nào để sử dụng.
context là tuỳ chọn và là số thứ tự tình huống trong helpfile. Nếu helpfile có thì mục context cũng
phải có.
11.1.1. Các loại thông điệp trong buttons
19 of 21 7/20/2007 12:01 PM

11.1.2. Mô tả thông số các nút
11.1.3. Các biểu tượng thông điệp
Ghi chú: Tại mỗi kiểu thông điệp, âm thanh báo khi hiển thị thông điệp đi kèm theo sẽ khác nhau.
11.1.4. Xây dựng tham số cho MsgBox
Để sử dụng tuỳ biến hộp thông báo, bạn phải biết phối hợp các thông số và nút lệnh. Việc sử dụng hộp
MsgBox có ý nghĩa rất quan trọng trong việc điều khiển chương trình. Để hiểu chi tiết, các bạn xem ví dụ
dưới đây.
20 of 21 7/20/2007 12:01 PM
Trích:
Sub Nhangui()
Dim Truonghop As Integer
Truonghop = MsgBox("Ban co muon thoat khoi chuong trinh khong", vbYesNoCancel + vbQuestion
+ vbDefaultButton1,”Chuong trinh tinh lun”)
If Truonghop = vbYes Then
MsgBox "Ban vua chon nut Yes.", vbInformation
ElseIf Truonghop = vbNo Then
MsgBox "Ban vua chon nut No.", vbCritical
ElseIf Truonghop = vbCancel Then
MsgBox "Ban vua bam nut Cancel.", vbExclamation
End If
End Sub
Hình vẽ dưới thể hiện kết quả chạy Sub trên và hộp thông báo khi bạn chọn nút No. Trong Sub trên, bạn
có thể thay
Trích:
ElseIf Truonghop = vbNo Then
bằng
ElseIf Truonghop = 7 Then
Hình 42: Ví dụ về cách tạo MsgBox trong VB và khi chọn nút No
The Following 4 Users Say Thank You to PhanTuHuong For This Useful Post:
elcity, NEO, tanhhm, tokei

Trang 2/4 <12 34>
« Ðề Tài Trước | Ðề Tài Kế »
Ðang đọc: 1 (0 thành viên và 1 khách)
21 of 21 7/20/2007 12:01 PM

Quyền Sử Dụng Ở Diễn Ðàn
Bạn không được quyền gởi bài
Bạn không được quyền gởi trả lời
Bạn không được quyền gởi kèm file
Bạn không được quyền sửa bài
vB code đang Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt
Chuyển đến

Học tập Online

Học tập Online Tiếp Tục
Similar Threads
Ðề tài Người Gởi Chuyên mụcTrả lời Bài mới gởi
Viết phần mềm đánh lô bằng Visual Basic longg75 Chơi Game với Excel 23 Hôm qua 10:58 AM
Lịch sử Visual Basic Secret_grasses Lập Trình với Excel 3 01-09-06 09:58 PM
Một số mẹo hay trong Visual Basic PhanTuHuong Tài Nguyên Mạng 0 22-08-06 03:07 PM
Visual Basic 2005 trên cả tuyệt vời levanduyet Bổ sung kiến thức Visual Basic 9 18-08-06 06:15 PM
Múi giờ GMT +7. Hiện tại là 11:59 AM.
Vacation Vacation
Liên Lạc - Trang chủ - Lưu Trữ - Trở Lên Trên
Số người truy cập:
Powered by: vBulletin Version 3.0.3 Copyright © 2000 - 2007, Jelsoft Enterprises Ltd.

ForumTemplates.com: vBulletin Skins

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×