• Khung trình chiếu

VBA - Tìm hiểu nhanh qua các ví dụ đơn giản

Các nội dung liên quan đến việc lập trình bằng những ngôn ngữ chưa được liệt kê ở trên
Gửi hồi đáp
Ảnh đại diện người dùng
huynhbuutam
Nhà sáng lập
Nhà sáng lập
Các bài viết: 117
Đã gia nhập lúc: T3 31 Th8, 2021 22:04
Địa điểm: Trường THCS Châu Lăng
Tên thật: Huỳnh Bửu Tâm

VBA - Tìm hiểu nhanh qua các ví dụ đơn giản

Bài viết bởi huynhbuutam »

Xem thêm:
  1. VBA (MS Word) - Tìm hiểu nhanh qua các ví dụ đơn giản
  2. VBA (MS Excel) - Tìm hiểu nhanh qua các ví dụ đơn giản
Một vài nội dung cơ bản cần biết trước khi bắt đầu:
  1. Để hiển thị thẻ Developer
    • Mở File -> Options
    • Chọn Customize Ribbon
    • Từ cột bên phải (Customize the Ribbon - Main Tabs), đánh dấu kiểm vào mục Developer
    • Nhấn Ok
  2. Để mở cửa sổ lập trình VBA, nhấn tổ hợp phím Alt+F11, hoặc thực hiện:
    • Mở thẻ Developer
    • Nhấn nút Visual Basic
  3. Để tạo một Module, chọn lệnh Insert -> Module
  4. Hầu hết các lệnh dưới đây cần phải đặt trong một hàm hoặc thủ tục mới có thể chạy được, ví dụ

    Mã: Chọn tất cả

    Sub TenHam()
    	X = 5 + 10
    End Sub
  5. Cách tạo một nút trên thanh Ribbon để kích hoạt chạy chương trình:
    • Mở File -> Options
    • Chọn Customize Ribbon
    • Từ cột bên trái (Choose commands from), chọn Macros
    • Chọn chương trình cần thêm nút lệnh và nhấn nút Add >>
    • Nhấn Ok
  6. Cách hiển thị nội dung tiếng Việt
    • Lưu ý: Các cách làm dưới đây có thể sẽ không sử dụng được đối với các hộp thoại mặc định
    • Cách 1
      • Sử dụng bảng mã NCR Decimal trong Unikey, hoặc bảng mã tương tự trong các phần mềm khác
      • Nhập nội dung vào chương trình (lúc này nội dung mà bạn thấy có thể sẽ không giống như những gì mà bạn đã nhập)
      • Thực hiện điều chỉnh (nếu có): Thay thế toàn bộ nội dung có dạng &#XXXX; thành " & ChrW(XXXX) & "
      • Ví dụ: "Ti" & ChrW(7871) & "ng Vi" & ChrW(7879) & "t", "X" & ChrW(7917) & " l" & ChrW(237) (Trong trường hợp này thì bỏ & " sau cùng)
    • Cách 2
      • Thêm hàm sau đây vào chương trình (Nguồn Internet)

        Mã: Chọn tất cả

        Function UniConvert(text As String, InputMethod As String) As String
        Dim VNI_Type, Telex_Type, CharCode, temp, i As Long
        UniConvert = text
        VNI_Type = Array("a81", "a82", "a83", "a84", "a85", "a61", "a62", "a63", "a64", "a65", "e61", _
        "e62", "e63", "e64", "e65", "o61", "o62", "o63", "o64", "o65", "o71", "o72", "o73", "o74", _
        "o75", "u71", "u72", "u73", "u74", "u75", "a1", "a2", "a3", "a4", "a5", "a8", "a6", "d9", _
        "e1", "e2", "e3", "e4", "e5", "e6", "i1", "i2", "i3", "i4", "i5", "o1", "o2", "o3", "o4", _
        "o5", "o6", "o7", "u1", "u2", "u3", "u4", "u5", "u7", "y1", "y2", "y3", "y4", "y5")
        
        Telex_Type = Array("aws", "awf", "awr", "awx", "awj", "aas", "aaf", "aar", "aax", "aaj", "ees", _
        "eef", "eer", "eex", "eej", "oos", "oof", "oor", "oox", "ooj", "ows", "owf", "owr", "owx", _
        "owj", "uws", "uwf", "uwr", "uwx", "uwj", "as", "af", "ar", "ax", "aj", "aw", "aa", "dd", _
        "es", "ef", "er", "ex", "ej", "ee", "is", "if", "ir", "ix", "ij", "os", "of", "or", "ox", _
        "oj", "oo", "ow", "us", "uf", "ur", "ux", "uj", "uw", "ys", "yf", "yr", "yx", "yj")
        CharCode = Array(ChrW(7855), ChrW(7857), ChrW(7859), ChrW(7861), ChrW(7863), ChrW(7845), ChrW(7847), _
        ChrW(7849), ChrW(7851), ChrW(7853), ChrW(7871), ChrW(7873), ChrW(7875), ChrW(7877), ChrW(7879), _
        ChrW(7889), ChrW(7891), ChrW(7893), ChrW(7895), ChrW(7897), ChrW(7899), ChrW(7901), ChrW(7903), _
        ChrW(7905), ChrW(7907), ChrW(7913), ChrW(7915), ChrW(7917), ChrW(7919), ChrW(7921), ChrW(225), _
        ChrW(224), ChrW(7843), ChrW(227), ChrW(7841), ChrW(259), ChrW(226), ChrW(273), ChrW(233), ChrW(232), _
        ChrW(7867), ChrW(7869), ChrW(7865), ChrW(234), ChrW(237), ChrW(236), ChrW(7881), ChrW(297), ChrW(7883), _
        ChrW(243), ChrW(242), ChrW(7887), ChrW(245), ChrW(7885), ChrW(244), ChrW(417), ChrW(250), ChrW(249), _
        ChrW(7911), ChrW(361), ChrW(7909), ChrW(432), ChrW(253), ChrW(7923), ChrW(7927), ChrW(7929), ChrW(7925))
        
        Select Case InputMethod
            Case Is = "VNI": temp = VNI_Type
            Case Is = "Telex": temp = Telex_Type
        End Select
        
        For i = 0 To UBound(CharCode)
        UniConvert = Replace(UniConvert, temp(i), CharCode(i))
        UniConvert = Replace(UniConvert, UCase(temp(i)), UCase(CharCode(i)))
        Next i
        
        End Function
      • Sử dụng: UniConvert("Tieesng Vieejt", "Telex")
Nội dung chính
  1. Khai bái biến và hằng

    Mã: Chọn tất cả

    ' =================================================
    ' KHAI BÁO BIẾN & HẰNG
    ' =================================================
    ' Câu lệnh dưới đây dùng để bắt buộc khai báo trước khi sử dụng biến
    Option Explicit
    ' Các kiểu dữ liệu thường dùng
    ' Byte, Boolean, Integer, Long, Single, Double
    ' Currency, Date, String
    ' Object, Variant
    Dim TenBien
    Dim TenBien As Byte
    Dim TenBien1, TenBien2
    Dim TenBien1 As Integer, TenBien2 As Date
    ' Biến toàn cục thì sử dụng từ khóa Global
    ' Lưu ý: TenBienA sẽ có kiểu dữ liệu mặc định là Variant, TenBienB có kiểu dữ liệu là Date
    Dim TenBienA, TenBienB As Date
    Const TenHang As Integer = 10
    Const TenHang1 As String = "Hello", TenHang2 As Long = 100
    ' Mảng gồm 100 phần tử số nguyên
    Dim TenMang(1 to 100) As Integer
    ' Mảng dưới đây đồng nghĩa với (0 to 100)
    ' Trong trường hợp muốn tất cả mảng bắt đầu từ 1 theo mặc định
    ' Thì sử dụng lệnh: Option Base 1
    Dim TenMang(100) As Integer
    ' Mảng nhiều chiều
    Dim TenMang(1 to 10, 1 to 10) As Integer
  2. Gán giá trị cho biến

    Mã: Chọn tất cả

    ' =================================================
    ' GÁN GIÁ TRỊ CHO BIẾN
    ' =================================================
    ' Giá trị Date được đặt trong cặp dấu #
    ' CÁC PHÉP TOÁN
    ' Cộng: +
    ' Trừ: -
    ' Nhân: *
    ' Chia: /
    ' Lũy thừa: ^
    ' Nối chuổi: &
    ' Chia lấy phần nguyên: \
    ' Chia lấy phần dư: Mod
    ' Các phép toán Logic: Not, And, Or, XoR, Eqv, Imp
    TenBien = 10
    TenBien = #01/01/2025#
    ' Gán giá trị 100 cho phần tử ở hàng thứ 3, cột thứ 4
    TenMang(3,4)=100
    ' Khai báo mảng nhưng chưa xác định số phần tử
    Dim TenMang() As Integer
    ' Xác định số phần tử trong khi sử dụng (xóa bỏ dữ liệu cũ)
    ReDim TenMang(10)
    ' Xác định số phần tử trong khi sử dụng (giữ lại dữ liệu cũ)
    ReDim Preserve TenMang(100)
  3. Các cấu trúc điều khiển

    Mã: Chọn tất cả

    ' =================================================
    ' CẤU TRÚC ĐIỀU KHIỂN
    ' =================================================
    If 1 > 2 Then
    	' Nội dung công việc
    End If
    
    If 1 > 2 Then
    	' Nội dung công việc
    Else
    	' Nội dung công việc
    End If
    
    If 1 > 2 Then
    	' Nội dung công việc
    ElseIf 4 > 3 Then
    	' Nội dung công việc
    Else
    	' Nội dung công việc
    End If
    
    Select Case 60
    	Case 100
    		' Nội dung công việc
    	Case 50
    		' Nội dung công việc
    	Case Else
    		' Nội dung công việc
    End Select
    
    Do
    	' Nội dung công việc
    Loop
    
    Do While 1 > 2
    	' Nội dung công việc
    Loop
    
    
    Do
    	' Nội dung công việc
    Loop While 1 > 2
    
    Do Until 2 > 1
    	' Nội dung công việc
    Loop
    
    For TenBien = 1 To 10
    	' Nội dung công việc
    Next TenBien
    
    For TenBien = 1 To 10 Step 2
    	' Nội dung công việc
    Next TenBien
    
    For Each TenBien In TenNhom
    	' Nội dung công việc
    Next TenBien
  4. Các hộp thoại

    Mã: Chọn tất cả

    ' =================================================
    ' HỘP THOẠI
    ' =================================================
    TenBien = MsgBox("Nội dung", vbYesNoCancel + vbQuestion + vbDefaultButton1, "Tiêu đề")
    
    ' vbOKOnly
    ' vbOKCancel
    ' vbAbortRetryIgnore
    ' vbYesNoCancel
    ' vbYesNo
    ' vbRetryCancel
    
    ' vbCritical
    ' vbQuestion
    ' vbExclamation
    ' vbInformation
    ' vbDefaultButton1
    ' vbDefaultButton2
    ' vbDefaultButton3
    ' vbDefaultButton4
    ' vbApplicationModal
    ' vbSystemModal
    ' vbMsgBoxHelpButton
    ' vbMsgBoxSetForeground
    ' vbMsgBoxRight
    ' vbMsgBoxRtlReading
    
    TenBien = Application.InputBox("Nội dung", "Tiêu đề", Type:=8)
    ' 0: Công thức
    ' 1: Số
    ' 2: Chuổi
    ' 4: Logic
    ' 8: Tham chiếu
    ' 16: Giá trị lỗi
    ' 64: Mảng
  5. Hàm và thủ tục

    Mã: Chọn tất cả

    ' =================================================
    ' HÀM VÀ THỦ TỤC
    ' =================================================
    Function TenThuTuc1()
    	' Nội dung công việc
    End Function
    
    Function TenThuTuc2(ThamSo As Integer, Optional ThamSoPhu As Boolean)
    	' Nội dung công việc
    End Function
    
    Function TenHam1()
    	' Nội dung công việc
    	' Kết quả trả về có thể có hoặc không
    	TenHam1 = True
    End Function
    
    Function TenHam2(ThamSo As Integer)
    	' Nội dung công việc
    	' Kết quả trả về có thể có hoặc không
    	TenHam2 = 100
    End Function
    
    Function TenHam3(ThamSo As Long) As String
    	' Nội dung công việc
    	' Kết quả trả về có thể có hoặc không
    	TenHam3 = "Hello"
    End Function
    
    Sub main()
    	Const ThamSo = 100
    	TenThuTuc1
    	Call TenThuTuc1
    	TenThuTuc2(ThamSo)
    	TenHam1
    	TenBien = TenHam1
    	TenHam2(ThamSo)
    End Sub
  6. Một số lệnh thường dùng liên quan đến kiểu dữ liệu Xâu kí tự

    Mã: Chọn tất cả

    ' =================================================
    ' MỘT SỐ LỆNH XỬ LÍ XÂU KÍ TỰ
    ' =================================================
    TenBien = Join(TenMang, "PhanTach")
    TenBien = Left("Xâu kí tự", 2)
    TenBien = Right("Xâu kí tự", 3)
    TenBien = Mid("Xâu kí tự", 3, 7)
    TenBien = Len("Xâu kí tự")
    LTrim ("Xâu kí tự")
    RTrim ("Xâu kí tự")
    Trim ("Xâu kí tự")
    ' Tạo ra các khoảng trống
    Space(10)
    TenMang = Split("Xâu kí tự", " ")
    TenMang = StrConv("Xâu kí tự", vbUpperCase)
    ' vbLowerCase
    ' vbProperCase
    ' vbUnicode
    ' vbFromUnicode
    LCase ("Xâu kí tự")
    UCase ("Xâu kí tự")
    TenBien = String(10, "A")
    StrReverse ("ABC")
    Open "D:\TepXuat" For Output As #1
    Print #1, "Hello"; Tab(10); "World"
    TenBien = Replace("Xâu kí tự Tìm kiếm", "Tìm kiếm", "Thay thế", 1, 100)
    TenBien = InStr("Xâu kí tự Tìm kiếm", "Tìm kiếm")
    TenBien = InStrRev("Xâu kí tự Tìm kiếm", "Tìm kiếm")
  7. Một số lệnh thường dùng liên quan đến kiểu dữ liệu số

    Mã: Chọn tất cả

    ' =================================================
    ' MỘT SỐ LỆNH XỬ LÍ SỐ
    ' =================================================
    TenBien = Abs(-5.5)
    ' Làm tròn về số nhỏ hơn
    TenBien = Int(-5.5)
    ' Bỏ phần thập phân
    TenBien = Fix(-5.5)
    ' Tạo số thực ngẫu nhiên trong khoảng 0 đến 1
    Rnd
    Rnd(1)
    ' Tạo số thực ngẫu nhiên (Cố định sau mỗi lần chạy)
    Rnd(-1)
    ' Lấy số ngẫu nhiên được tạo gần đây nhất
    Rnd(0)
    ' Tạo số nguyên ngẫu nhiên trong khoảng 50 và 100
    TenBien = Int((100 - 50 + 1) * Rnd + 50)
    IsNumeric(TenBien)
    ' Định dạng số hiển thị:
    ' 5 số sau dấu thập phân;
    ' Có giữ phần nguyên đối với số nhỏ hơn 1 và lớn hơn -1;
    ' Không thay thế dấu âm bằng cặp dấu ngoặc;
    ' Có phân tách hàng nghìn, triệu,...
    TenBien = FormatNumber(-1234.5678, 5, vbTrue, vbFlase, vbTrue)
    ' Định dạng số hiển thị dạng phần trăm
    TenBien = FormatPercent(-1234.5678, 5, vbTrue, vbFlase, vbTrue)
    ' Định dạng số hiển thị dạng tiền tệ
    TenBien = FormatCurrency(-1234.5678, 5, vbTrue, vbFlase, vbTrue)
  8. Một số lệnh thường dùng liên quan đến kiểu dữ thời gian và ngày tháng

    Mã: Chọn tất cả

    ' =================================================
    ' MỘT SỐ LỆNH XỬ LÍ THỜI GIAN, NGÀY THÁNG
    ' =================================================
    ' Lấy ngày tháng, thời gian hiện tại
    TenBien = Now
    ' Lấy ngày tháng hiện tại
    TenBien = Date
    ' Lấy thời gian hiện tại
    TenBien = Time
    ' Lấy số ngày trong tuần
    TenBien = Weekday("2/12/1969")
    ' Cộng thêm ngày tháng, thời gian
    ' yyyy: Năm; q: Quý; m: Tháng; ww: Tuần
    ' y: Ngày trong năm; d: Ngày; k: Ngày trong tuần
    ' h: Giờ; n: Phút; s: Giây
    TenBien = DateAdd("m", 2, "3-Jan-95")
    ' Khoảng cách ngày tháng, thời gian
    TenBien = DateDiff("m", "3-Jan-95", "15-Jul-95")
    ' Thành phần trong ngày tháng, thời gian
    TenBien = DatePart("m", "3-Jan-95")
    ' Tạo một giá trị ngày tháng
    TenBien = DateSerial(1969, 2, 13)
    ' Tạo một giá trị thời gian
    TenBien = TimeSerial(16, -15, 17)
    ' Chuyển xâu kí tự thành giá trị ngày tháng
    TenBien = DateValue("February 12, 1969")
    ' Chuyển xâu kí tự thành giá trị thời gian
    TenBien = TimeValue("4:35:17 PM")
    ' Lấy phần năm trong ngày tháng, thời gian
    TenBien = Year("February 12, 1969")
    ' Lấy phần tháng trong ngày tháng, thời gian
    TenBien = Month("February 12, 1969")
    ' Lấy phần ngày trong ngày tháng, thời gian
    TenBien = Day("February 12, 1969")
    ' Lấy phần giờ trong ngày tháng, thời gian
    TenBien = Hour("4:35:17 PM")
    ' Lấy phần phút trong ngày tháng, thời gian
    TenBien = Minute("4:35:17 PM")
    ' Lấy phần giây trong ngày tháng, thời gian
    TenBien = Second("4:35:17 PM")
    ' Định dạng hiển thị ngày tháng, thời gian
    ' vbShortTime, vbLongTime, vbLongDate, vbGeneralDate
    FormatDateTime("February 12, 1969", vbShortDate)
    ' Kiểm tra có phải là giá trị ngày tháng, thời gian hay không
    TenBien = IsDate("February 12, 1969")
    ' Chuyển số thành tên tháng
    TenBien = MonthName(3, True)
    ' Chuyển số thành tên ngày
    TenBien = WeekdayName(3, False)
    ' Lấy số giây kể từ 12 giờ đêm
    TenBien = Timer
  9. Một số lệnh thường dùng khác

    Mã: Chọn tất cả

    ' =================================================
    ' LỆNH THƯỜNG DÙNG KHÁC
    ' =================================================
    ' Bỏ qua việc cập nhật hiển thị cho mỗi điều chỉnh (chỉ cập nhật sau khi đã hoàn thành một chức năng)
    Application.ScreenUpdating = False
    ' Bỏ qua các hộp thoại cảnh báo
    Application.DisplayAlerts = False
    ' Lấy thông tin đường dẫn đến tệp đang mở
    TenBien = Application.Path
    ' Tạo đối tượng liên kết
    CreateObject("Excel.Application").Wait (Now + TimeValue("00:00:05"))
    ' Lệnh nhảy
    GoTo TenNhan
    TenNhan:
    ' Nội dung công việc
    ' Lệnh thoát
    ' Exit Do
    ' Exit For
    ' Exit Function
    ' Exit Property
    ' Exit Sub
    ' Lệnh xử lí khi xảy ra lỗi
    On Error GoTo TenNhan
    On Error Resume Next
    On Error GoTo 0
    IsArray(TenBien)
    ' Kiểm tra TenBien đã được khởi tạo hay chưa
    IsEmpty(TenBien)
    ' Kiểm tra tham số trong chương trình con có được đưa vào chưa
    IsMissing(TenThamSo)
Gửi hồi đáp
  • Similar Topics
    Các hồi đáp
    Lượt xem
    Bài viết cuối