Bước tới nội dung

Visual Basic for Applications

Bách khoa toàn thư mở Wikipedia

Đây là một phiên bản cũ của trang này, do 2405:4802:25e:5d40:d0db:5d3e:3e5b:392f (thảo luận) sửa đổi vào lúc 09:34, ngày 7 tháng 10 năm 2021 (Các ví dụ). Địa chỉ URL hiện tại là một liên kết vĩnh viễn đến phiên bản này của trang, có thể khác biệt rất nhiều so với phiên bản hiện hành.

Biểu tượng của VBA

Visual Basic for Applications (VBA) là một sự bổ sung của Microsoft's Visual Basic, được xây dựng trong tất cả các ứng dụng Microsoft Office (bao gồm cả phiên bản cho hệ điều hành Mac OS), một số ứng dụng của Microsoft khác như Microsoft MapPointMicrosoft Visio - một ứng dụng trước đây của Microsoft; ít nhất đã được bổ sung thành công trong những ứng dụng khác như AutoCAD, WordPerfectESRI ArcGIS. Nó đã được thay thế và mở rộng trên khả năng của ngôn ngữ macro đặc trưng như WordBasic của Word, và có thể được sử dụng để điều khiển hầu hết tất cả khía cạnh của ứng dụng chủ, kể cả vận dụng nét riêng biệt về giao diện người dùng như các menu và toolbar và làm việc với các hình thái hoặc hộp thoại tùy ý. VBA có thể được sử dụng để tạo ra các bộ lọc xuất nhập cho các định dạng tập tin khác nhau như ODF.

Như tên gọi của mình, VBA khá gần gũi với Visual Basic, nhưng nó chỉ có thể chạy trong ứng dụng chủ chứ không phải 1 chương trình độc lập. Nó có thể được dùng để điều khiển 1 ứng dụng từ 1 OLE tự động (ví dụ, tự động tạo một bản báo cáo bằng Word từ dữ liệu trong Excel).

VBA có nhiều khả năng và cực kì mềm dẻo nhưng nó có một số hạn chế quan trọng, bao gồm hỗ trợ hạn chế cho các hàm gọi lại. Nó có khả năng sử dụng (nhưng không tạo ra) các thư viện động, và các phân bản sau hỗ trợ cho các mô-đun lớp (class modules).

Sử dụng

Hầu hết các sản phẩm phần mềm (Autodesk AutoCAD / Microsoft Office / Adobe Illustrator) trang bị một 'Kiểu đối tượng' cho môi trường Visual Basic cho phép người dùng tạo ra mọi thứ từ các macro nhỏ để biểu diễn yêu cầu lặp lại cho chương trình bao quát để thêm khả năng cho chương trình chủ.

Macros có thể được gắn vào một menu, nút nhấn hoặc bàn phím.

Các ví dụ

Một công dụng phổ biến của VBA là thêm hàm vào giao diện ứng dụng chuẩn. Macro này chuẩn bị một shortcut để nhập ngày hiện tại trong Word:

Sub NhapNgayHienTai()
' NhapNgayHienTai Macro
' Macro recorded 15/03/2005 by UserName
' 
    Selection.InsertDateTime DateTimeFormat:="d-MMM-yy", InsertAsField:=False, _
         DateLanguage:=wdEnglishAUS, CalendarType:=wdCalendarWestern, _
        InsertAsFullWidth:=False
End Sub

VBA rất có ích trong việc tự động cập nhật dữ liệu qua một bảng:

Sub LoopTableExample

    Dim db As DAO.Database
    Dim rs As DAO.Recordset

    Set db = CurrentDb
    Set rs = db.OpenRecordset("SELECT * FROM tblMain")

    Do Until rs.EOF
        MsgBox rs!FieldName
        rs.MoveNext
    Loop

    Set rs = Nothing
    Set db = Nothing
End Sub

VBA có thể dùng để thêm hàm mới trong bảng tính Microsoft Excel:

Public Function BusinessDayPrior(dt As Date) As Date

    Select Case Weekday(dt, vbMonday)
        Case 1
            BusinessDayPrior = dt - 3     
        Case 7
            BusinessDayPrior = dt - 2     
        Case Else
            BusinessDayPrior = dt - 1     
    End Select
