비주얼 베이직 포 애플리케이션
예제

이 매크로는 워드에서 현재 날짜를 입력하기 위한 단축키를 제공한다:
Sub EnterCurrentDate()
    Selection.InsertDateTime DateTimeFormat:="dd-MM-yy", InsertAsField:=False, _
         DateLanguage:=wdEnglishAUS, CalendarType:=wdCalendarWestern, _
         InsertAsFullWidth:=False
End Sub
VBA는 테이블 측량과 같은 데이터베이스 작업을 자동화하는 데 유용하다:
Sub LoopTableExample

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

    Set db = CurrentDb
    Set rs = db.OpenRecordset("select columnA, columnB from tableA")

    Do Until rs.EOF
         MsgBox rs!columnA & " " & rs!columnB
         rs.MoveNext
    Loop

    rs.Close
    Set db = Nothing
End Sub
VBA는 스프레드시트의 행에서 반복되는 작업들을 자동화하는 데 유용하다. 예를 들어, 다음 코드 예제를 사용하여, 내장 반복 해결사 GOAL SEEK는 수동 메뉴 항목의 반복된 사용을 피하려고, 자동으로 열 배열에서 각 행으로 적용된다. 열 변수 아래에 있는 "C_M"은 몇몇 비선형 방식에서 다른 열 변수 "Target"의 가치를 결정한다. 내장 비선형 해결사 GOAL SEEK는 하나의 값으로 "Target"을 데려가는 "C_M"의 값을 찾으려고 호출한다. 서브루틴은 VBA 편집기 및 명령의 모듈 삽입을 사용하여 통합 문서에 삽입된다. 이것은 VBA 편집기에서, 또는 "핫 키" 또는 키보드 바로가기를 사용하여 직접 호출된다. 행들을 자동으로 업데이트하는 스프레드시트에 대한 값들은 스캔된다.
이것은 서브루틴이 스프레드시트에 대한 변수를 업데이트하는 능력을 가지고 있다는 것을 참고하는 데 유용하다; 함수들은 하지 않는다 - 그들은 단순히 그들의 평가를 보고한다.
라인 Option Explicit은 서브루틴의 일부가 아니다: 그것은 Dim문장에서 지정되지 않은 모든 변수의 신분을 강제하는 컴파일러 옵션을 설정하고, 이것은 오타에 의한 디버깅 문제를 감지하는 것의 어려움을 피한다. 다음 코드에서 표기법 ( ' )은 주석, (_) 라인은 연속을 나타낸다. 코드는 명명된 변수들을 사용한다: 셀의 형태는 셀들은 사용자 선택의 이름들보다는, 특정 행 및 열 번호를 나타내는 표준 셀 지정이 할당되는 것에서 참조한다. 명명은 엑셀 "이름 관리자", 또는 이름 삽입: 생성을 통해 워크시트에서 이루어진다.
Option Explicit

Sub SetTarget()
'
' SetTarget 매크로
'
   Dim J As Integer
   Dim Size As Integer
'
' 스프레드시트에서, 배열 "C_M"은 명명된 열 변수이고
' 그 구성원은 J로 설정한 행 인덱스를 사용한다
' 내장 함수 COUNT는 배열 "C_M"의 크기를 결정한다
'
   Size = Range("C_M").Cells.Count
'
' 배열의 모든 구성원의 초기 값을 설정한다
' C_M부터 1E-06; J = 행 인덱스
'
       For J = 1 To Size
           Range("C_M").Cells(J) = 0.000001
       Next J
'
' "Target"은 차원 "Size"의 스프레드시트에서
' 또다른 명명된 배열이다; 배열 "C_M"처럼 같은 크기이다
'
' 각 행은 각 "Target"은 항목에 따라 달라진다
' 해당 행에서 "C_M"의 값에 따른 지정된 방법은,
' 예를 들어, 이와 같은 함수에 의한 것이다: Target = C_M*C_M
'
' GOAL SEEK는 엑셀에서 내장 반복 해결사이다
'
' 각 "Target" 구성원을 연합하도록 설정하려고 GOAL SEEK를 호출한다: 예를 들어,
' J = 행 인덱스를 취하여, 행 J에서 셀 "C_M"은
' 행 J에서 "Target"은 하나일 때까지 GOAL SEEK에 의해 변경된다
'
' 구문 ("for-next" 세부사항과는 별도이다)은 매크로 녹음기와 함께 발견된다;
' 밑줄 "_"은 줄 연속이다
'
       For J = 1 To Size
           Range("Target").Cells(J).GoalSeek Goal := 1, _
             ChangingCell := Range("C_M").Cells(J)
       Next J
End Sub
VBA 아래의 예제는 셀 범위에서 배열을 얻는 데 사용되고, 배열을 조작하고, 다른 범위에서 다시 값을 설정한다. 이것은 직접 셀 값 하나하나를 설정하는 것보다 몇 배나 빠르게 작동한다.
Sub CalculateSquares(rinput As Range, routput As Range)
   '변수 구체사항들
    Dim values() As Variant
    Dim i As Integer, N As Integer

    '계산하는 행들을 센다
    N = rinput.Rows.Count

    '입력 범위로부터 배열한 값들을 설정한다
    '배열의 예상 형태는 (1 to N, 1 to 1)이다
    values = rinput.Value

    '행들 및 설정 값들을 반복한다
    For i = 1 To N
        values(i, 1) = values(i, 1) ^ 2
    Next i

    '내보내기는 출력 범위의 값 속성을 설정하여
    '스프레드시트로 다시 평가한다.
    routput.Value = values

End Sub
VBA는 마이크로소프트 엑셀 통합 문서에서 사용하기 위해 사용자 정의 함수 (UDF)를 작성하는 데 사용할 수 있다:
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
외부 응용 프로그램 개체 (사용자는 이전에 응용 프로그램에서 참조하는 응용 프로그램의 라이브러리가 있어야 한다)를 추가하는 방법의 예제:
Public Sub Example()
    Dim XLApp As Excel.Application
    Dim WDApp As Word.Application

    Set XLApp = CreateObject("Excel.Application")
    Set WDApp = CreateObject("Word.Application")

    ' ...너의 코드가 여기있다...

    XLApp.Quit
    WDApp.Quit

    Set XLApp = Nothing
    Set WDApp = Nothing
End Sub