Lập trình VBA nhập môn

Simon

Member
Hội viên được tín nhiệm
Xây dựng cấu trúc chương trình

Khi xây dựng các đề án với Visual Basic For Application bạn phải chia các công việc nhập, tính toán, xuất sao cho càng rõ ràng, rành mạch càng tốt. Các công thức dùng cho nhập và xuất tôi đã trình bày ở bài trước, còn phần quan trọng là phải viết phần tính toán, trung tâm xử lý một chương trình Visual Basic For Application.

Thông thường với Visual Basic các thủ tục được tiến hành tuần tự theo các dòng mà bạn lập trình. Nhưng nhiều khi lại tuỳ vào một điều kiện mà bạn có thể xử lý A, hay xử lý B, hoặc lặp đi lặp lại một xử lý C nào đó. Ta phải nghiên cứu các cấu trúc công thức để hiểu. Một số cấu trúc thường gặp trong Visual Basic tôi chỉ nói qua, nhưng cấu trúc nào không có ở Visual Basic tôi xin phép được nói sâu hơn một chút.

Visual Basic For Application xử lý có hơi khác so với Visual Basic ở một số cấu trúc. Trước tiên ta hãy liệt kê câu trúc hay sử dụng lập trình ra đã. Nếu bạn đã quen với Visual Basic bạn có thể bỏ qua, nếu bạn mới làm quen với Visual Basic bạn nên xem kỹ phần này. Trong bài viết, để người đọc dễ hiểu tôi đặt tên biến hơi dài. Khi lập trình bạn nên đặt ngắn gọn dễ hiểu, dễ nhớ để rút ngắn thời gian.Các biến bạn nên đặt tên gợi nhớ bằng Tiếng Việt không dấu để tiện kiểm tra. Đừng thể hiện bằng cách đặt tên biến bằng từ Anh nếu bạn không thạo tiếng Anh lắm. Những nhà lập trình gỏi thường đặt tên biến bằng từ Việt, họ chỉ đặt bằng từ Anh khi bí từ hoặc khi copy đoạn mã nguồn từ các chương trình mẫu của Microsoft.

1. Cấu trúc IF THEN ELSE (Nếu... thì.... ngược lại)

Điều kiện là một biến logic đúng sai. Nếu phức tạp bạn nên tạo một biến logic để đặt vào cấu trúc. Đừng đưa cả biểu thức logic làm điều kiện, vì đó là kiểu cách lập trình rối, nếu quen sẽ không làm được việc lớn.

IF <Điều kiện> THEN
Công việc A - Là công việc sẽ thực hiện khi điều kiện đúng.
ELSE
Công việc B - Là công việc sẽ thực hiện khi điều kiện sai.
END IF

Tuy nhiên bạn có thể sử dụng hàm IIF ( Điều kiện, Giá trị khi điều kiện đúng, Giá trị khi điều kiện sai) để gán giá trị cho một biến.

Ví dụ: KetQuaThi = IIF(DuDiemVaKhongBiLiet, "Đỗ", "Trượt")
Đôi khi bạn có thể lồng vào trong cấu trúc IF dạng ElseIF (Lưu ý viết liền)

Ví dụ:

Gioi = (Tongdiem>=8)
Kha = (TongDiem>=6.5) AND (TongDiem<8)
TB = (TongDiem>=5) AND (TongDiem<6.6)
Kem = (TongDiem<5)

IF Gioi Then

Thuong = "Xe đạp"

ELSEIF KHA THEN

Thuong="Cặp sách"

ELSEIF TB THEN

Thuong = "Trông nhà"

ELSE

Thuong = "Ăn đòn"

END IF


2. Cấu trúc SELECT CASE (Chọn trường hợp)

SELECT CASE <Điều kiện>

CASE Giá trị 11, giá trị 12..., giá trị 1n
Công việc A1 - Là công việc sẽ thực hiện khi điều kiện bằng các giá trị trên
CASE Giá trị 21, giá trị 12..., giá trị 2n
Công việc A2 - Là công việc sẽ thực hiện khi điều kiện bằng các giá trị trên
.....
CASE Giá trị m1, giá trị m2..., giá trị mn
Công việc Am - Là công việc sẽ thực hiện khi điều kiện bằng các giá trị trên
CASE ELSE
Công việc B - Là công việc sẽ thực hiện khi điều kiện khác tất cả giá trị trên
END SELECT


Trong đó điều kiện là một biến. Các giá trị liệt kê theo từng trường hợp mà làm các công việc khác nhau.

Nhưng ta có thể không liệt kê ra trong các trường hợp bằng dòng CASE như trên mà có thể dùng một số từ khoá sau:

