@Meiby ...
Jelas saja akan error. Pada gambar, terlihat perintah untuk mendefinisikan objek xlWS melalui nama sheet pada variabel sName sebelum variabel sName diisi dengan nilai tertentu (variabel sName masih kosong). Alhasil, objek xlWS didefinisikan ke sheet yang tidak ada! Coba periksa baris berikut:
Public Sub CariData()
Dim xlWS As Worksheet
Dim sWhat As String, sName As String
Dim lRow As Long, lIdx As Long
Dim xlRange As Range
Set xlWS = Worksheets(sName) '+-- <= variabel sName = vbNullstring (kosong)
'Set xlRange = Sheet1.Range("C3")
If Len(xlRange.Value) Then
...
Sebagaimana yang telah saya sampaikan di atas, pada bagian:
...
If lIdx Then
Sheet1.Cells(3, "H") = "Sheet " & sName & " — baris ke-" & lRow
End If
...
ditentukan apakah data ditemukan atau tidak. Jadi seharusnya, definisi objek xlWS harus berada di dalam blok kondisional tersebut, misalkan:
...
If lIdx Then
Set xlWS = Worksheets(sName)
Set xlRangeDBase = xlWS.Range(xlWS.Cells(lRow, "A"), xlWS.Cells(lRow, "D"))
Sheet1.Range("B10:E10") = xlRangeDBase.Value
End If
...
Pada blok kondisional tersebut, jika variabel lIdx bernilai > 0, maka artinya ada data yang ditemukan. Dengan demikian proses aktual untuk mengisi data dilakukan di dalam blok tersebut. Untuk baris script lainnya (dari awal sampai sebelum blok kondisional tersebut) pada dasarnya hanya untuk melakukan proses pencarian data saja. Oleh karena ada kemungkinan data ditemukan dalam beberapa sheet, maka cara termudah adalah dengan membuat sebuah variabel yang berfungsi sebagai penanda (bahwa data ditemukan). Jika data tidak ditemukan, maka variabel lIdx akan bernilai 0. Cara lain untuk membuat variabel penanda, bisa dengan menggunakan variabel bertipe Boolean. Saya menggunakan variabel lIdx hanya sebagai contoh, agar dapat saya gunakan untuk menampilkan daftar data yang ditemukan...
Jadi, gunakan blok kondisional:
...
If lIdx Then
'+--- Susun di blok ini proses untuk menampilkan datanya.
End If
...
untuk menampilkan hasil pencarian. Klo perlu, tambahkan pesan jika data tidak ditemukan, misalkan dengan menambahkan perintah seperti berikut:
...
If lIdx Then
'+--- Susun di blok ini proses untuk menampilkan datanya.
Else
MsgBox "Data tidak ditemukan!"
End If
...
Demikian, selamat mencoba.