@mas_uqon ...
Kesalahan yang terjadi adalah kesalahan dasar, dimana definisi nama range yang akan digunakan dirujuk ke objek yang salah. Dalam hal ini (pada file yang @mas_uqon lampirkan), nama range Table.DATA merujuk ke objek Sheet1 sedangkan aktualnya, nama range tersebut merujuk ke objek Sheet4 (lihat pada jendela Project Explorer). Solusinya, pada prosedur Sub UserForm_Activate(), ubah baris script berikut:
...
If m_xlDataRange Is Nothing Then
Set m_xlDataRange = Sheet1.Range("Table.DATA")
If m_xlDataRange Is Nothing Then
Err.Clear: On Error GoTo 0
bValid = False
End If
End If
bValid = bValid And (m_xlDataRange.Count > 0)
...
menjadi:
...
If m_xlDataRange Is Nothing Then
Set m_xlDataRange = Sheet4.Range("Table.DATA")
If m_xlDataRange Is Nothing Then
Err.Clear: On Error GoTo 0
bValid = False
Else
bValid = bValid And (m_xlDataRange.Count > 0)
End If
End If
...
Solusi lainnya adalah dengan menyusun script untuk menemukan objek Worksheet yang tepat dari nama range tersebut.
Selain itu, saran saya, sebaiknya definisi nama range Table.DATA sebaiknya dibuat dinamis saja, dengan demikian jumlah baris data yang diproses sesuai dengan jumlah data aktual yang ada di dalam tabel datanya (sehingga untuk baris data yang kosong tidak diproses). Untuk saat ini, tanpa menggunakan nama range dinamis, jumlah baris data yang akan diproses ada 4000 baris, sedangkan data aktualnya hanya 9 baris (meskipun pada form dapat diatur indeks baris yang akan diproses, namun saya rasa lebih baik diotomasi saja sehingga didapat jumlah baris aktualnya). Selain menggunakan nama range dinamis, untuk merujuk ke tabel datanya dapat dilakukan dengan cara merujuk ke range aktualnya, misalkan dengan script:
...
lRow = WorksheetFunction.CountIf(Sheet4.Range("C3:C5000"), "?*") + 2
Set m_xlDataRange = Sheet4.Range("B3:U" & lRow)
...
Mengingat adanya perbedaan antara tabel data yang mas gunakan sekarang dengan tabel data pada contoh sebelumnya, maka ada banyak penyesuaian yang harus mas lakukan.
Demikian.