Setelah pelajaran ini kamu bisa membaca makro warisan yang memakai Function, perulangan, dan On Error, memprediksi hasilnya pada data biasa dan data bermasalah, serta memilih cara debugging yang tepat.
±17 menit
4 latihan
Diperiksa 28 Okt 2026
Latihan di pelajaran ini butuh akun gratis. Progres, kode, dan catatanmu hanya tersimpan di browser ini. Masuk untuk menyimpannya
Materi
Kamu baru bergabung dengan bagian keuangan PT Sinar Nusantara di Balikpapan dan mewarisi buku kerja tagihan.xlsm. Lembar Tagihan berisi nama pelanggan di kolom A, nomor faktur di B, jumlah hari terlambat di C, dan nilai tagihan di D; kolom E diisi denda oleh makro. Persen denda di makro adalah aturan contoh perusahaan ini, bukan aturan umum.
Baris
Pelanggan (A)
Hari telat (C)
Nilai (D)
2
Toko Berkah
12
8000000
3
CV Mandiri
45
15000000
4
UD Sejahtera
0
5000000
5
Toko Amanah
30
20000000
Option Explicit
' Denda keterlambatan tagihan. Ditulis 2024, dirawat bagian keuangan.
Function Denda(ByVal hariTelat As Long, ByVal nilai As Double) As Double
If hariTelat <= 0 Then
Denda = 0
ElseIf hariTelat <= 30 Then
Denda = nilai * 0.01
Else
Denda = nilai * 0.02
End If
End Function
Sub RekapTagihan()
Dim ws As Worksheet
Dim r As Long, akhir As Long
Dim totalDenda As Double
On Error GoTo Gagal
Set ws = ThisWorkbook.Worksheets("Tagihan")
akhir = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For r = 2 To akhir
ws.Cells(r, 5).Value = Denda(ws.Cells(r, 3).Value, ws.Cells(r, 4).Value)
totalDenda = totalDenda + ws.Cells(r, 5).Value
Next r
ws.Range("H1").Value = totalDenda
Exit Sub
Gagal:
ws.Range("H2").Value = "Galat " & Err.Number & " di baris " & r
End Sub
Baca makro ini dengan urutan dari pelajaran sebelumnya. Option Explicit dan Dim menunjukkan data yang dipakai. Denda menerima dua argumen ByVal, jadi nilai sel diubah ke Long dan Double saat dikirim; nilai yang tidak bisa diubah memicu galat di baris pemanggil. Perulangan menulis denda tiap baris dan menjumlahkannya. On Error GoTo Gagal mengirim galat apa pun ke label Gagal, dan Exit Sub mencegah kode penanganan berjalan saat tidak ada galat.
Latihan
0/4 lulus
Misi akhir modul: luluskan minimal 4 dari 4 tugas. Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.
Latihan 1 dari 4
Dengan data di tabel, berapa nilai H1 setelah RekapTagihan berjalan?
Option Explicit
' Denda keterlambatan tagihan. Ditulis 2024, dirawat bagian keuangan.
Function Denda(ByVal hariTelat As Long, ByVal nilai As Double) As Double
If hariTelat <= 0 Then
Denda = 0
ElseIf hariTelat <= 30 Then
Denda = nilai * 0.01
Else
Denda = nilai * 0.02
End If
End Function
Sub RekapTagihan()
Dim ws As Worksheet
Dim r As Long, akhir As Long
Dim totalDenda As Double
On Error GoTo Gagal
Set ws = ThisWorkbook.Worksheets("Tagihan")
akhir = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For r = 2 To akhir
ws.Cells(r, 5).Value = Denda(ws.Cells(r, 3).Value, ws.Cells(r, 4).Value)
totalDenda = totalDenda + ws.Cells(r, 5).Value
Next r
ws.Range("H1").Value = totalDenda
Exit Sub
Gagal:
ws.Range("H2").Value = "Galat " & Err.Number & " di baris " & r
End Sub
Latihan 2 dari 4
Seseorang mengetik tanda - (teks) di C4, bukan angka 0. Apa hasil RekapTagihan?
Option Explicit
' Denda keterlambatan tagihan. Ditulis 2024, dirawat bagian keuangan.
Function Denda(ByVal hariTelat As Long, ByVal nilai As Double) As Double
If hariTelat <= 0 Then
Denda = 0
ElseIf hariTelat <= 30 Then
Denda = nilai * 0.01
Else
Denda = nilai * 0.02
End If
End Function
Sub RekapTagihan()
Dim ws As Worksheet
Dim r As Long, akhir As Long
Dim totalDenda As Double
On Error GoTo Gagal
Set ws = ThisWorkbook.Worksheets("Tagihan")
akhir = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For r = 2 To akhir
ws.Cells(r, 5).Value = Denda(ws.Cells(r, 3).Value, ws.Cells(r, 4).Value)
totalDenda = totalDenda + ws.Cells(r, 5).Value
Next r
ws.Range("H1").Value = totalDenda
Exit Sub
Gagal:
ws.Range("H2").Value = "Galat " & Err.Number & " di baris " & r
End Sub
Latihan 3 dari 4
Seorang rekan mengganti nama lembar Tagihan menjadi Tagihan Okt tanpa mengubah kode. Apa yang terjadi saat RekapTagihan dijalankan?
Option Explicit
' Denda keterlambatan tagihan. Ditulis 2024, dirawat bagian keuangan.
Function Denda(ByVal hariTelat As Long, ByVal nilai As Double) As Double
If hariTelat <= 0 Then
Denda = 0
ElseIf hariTelat <= 30 Then
Denda = nilai * 0.01
Else
Denda = nilai * 0.02
End If
End Function
Sub RekapTagihan()
Dim ws As Worksheet
Dim r As Long, akhir As Long
Dim totalDenda As Double
On Error GoTo Gagal
Set ws = ThisWorkbook.Worksheets("Tagihan")
akhir = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For r = 2 To akhir
ws.Cells(r, 5).Value = Denda(ws.Cells(r, 3).Value, ws.Cells(r, 4).Value)
totalDenda = totalDenda + ws.Cells(r, 5).Value
Next r
ws.Range("H1").Value = totalDenda
Exit Sub
Gagal:
ws.Range("H2").Value = "Galat " & Err.Number & " di baris " & r
End Sub
Latihan 4 dari 4
Denda di salah satu baris tampak janggal. Kamu ingin melihat nilai hariTelat dan nilai yang diterima Denda untuk setiap baris tanpa menambah tulisan apa pun ke lembar. Langkah mana yang sesuai alat debugging VBE?
Option Explicit
' Denda keterlambatan tagihan. Ditulis 2024, dirawat bagian keuangan.
Function Denda(ByVal hariTelat As Long, ByVal nilai As Double) As Double
If hariTelat <= 0 Then
Denda = 0
ElseIf hariTelat <= 30 Then
Denda = nilai * 0.01
Else
Denda = nilai * 0.02
End If
End Function
Sub RekapTagihan()
Dim ws As Worksheet
Dim r As Long, akhir As Long
Dim totalDenda As Double
On Error GoTo Gagal
Set ws = ThisWorkbook.Worksheets("Tagihan")
akhir = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For r = 2 To akhir
ws.Cells(r, 5).Value = Denda(ws.Cells(r, 3).Value, ws.Cells(r, 4).Value)
totalDenda = totalDenda + ws.Cells(r, 5).Value
Next r
ws.Range("H1").Value = totalDenda
Exit Sub
Gagal:
ws.Range("H2").Value = "Galat " & Err.Number & " di baris " & r
End Sub