CASE IsNull trường hợp điều kiện không có giá trị.
Case Is >100 trường hợp điều kiện là số >100
Case 100 to 200 trường hợp điều kiện là số từ 100 - 200

Bạn có thể sử dụng hàm CHOOSE nếu điều kiện của bạn là các số nguyên dương để gán giá trị cho biến ví dụ:

GiaiThuong = CHOOSE (KetQua, "Đi Mỹ", "Đi Úc", "Đi Đài Loan")

Tuỳ theo biến kết quả trên phải là các số nguyên dương 1, 2, 3... mà biến Giải thưởng nhận được giá trị tương ứng.

Bạn cũng có thể sử dụng hàm Switch để bật chuyển cho nhanh theo công thức sau khi thiết kế hàm.

Function ThuDo (Nuoc as String) as String
Bien= Switch(Bthức 1, Giá trị 1,Biểu thức 2, Giá trị 2......Biểu thức n, Giá trị n)

Ví dụ:

Function ThuDo (Nuoc as String) as String
KetQua = SWITCH (Nuoc="Mỹ", "Oa sinh tơn", Nuoc="Trung Quốc", "Bắc Kinh"...., Nuoc ="Campuchia", "Pnôm pênh")
ThuDo = KetQua
End Function


3. Cấu trúc lặp FOR EACH Biencon IN BienTongHop NEXT


FOR EACH Biencon IN BienTongHop

Công việc cho biến con đại diện cho tất cả các phần tử trong biến tổng hợp
NEXT

Biến con là 1 phần tử của biến tổng hợp là một tập hợp. Như ô với vùng, như ký tự với chuỗi, như nút lệnh với thanh công cụ....

Khi lặp đi lặp lại đối với từ phần tử cho đến hết các phần tử ta đưa công việc vào trong vòng lặp để Visual Basic For Application thực hiện lặp lần lượt tới từng phần tử thông qua một tên biến đại diện.

Ví dụ:

Function TONGLAPPHUONG(VungDL)
Dim KetQua, OHienTai, OHienTaiLaSo
FOR EACH OHienTai IN VungDL
OHienTaiLaSo = IsNumeric(OHienTai)
IF OHienTaiLaSo Then
KetQua = KetQua + OHienTai^3
End If
Next
TONGLAPPHUONG = KetQua
End Function


Thông thường đối với các ô của Excel thường sử dụng các hàm sau để kiểm tra dạng dữ liệu trong biến.

IsDate (Biến) - Kiểm tra xem biến có phải dạng ngày không.
IsNumeric (Biến) - Kiểm tra xem biến có phải dạng số không.
IsString (Biến) - Kiểm tra xem biến có phải dạng chuỗi không.
IsArray (Biến) - Kiểm tra xem biến có phải dạng mảng không.
IsMissing (Biến) - Kiểm tra xem biến có được truyền từ ngoài vào không.
IsNull (Biến) - Kiểm tra xem biến đã nhập dữ liệu chưa.


Trong vòng lặp có thể sử dụng Exit For để chấm dứt vòng lặp khi ta kiểm tra điều kiện.


3. Cấu trúc lặp FOR ........ NEXT

For Biến_đếm = Giá trị đầu TO Gía trị cuối (STEP)

Công việc cho các trường hợp có liên quan đến biến đếm.
Next
Vòng lặp này ta đã quá quen thuộc trong Visual Basic, nó lặp đi lặp lại các công việc một số lần xác định trừ khi ta cho nhảy ra khỏi vòng lặp bằng Exit For. Bạn có thể gặp đầy rẫy ví dụ của nó.


4. Vòng lặp không xác định:


Dùng để lặp lại chừng nào (While) điều kiện vẫn đúng, hay lặp lại cho đến khi (Until) điều kiện đúng. Vòng lặp cũng quá quen thuộc trong Visual Basic.
Do [{While | Until} điều_kiện]
Các công việc A
[Exit Do]
Các công việc B
Loop
Hoặc có thể dùng:
Do
Các công việc A
[Exit Do]
Các công việc B
Loop [{While | Until} điều kiện]

Vòng lặp sau tương tự, nhưng trong Visual Basic For Application:
While điều kiện
Các công việc A
Wend

Các công việc sẽ thực hiện khi điều kiện đang đúng. Điều này bắt buộc phải cẩn thận vì không có dạng Exit khỏi vòng lặp.

Nguyễn Phương Thảo - 525 - Điện Biên - Thị xã Yên Bái
Trung tâm Dạy nghề và Phổ cập Tin học Miền núi ABC
 
cần hướng dẫn

