Lompat ke konten utama
←

Makro dan VBA Excel

Pelajaran 14 dari 14

Prosedur, galat, dan debugging

Misi: merawat makro rekap denda tagihan

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.

BarisPelanggan (A)Hari telat (C)Nilai (D)
2Toko Berkah128000000
3CV Mandiri4515000000
4UD Sejahtera05000000
5Toko Amanah3020000000
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
Pilih satu jawaban

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
Pilih satu jawaban

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
Pilih satu jawaban

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
Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Lanjutkan ke