End Function

Thông báo sinh nhật nhân sự:

Dim toa_do As String
Dim ma_mau As String
Dim i As Integer
Dim j As Integer


Function run_all()


    run_1
    toa_do = "c5"
    'Call color2(toa_do, "vang")
      
End Function


Sub run_1()
    ' Dem nguoc ngay sinh
    
    Dim x As Integer
    Dim fromDate As Variant
    Dim nowDate As Variant
    nowDate = Date
     
     
    'MsgBox (Month(nowDate))
    'MsgBox nowDate
    j = 40 ' hang cuoi cung, se bo xung sau: lastrow

    For i = 5 To j Step 1
        fromDate = Cells(i, 4).Value
        Cells(i, 5).Interior.Color = RGB(255, 255, 255)
        If Month(nowDate) = Month(fromDate) Then
            x = Day(fromDate) - Day(nowDate)
            Call thong_bao(i, x)
        End If
    Next i
   
    
End Sub

Sub thong_bao(so_hang As Integer, a As Integer)
    Dim str2 As String
    c = CStr(a)
 
    If a < 4 Then
        Select Case a
            Case 1
                str2 = " con 1 ngay nua la toi sinh nhat "
                Cells(so_hang, 5).Font.Color = RGB(0, 0, 0)
                Call color1(so_hang, 5, "do")
            Case 2
                str2 = " con 2 ngay nua la toi sinh nhat "
                Call color1(so_hang, 5, "vang")
            Case 3
                str2 = " con 3 ngay nua la toi sinh nhat "
                Call color1(so_hang, 5, "vang")
            End Select
        Else
        str2 = "Sinh nhat trong thang nay !"
        Call color1(so_hang, 5, "")
     End If
        Cells(so_hang, 5).Value = str2
End Sub


Sub color1(a As Integer, b As Integer, mau As String)

    Cells(a, b).Interior.TintAndShade = 0.2
    If mau = "vang" Then
     Cells(a, b).Interior.Color = RGB(255, 255, 0)
     Else
        If mau = "xanh" Then
            Cells(a, b).Interior.Color = RGB(0, 0, 255)
            Else
                If mau = "do" Then
                    Cells(a, b).Interior.Color = RGB(255, 0, 0)
                    Else
                        Cells(a, b).Interior.Color = RGB(255, 255, 255)
                End If
            End If
     End If
End Sub



Sub color2(vi_tri As String, mau As String)
    Range(vi_tri).Interior.TintAndShade = 0.2
    If mau = "vang" Then
     Range(vi_tri).Interior.Color = RGB(255, 255, 0)
     Else
        If mau = "xanh" Then
            Range(vi_tri).Interior.Color = RGB(0, 0, 255)
            Else
                If mau = "do" Then
                    Range(vi_tri).Interior.Color = RGB(255, 0, 0)
                    Else
                        Range(vi_tri).Interior.Color = RGB(255, 255, 255)
                End If
            End If
     End If
End Sub


Function Nhap_lieu()
    ' Nhap 1 loat nhan vien va ngay sinh
    Dim name_fake As String
    Dim num As String
    Dim bo_phan_fake As String
    
    Dim bd_fake As Date
    name_fake = "Ho va ten "
    num = "1"
    Range(b15).Value = name_fake + num
   
End Function

Sub Sample1()
    Dim num As Long
    num = InputBox("Nhap so cot. Ex:1")
    MsgBox Chr(num + 64)
End Sub

Sub del()
Cells(30, 5).Interior.Color = RGB(255, 255, 255)

End Sub

Tương lai

Microsoft có kế hoạch thay thế VBA bằng Visual Studio Tools for Applications (VSTA), một bộ công cụ thay đổi ứng dụng có nền tảng.Net. Tuy nhiên những kĩ thuật này vẫn đang được nghiên cứu, vì vậy ít nhất bộ Office 2007 vẫn sẽ dùng công nghệ VBA.

Tham khảo

Liên kết ngoài