Kiến thức cơ bản về Visual Basic for Applications (VBA)

Liên hệ QC
Status
Không mở trả lời sau này.
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

expression.InputBox (prompt [, title] [, default], [, left], [, top] [helpfile, context] [, type])
Expression: một biểu thức trả về đối tượng Application.

Trong đó:

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.

Bang7.jpg


Ví dụ:
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ỉ ô,...

hinh43.jpg


Hình 43: Ví dụ về sử dụng InputBox
 
Chỉnh sửa lần cuối bởi điều hành viên:
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:


Ví dụ:

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:

Do While <điều kiện>
<khối lệnh>
Loop

Ví dụ:

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
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:

Do
<khối lệnh>
Loop While <điều kiện>

Ví dụ:


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:

Do Until <điều kiện>
<khối lệnh>
Loop

Ví dụ:

Sub VD_DoU_Loop()
i = 1
Do Until i = 10
Cells(i,5) = i
i = i + 1
MsgBox i
Loop
End Sub

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.

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.

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

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.

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:

Sub ShowWorkSheets()
Dim mySheet As Worksheet
Dim i As Integer : i = 1
For Each mySheet In Worksheets
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ụ:

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ụ:

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:

hinh44.jpg


Hình 44: Sản phẩm tạo ra khi dùng vòng lặp lồng.
 
Lần chỉnh sửa cuối:
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
Mã:
Dim x, y As Integer
thì ở đây chúng ta hiểu là x là biến kiểu Varianty 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
 
Byte hay Integer?

Trong Help của Excel như sau:
[Help]
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
 
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.
 
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!
 
Cảm ơn các bài viết của các bạn khá hữu ích cho mình đây.
 
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?
 
Đọ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????
 
thật hay đó

Nhưng liệu các bác có thể viết thành 1 Ebook rồi tải lên các anh em xem được không!
Xin cảm ơn!
 
friend0988 đã viết:
Đọ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????

Bạn cứ học VBA Excel tốt đã, rồi học sang Acad rất nhanh.

Địa chỉ học thì tôi không rõ, nhưng tài liệu để tự học thì có khá nhiều rồi.
 
PhanTuHuong đã viết:
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


Expression: một biểu thức trả về đối tượng Application.

Trong đó:



Bang7.jpg


Ví dụ:


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ỉ ô,...

hinh43.jpg


Hình 43: Ví dụ về sử dụng InputBox

Mục trên có 1 số nhầm lẫn giữa phương thức InputBox và hàm InputBox trong phần đối số.
Các bạn chú ý phân biệt nhé.
 
Cám ơn rất nhiều. Tuy kiến thức Excel của tôi còn hạn chế, nên khi đọc bài viết của bạn PhanTuHuong, tôi còn nhiều điều chưa hiểu. Nhưng vẫn cảm ơn các bạn đã viết các kiến thức này.
 
Bài viết của anh Hướng tôi thấy hay quá nên down hết về máy tính rồi... Tính luôn cả hình ảnh thì file có dung lượng tới 5M... Nặng quá nên ko biết làm sao post lên cho các bạn... Nếu ai cần thì liên hệ d/c mail của tôi: yeulachet1066@yahoo.com Tôi sẽ gữi cho
Mến
ANH TUẤN
 
Rất rất cám ơn những điều bổ ích mà bạn cung cấp (ít ra là đối với một người mới chập chững, mày mò viết VBA như tôi). Cố gắng phát huy nhé bạn nhé!
 
Excel help

Anh vào Excel Help (not VBA help) và tìm theo đường dẫn trong hình (Excel < 2007). Excel 2007 trong MSDN mới có.

Objects.jpg


TP.
 
Cảm ơn cậu nhiều, thế mà cứ tìm hoài trong VBA mà . . . không thấy.
Thiệt tình !!!!!!!!!!!

Thân!
 
Tác giả có những bài viết rất hay về Excel. Xin cảm ơn đã cho chúng tôi những tham khảo đáng quý. Tôi đang muốn tìm hiểu về các hàm khấu hao và hàm chứng khoán trong Excel. Nếu tác giả có file ví dụ và cách sử dụng làm ơn gửi cho tôi với. Cảm ơn nhiều.
 
Status
Không mở trả lời sau này.
Web KT

Bài viết mới nhất

Back
Top Bottom