Coba perhatikan gambar berikut:
Pertama, objek CSW ditetapkan ke objek WS yang mana objek WS sendiri merupakan Sheet Object dari DataSiswa. Padahal, sheet CopyData sudah ditetapkan pada objek WsSW (lihat baris di atasnya). Solusinya, coba ubah script tersebut menjadi:
Set CSW = WsSW.Range("B2:B9999").Find(txtNomorInduk.Value, LookIn:=xlValues)
Kedua, penggunaan script:
WsSW.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
bertujuan untuk mencari baris terakhir yang tidak kosong dan kemudian memindahkannya satu baris ke bawah. Sehingga variabel m_lRowIndexSW
akan selalu berisi baris baru dari data yang ada. Solusinya, script tersebut dapat dimodifikasi menjadi:
...
If Not CSW Is Nothing Then
m_lRowIndexSW = CSW.Row
Else
m_lRowIndexSW = WsSW.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
End If
...
Dengan demikian, jika data ditemukan pada sheet CopyData, maka prosesnya adalah mengubah data tersebut, jika tidak maka prosesnya adalah menambahkan data baru. Jika tidak ingin menambahkan data baru, maka scriptnya bisa dimodifikasi menjadi:
...
If Not CSW Is Nothing Then
m_lRowIndexSW = CSW.Row
With WsSW
.Cells(m_lRowIndexSW, 1) = "=Row()-3"
.Cells(m_lRowIndexSW, 2) = txtNomorInduk.Text
.Cells(m_lRowIndexSW, 3) = txtNama.Text
.Cells(m_lRowIndexSW, 4) = txtKelas.Text
.Cells(m_lRowIndexSW, 5) = txtNilai.Text
.Cells(m_lRowIndexSW, 6) = txtStatus.Text
End With
End If
....
Demikian masalah dan solusi yang dapat saya informasikan... ;)