Belajar VBA - Eksternal: File System, API & SQL
Series/Belajar VBA/Episode 18
Episode 18 of 25

Belajar VBA - Eksternal: File System, API & SQL

Menghubungkan VBA ke dunia luar: membaca dan menulis file teks dengan FileSystemObject, menjalankan program dengan Shell, memanggil REST API dengan WinHTTP dan XMLHTTP, serta mengakses database lewat ADODB dan QueryTables

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Selama ini macro bekerja di dalam dunia Office. Episode ini membuka pintunya: FileSystemObject untuk file dan folder, Shell untuk menjalankan program, WinHTTP/XMLHTTP untuk REST API, dan ADODB untuk database — empat senjata yang mengubah Excel dari pengolah data menjadi pusat integrasi.

Mengapa ini penting? Karena data tidak selalu ada di dalam workbook. Ia ada di file log, di API web, dan di database perusahaan. Macro yang bisa membaca sumber-sumber itu — tanpa menyalin-menempel manual — adalah macro yang benar-benar menghemat waktu.

FileSystemObject: Membaca & Menulis File

FileSystemObject (FSO) adalah pustaka Windows untuk bekerja dengan file dan folder. Aktifkan via Tools → References → centang Microsoft Scripting Runtime, lalu:

Menulis file teks
Sub TulisFile()
    Dim fso As Object
    Dim teks As Object
 
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set teks = fso.CreateTextFile("C:\vba-lab\log.txt", True)
 
    teks.WriteLine "Baris pertama log"
    teks.WriteLine "Waktu: " & Now
    teks.Close
 
    Set teks = Nothing
    Set fso = Nothing
End Sub

Membaca file sebaliknya:

Membaca file teks
Sub BacaFile()
    Dim fso As Object
    Dim teks As Object
 
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set teks = fso.OpenTextFile("C:\vba-lab\log.txt", 1)  ' 1 = ForReading
 
    Do While Not teks.AtEndOfStream
        Debug.Print teks.ReadLine
    Loop
 
    teks.Close
    Set teks = Nothing
    Set fso = Nothing
End Sub

Mode ForReading adalah 1, ForWriting = 2, ForAppending = 8. AtEndOfStream menandai akhir file — pasangan sempurna untuk Do While.

FSO: Mengelola Folder

FSO juga memeriksa folder dan membuat direktori:

Memastikan folder ada
Sub PastikanFolder(path As String)
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
 
    If Not fso.FolderExists(path) Then
        fso.CreateFolder path
    End If
 
    Set fso = Nothing
End Sub

Pola "buat folder jika belum ada" ini wajib sebelum menulis file output — menghindari error path not found.

Shell: Menjalankan Program

Shell menjalankan program eksternal:

Membuka Notepad
Shell "notepad.exe", vbNormalFocus

Untuk menunggu program selesai, kombinasikan dengan WScript.Shell dan parameter WaitOnReturn:

WScript.Shell dengan tunggu
Dim wsh As Object
Set wsh = CreateObject("WScript.Shell")
wsh.Run "C:\scripts\proses.bat", 1, True
Set wsh = Nothing

Parameter terakhir True berarti tunggu hingga selesai sebelum melanjutkan kode.

REST API: WinHTTP & XMLHTTP

VBA bisa memanggil REST API — antarmuka web yang mengembalikan data JSON/XML. Dua objek yang umum: MSXML2.XMLHTTP (lebih mudah) dan WinHttp.WinHttpRequest.5.1 (lebih tangguh untuk produksi).

Memanggil REST API
Sub AmbilAPI()
    Dim http As Object
    Dim hasil As String
 
    Set http = CreateObject("MSXML2.XMLHTTP")
    http.Open "GET", "https://api.contoh.com/data", False
    http.setRequestHeader "Accept", "application/json"
    http.Send
 
    If http.Status = 200 Then
        hasil = http.responseText
        Debug.Print Left(hasil, 200)
    Else
        MsgBox "HTTP " & http.Status
    End If
 
    Set http = Nothing
End Sub
  • Open(method, url, async) — mode False (sinkron) membuat kode menunggu respons.
  • Status — kode HTTP: 200 sukses, 404 tidak ditemukan, 401 tidak diotorisasi.
  • responseText — isi respons.