các anh/chị hiểu biết về VBA xin vui lòng hướng dẫn giúp em (một ng mới tìm hiểu VBA):
- cách đánh tiếng việt trong VBA để khi chạy hàm thì ko báo lỗi. (em dùng unicode gõ TV nhưng vẫn ko hiện ra chữ TV, chỉ thấy dấu "?")
- cách xóa Module đã tạo.
hy vọng em sẽ sớm nhận được các hướng dẫn của mọi người.
thành thật cảm ơn
chúc mọi người vui vẻ
 
các anh/chị hiểu biết về VBA xin vui lòng hướng dẫn giúp em (một ng mới tìm hiểu VBA):
- cách đánh tiếng việt trong VBA để khi chạy hàm thì ko báo lỗi. (em dùng unicode gõ TV nhưng vẫn ko hiện ra chữ TV, chỉ thấy dấu "?")
- cách xóa Module đã tạo.
hy vọng em sẽ sớm nhận được các hướng dẫn của mọi người.
thành thật cảm ơn
chúc mọi người vui vẻ

Theo mình biết VBA không hỗ trợ tiếng việt nên bạn ko thể dùng Unikey hay việtkey để đánh trực tiếp vào dc.

Để xóa module bạn chỉ cần nhấn atl-f11 và chọn remove module.

Mình chỉ biết có vậy, các bạn cho ý kiến nhé :cheers2::cheers2:
 
Ðề: Lập trình VBA nhập môn

Chào tất cả các thành viên của diễn đàn!Minh đang cần tài liệu về lập trình VBA.Mình cần sự giúp đỡ tài liệu từ các bạn!Cảm ơn!
 
Ðề: Lập trình VBA nhập môn

Em có lỗi này mong các anh giúp
 

Đính kèm

  • loi IDM.doc
    233 KB · Lượt xem: 430
Ðề: Lập trình VBA nhập môn Phần 2

2 link MF (HD phần 2 và Tạo Form +List) die rồi, bạn nào có thể up lại dc ko?
 
Ðề: Lập trình VBA nhập môn

Mình cũng học Visual Basic nhưng mà hình như không giống thế này lắm.
Mình lập trình trên Visual Studio nhưng mà câu lệnh nó như thế này nè:
Mã:
 Private Shared Function QuyDoiDonVi(ByVal soLuong As Double, ByVal donVi As String, ByVal donViTinh As String) As Double
        If String.Compare(donVi, donViTinh) = 0 Or donVi Is Nothing Or donViTinh Is Nothing Then Return soLuong
        If soLuong = 0 Then Return 0
        Dim selectQuery As VIN_DataProvider.SQL_Query = VIN_DataProvider.SQL_Query.From("Don_Vi_Tinh")
        selectQuery.WhereAnd("MaDVT") = donVi
        selectQuery.WhereAnd("DVQuyDoi") = donViTinh
        If selectQuery.Value("SoLuongQuyDoi") Is Nothing Then
            selectQuery = VIN_DataProvider.SQL_Query.From("Don_Vi_Tinh")
            selectQuery.WhereAnd("DVQuyDoi") = donVi
            selectQuery.WhereAnd("MaDVT") = donViTinh
            If selectQuery.Value("SoLuongQuyDoi") Is Nothing Then
                Return soLuong
            Else
                Return (1 / selectQuery.Value("SoLuongQuyDoi")) * soLuong
            End If
        Else
            Return selectQuery.Value("SoLuongQuyDoi") * soLuong
        End If
    End Function
Như vậy đó. Minh ko bít mọi người lập trình băng gì nên muốn lên đây học hỏi kinh nghiệm
 
Ðề: Lập trình VBA nhập môn

Nếu em học VB rồi thì Code trong Excel giống VB đến 70% chỉ khác cách điều khiển đối tượng.
Để lập trình thì mở bảng tính, xong nhấn Alt+F11 thì Excel mở Visual Basic, bên trái sẽ thấy cửa sổ VBAProject các thao tác mở cửa sổ Code, Ínert Form giống như VB (vì Excel là anh thằng VB mờ).
 
Ðề: Lập trình VBA nhập môn

top này hữu ích với mình đây, quánh dấu đã từ từ học hỏi
 
Ðề: Lập trình VBA nhập môn

hóng , lót dép hóng
 
mình có cấu trúc 1 nhờ các bác viết dùm cho đoạn mã chuyển sang cấu trúc 2 hộ mình với
 

Đính kèm

  • cau truc 1.JPG
    cau truc 1.JPG
    229.8 KB · Lượt xem: 898
  • cau truc 2.JPG
    cau truc 2.JPG
    251.9 KB · Lượt xem: 851

CẨM NANG KẾ TOÁN TRƯỞNG


Liên hệ: 090.6969.247

KÊNH YOUTUBE DKT

Cách làm file Excel quản lý lãi vay

Đăng ký kênh nhé cả nhà

SÁCH QUYẾT TOÁN THUẾ


Liên hệ: 090.6969.247

Top