1 of 9 7/20/2007 12:02 PM #21 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 3/4 <123 4> Ðiều Chỉnh Kiếm Trong Bài 10-12-06, 04: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 11.2. Phương thức InputBox (Inputbox Method) Nhằm thể hiện hộp thoại để người sử dụng nhập dữ liệu vào. Khi sử dụng phương thức này, một hộp thoại sẽ cho hiện ra để bạn vào dữ liệu, chờ cho người dùng nhập dữ liệu vào hoặc là bấm vào nút OK hoặc Cancel, giá trị nhận được được coi là chuỗi (string). Đây là một cách để vào giá trị đơn lẻ hoặc đị a chỉ của các ô trong quá trình chạy macro. Bạn không thể gán được lệnh khi chọn nút OK hay Cancel như trong MsgBox. Đó chính là hạn chế của hàm này nên ít được ứng dụng khi đầu vào nhiều số liệu. Phương thức InputBox ở dạng tổng quát Trích: expression.InputBox (prompt [, title] [, default], [, left], [, top] [helpfile, context] [, type]) Expression: một biểu thức trả về đối tượng Application. Trong đó: Trích: prompt là nội dung lời nhắc của hộp vào dữ liệu. title là tuỳ chọn nội dung chữ trên đầu hộp vào dữ liệu. left là tuỳ chọn khoảng cách từ góc bên trái hộp thoại đến góc bên trái màn hình (mặc định là hộp thoại nằm giữa màn hình). Đơn vị tính là là điểm (point), một điểm bằng 1/72 inch hay khoảng 1/28 cm. Chức năng này ít sử dụng. top là tuỳ chọn khoảng cách từ đỉnh hộp thoạ i đến đỉnh màn hình (mặc định là hộp thoại nằm giữa màn hình). Đơn vị tính là là điểm. 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ó. type là tuỳ chọn biến số đầu vào. Trong trường hợp bỏ qua, giá trị đầu vào coi như là chuỗi. 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 , X e Ký danh 2 of 9 7/20/2007 12:02 PM Ví dụ: Trích: Sub VD_Input() Dim Dangmang Dim Cot, Hang As Integer Set Mang = Application.InputBox("Vao mang:", "Linh tinh", Type:=8) Cot = Dangmang.Columns.Count ‘ Tính số cột chọn Hàng = Dangmang.Rows.Count ‘ Tính số hàng chọn MsgBox "So cot la: " & Cot MsgBox "So hang la: " & Hang MsgBox "Dia chi o dau la: " & Dangmang.Cells(1, 1).Address MsgBox "Dia chi o cuoi la: " & Dangmang.Cells(Cot, Hang).Address ‘ Address là thông tin địa chỉ ô End Sub Kết quả vào dữ liệu là mảng dưới đây. Ngoài ra bạn còn thu được một số thông tin về mảng đó như số hàng, số cột, địa chỉ ô, Hình 43: Ví dụ về sử dụng InputBox thay đổi nội dung bởi: levanduyet, 25-12-06 lúc 08:54 PM. 3 of 9 7/20/2007 12:02 PM #22 The Following 2 Users Say Thank You to PhanTuHuong For This Useful Post: MrHieu, NEO 19-12-06, 08:02 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 12. Hành động lặp (Loop) Hành động lặp cho phép bạn thực hiện một đoạn chương trình nhiều lần. Chức năng này hết sức có ý nghĩa khi bạn xử lý các đối tượng là mảng. Bạn có thể điều khiển hành động lặp theo quy định đặt ra. Có các kiểu hành động lặp như sau: 12.1. Do Loop Thực hiện một khối lệnh với số lần lặp xác định. Trong đó, một biểu thức điều kiện dùng so sánh để quyết định vòng lặp tiếp tục hay không. Điều kiện phải quy về False (0) hoặc True (khác 0). Mẫu tổng quát: Trích: Do <khối lệnh> Loop Ví dụ: Trích: Sub VD_Do() m = 4 ‘ m nhận giá trị ban đầu là 4 Do ‘ bắt đầu vòng lặp m = m + 1 ‘ đặt giá trị m tăng (+ 1) MsgBox m ‘ hộp thông báo giá trị m If m > 10 Then Exit Do ‘ nếu m > 10 thì sẽ thoát khỏi Do Loop ‘ Tiếp tục lặp End Sub 12.2. Do While Loop Thực hiện khối lệnh khi điều kiện True. Hành động sẽ lặp với điều kiện True, cho đến khi điều kiện False thì sẽ thoát ra. Mẫu tổng quát: Trích: Do While <điều kiện> <khối lệnh> Loop Ví dụ: Trích: Sub VD_DoW_Loop() i = 1 ‘ Đặt i lúc đầu bằng 1 Do While i <= 10 ‘ Đặt giới hạn cho i, nếu False thì thoát 4 of 9 7/20/2007 12:02 PM Cells(i,1) = i ‘ Gán i vào ô i = i + 1 ‘ Cho giá trị i tăng dần MsgBox i ‘ Hộp thông báo giá trị i Loop ‘ Tiếp tục lặp End Sub 12.3. Do Loop While Tương tự như Do While Loop, thực hiện khối lệnh khi điều kiện True. Hành động sẽ lặp với điều kiện True, cho đến khi điều kiện False thì sẽ thoát ra. Mẫu tổng quát: Trích: Do <khối lệnh> Loop While <điều kiện> Ví dụ: Trích: Sub VD_Do_LoopW() i = 1 Do Cells(i,3) = i i = i + 1 Msgbox i Loop While i <= 10 End Sub 12.4. Do Until Loop Bạn có thể thực hiện các khối lệnh từ đầu vòng lặp cho đến khi điều kiện vẫn True. Đến khi điều kiện False thì sẽ thoát ra. Phương thức này giống như vòng lặp For Next. Mẫu tổng quát: Trích: Do Until <điều kiện> <khối lệnh> Loop Ví dụ: Trích: Sub VD_DoU_Loop() i = 1 Do Until i = 10 Cells(i,5) = i i = i + 1 MsgBox i Loop End Sub 5 of 9 7/20/2007 12:02 PM Tương tự đối với Do Loop Until. 12.5. For Next Bạn có thể lặp hành động với số lần biết trước. Ta dùng biến đếm tăng dần hoặc giảm dần trong vòng lặp. Trích: For <biến đếm> = <điểm đầu> To <điểm cuối> [Step <bước nhảy>] <khối lệnh> Next [<biến đếm>] Biến đếm, điểm đầu, điểm cuối, bước nhảy là những giá trị số. Bước nhảy có thể là giá trị dương (tăng) hoặc âm (giảm). Nếu Step không được chỉ định ra, mặc định bước nhảy là 1. Trích: Ví dụ 1: Không dùng Step Sub VD_ForNext() For i = 1 To 5 Cells(10, i) = i MsgBox i Next End Sub Trích: Ví dụ 2: Dùng Step Sub VD_ForNext_Step() For i = 1 To 7 Step 2 Cells(12, i) = i MsgBox i Next End Sub Trong ví dụ này, giá trị i tăng từng bước 1, 3, 5, 7. 12.6. For Each Next Tương tự như vòng lặp For Next, nhưng nó lặp khối lệnh theo số phần tử của một tập hợp đối tượng hay một mảng, thay vì theo số lần lặp xác định. Vòng lặp này rất tiện lợi khi ta chưa biết chính xác bao nhiêu phần tử trong tập hợp. Trích: For Each <phần tử> In <nhóm> <khối lệnh> Next <phần tử> Để xác định tên và số lượng sheet trong workbook thì bạn dùng thủ tục sau: Trích: Sub ShowWorkSheets() Dim mySheet As Worksheet Dim i As Integer : i = 1 For Each mySheet In Worksheets 6 of 9 7/20/2007 12:02 PM MsgBox mySheet.Name i = i + 1 Next mySheet MsgBox "So sheet trong workbook la " & i End Sub 12.7. Lệnh thoát (Exit) Trong một số trường hợp, bạn có thể thoát khỏi công việc nào đó khi đã thoả mãn yêu cầu công việc. Bạn có thể sử dụng thủ tục Exit như Exit Do (thoát khỏi vòng lặp Do Loop), Exit For (thoát khỏi vòng For Next), Exit Function (thoát khỏi hàm), Exit Sub (thoát khỏi chương trình), Exit Property (thoát khỏi thuộc tính đang làm việc). Ví dụ: Trích: Sub ExitStatementDemo() Dim I, MyNum Do ' Đặt vòng lặp Do Loop For I = 1 To 1000 ' Lặp 1000 lần MyNum = Int(Rnd * 1000) ' Tạo số nguyên ngẫu nhiên Select Case MyNum ' Tính toán với số nguyên trên Case 7: Exit For ' Nếu là 7, thoát khỏi For Next Case 29: Exit Do ' Nếu là 29, thoát khỏi Do Loop Case 54: Exit Sub ' Nếu là 54, thoát khỏi vòng Sub End Select Next I Loop End Sub 12.8. Vòng lặp lồng Vòng lặp có thể được lồng vào nhau. Ứng dụng này rất có hiệu quả khi bạn tính toán với mảng hay đối với bảng tính nhiều chiều. Ví dụ: Trích: SubCellsExample() For i = 1 To 5 For j = 1 To 5 Cells(i, j) = "Row " & i & " Col " & j Next j Next i End Sub Kết quả thể hiện ở hình vẽ dưới đây: 7 of 9 7/20/2007 12:02 PM #23 # 24 Hình 44: Sản phẩm tạo ra khi dùng vòng lặp lồng. thay đổi nội dung bởi: PhanTuHuong, 19-12-06 lúc 10:32 PM. 24-12-06, 10:21 PM levanduyet Thành viên CFC Tham gia ngày: 05 2006 Bài gởi: 341 Thanks: 17 Thanked 146 Times in 78 Posts Khai báo biến cho cột (Col) và hàng (Row) Xin các bạn cũng chú ý cho khi khai báo biến Code: thì ở đây chúng ta hiểu là x là biến kiểu Variant và y mới là kiểu Integer. Trong Excel 2003 (Vì bây giờ đã có Excel 2007!) thì biến kiểu integer dùng 2 bytes. Tức là từ -32,768 đến 32,767. Còn số hàng trong Excel 2003 là 65,536. Số cột trong Excel 2003 là 256. Vì vậy khi khai báo biến cho hàng, để tránh lỗi đáng tiếc xãy ra thì nên khai báo là kiểu Long, 4 bytes, -2,147,483,648 đến 2,147,483,647. Lê Văn Duyệt __________________ _-*-_-*-_-*-_-*-_-*-_-*-_-*-_ * Know everything you can * * about what you're doing * _-*-_-*-_-*-_-*-_-*-_-*-_-*-_ http://www.levanduyetexcel.netfirms.com/ levanduyet@yahoo.com The Following User Says Thank You to levanduyet For This Useful Post: PhanTuHuong 31-12-06, 05:35 PM levanduyet Thành viên CFC Tham gia ngày: 05 2006 Bài gởi: 341 Thanks: 17 Thanked 146 Times in 78 Posts Byte hay Integer? Trong Help của Excel như sau: [Help] Dim x, y As Integer 8 of 9 7/20/2007 12:02 PM #25 # 26 # 27 # 28 # 29 Byte variables are stored as single, unsigned, 8-bit (1-byte) numbers ranging in value from 0–255.[/Help] Vậy chắc không được rồi anh SA_DQ :( Lê Văn Duyệt __________________ _-*-_-*-_-*-_-*-_-*-_-*-_-*-_ * Know everything you can * * about what you're doing * _-*-_-*-_-*-_-*-_-*-_-*-_-*-_ http://www.levanduyetexcel.netfirms.com/ levanduyet@yahoo.com 10-01-07, 11:14 AM minhanhsfr Excel Member Tham gia ngày: 01 2007 Bài gởi: 3 Thanks: 0 Thanked 2 Times in 2 Posts Bài viết thật tuyệt vời! Cảm ơn PhanTuHUong Với LeVanDuyet nhiều. Mong sao bài giảng được tiếp tục. The Following User Says Thank You to minhanhsfr For This Useful Post: tanhhm 02-02-07, 01:35 PM huuthien_acc Excel Member Tham gia ngày: 01 2007 Bài gởi: 8 Thanks: 1 Thanked 0 Times in 0 Posts Cám ơn các bạn nhiều nhé, đọc bài này của các bạn mình thấy macro cũng khá dễ sử dụng. Mình đang tập ứng dụng macro nên mình rất thích bài này của các bạn. Chúc các bạn sức khỏe và may mắn! 28-02-07, 12:03 PM phontran Excel Member Tham gia ngày: 02 2007 Bài gởi: 12 Thanks: 6 Thanked 0 Times in 0 Posts Cảm ơn các bài viết của các bạn khá hữu ích cho mình đây. 11-03-07, 10:25 PM loisude Excel Member Tham gia ngày: 06 2006 Bài gởi: 6 Thanks: 0 Thanked 2 Times in 1 Post Bai viet rat hay. Huong nen viet ebook di (dang *.chm) de anh em dơn ve, tien viec nghien cuu. Thanks 22-03-07, 12:34 AM Tedison Excel Member Tham gia ngày: 02 2007 Bài gởi: 2 Thanks: 0 Thanked 0 Times in 0 Posts 9 of 9 7/20/2007 12:02 PM #30 Cám ơn hai bạn rất nhiều. Nếu có thời gian, bạn có thể viết tiếp được không? 22-03-07, 12:30 PM friend0988 Excel Member Tham gia ngày: 03 2007 Bài gởi: 1 Thanks: 0 Thanked 0 Times in 0 Posts Đọc bài viết của hai huynh PhanTu Huong Với Le Van Duyet thay that hay, đệ thấy excel va Cad la hai công cụ tốt cho ai hoc Kỹ thuật, đệ muốn học VBA của excel và Cad , ở HCm có dịa chỉ nao không, và giá thế nào???? Trang 3/4 <123 4> « Ðề Tài Trước | Ðề Tài Kế » Ðang đọc: 2 (0 thành viên và 2 khách) 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à 12:01 PM. 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 . Integer. Trong Excel 20 03 (Vì bây giờ đã có Excel 2007!) thì biến kiểu integer dùng 2 bytes. Tức là từ -32 ,768 đến 32 ,767. Còn số hàng trong Excel 20 03 là 65, 536 . Số cột trong Excel 20 03 là 256. Vì vậy. Nhập Trang 3/ 4 <1 23 4> Ðiều Chỉnh Kiếm Trong Bài 10-12-06, 04: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 36 6 Times. Thank You to levanduyet For This Useful Post: PhanTuHuong 31 -12-06, 05 :35 PM levanduyet Thành viên CFC Tham gia ngày: 05 2006 Bài gởi: 34 1 Thanks: 17 Thanked 146 Times in 78 Posts Byte hay