Warning

Untuk API berautentikasi, jangan pernah menaruh token/API key di dalam kode — kode bisa dibaca siapa pun yang membuka project. Simpan kredensial di sel terproteksi, file konfigurasi terpisah, atau tanyakan via InputBox. Kredensial yang bocor di macro adalah insiden keamanan nyata.

Membaca JSON

Excel VBA tidak punya parser JSON bawaan. Solusi cepat untuk data sederhana: pola Split/Mid pada string JSON pendek.

Ekstrak nilai dari JSON sederhana
Sub BacaJSON()
    Dim json As String
    Dim nilai As String
 
    json = "{""nama"":""Budi"",""usia"":30}"
    nilai = Mid(json, InStr(json, """nama"":") + 8, 50)
    nilai = Split(nilai, """")(0)
    Debug.Print nilai   ' Budi
End Sub

Ini rapuh untuk JSON kompleks — untuk API yang serius, gunakan library parser VBA-JSON dari GitHub (episode 23 akan menyinggung sumbernya).

ADODB: SQL ke Database

Database eksternal — SQL Server, MySQL, PostgreSQL — diakses dengan ADODB.Connection:

Query SQL Server dari Excel
Sub AmbilDariDB()
    Dim conn As Object
    Dim rs As Object
    Dim connStr As String
 
    connStr = "Provider=SQLOLEDB;Data Source=server-01;" & _
              "Initial Catalog=Laporan;Integrated Security=SSPI;"
 
    Set conn = CreateObject("ADODB.Connection")
    conn.Open connStr
 
    Set rs = conn.Execute("SELECT Nama, Total FROM Penjualan WHERE Tahun = 2026")
 
    Range("A1").CopyFromRecordset rs
 
    rs.Close
    conn.Close
    Set rs = Nothing
    Set conn = Nothing
End Sub
  • conn.Open dengan connection string menentukan server & database.
  • conn.Execute(sql) menjalankan query dan mengembalikan recordset.
  • Range.CopyFromRecordset — cara paling cepat menyalin seluruh hasil query ke sheet.

QueryTables: Tabel Data dari Sumber Luar

QueryTables membuat "tabel hidup" yang menyegarkan datanya dari sumber eksternal — mirip Power Query versi klasik:

QueryTables dari database
Sub BuatQuery()
    Dim qt As Object
 
    Set qt = ThisWorkbook.Worksheets("Data").QueryTables.Add( _
        Connection:="OLEDB;Provider=SQLOLEDB;Data Source=server-01;" & _
                    "Initial Catalog=Laporan;Integrated Security=SSPI;", _
        Destination:=Range("A1"))
    qt.CommandText = "SELECT Nama, Total FROM Penjualan"
    qt.Refresh
End Sub

Data di sheet bisa disegarkan kapan pun dengan qt.Refresh — tanpa membuka ulang koneksi dari kode.

Common Pitfalls

KesalahanDampak
Lupa Set ... = Nothing pada FSO/koneksiProses/objek menggantung
Token API di dalam kodeKredensial bocor ke pembaca kode
http.Open mode False tapi memproses respons kosongError parsing
Connection string salah formatError koneksi yang membingungkan
Path file diuji dengan asumsiError file not found; selalu FolderExists

Penutup

Pada episode 18 ini, kalian telah menghubungkan VBA ke dunia luar.

Inti yang harus dibawa pulang:

  • FileSystemObject: baca/tulis file teks dan kelola folder; pasangan AtEndOfStream + Do While.
  • Shell / WScript.Shell: jalankan program; Run(..., True) untuk menunggu selesai.
  • WinHTTP/XMLHTTP: panggil REST API, cek Status, baca responseText; jangan taruh token di kode.
  • ADODB: koneksi ke database; CopyFromRecordset menyalin hasil query ke sheet.
  • QueryTables: tabel hidup yang bisa Refresh kapan saja.

Di episode 19 selanjutnya kita membahas VBA 7.1 & fitur terbaru di Microsoft 365 — dukungan 64-bit dengan PtrSafe dan LongLong, kompatibilitas lintas versi Office, posisi VBA yang terus diperbarui bersama Office, serta batasannya seperti tidak adanya paralelisme modern. Sampai jumpa di episode 19!