de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 JBurace
JBurace
Question

Bagaimana cara menangani kesalahan 1004 Kesalahan dengan WorksheetFunction.VLookup?

Saya memiliki kode ini:

Dim wsFunc As WorksheetFunction: Set wsFunc = Application.WorksheetFunction
Dim ws As Worksheet: Set ws = Sheets("2012")
Dim rngLook As Range: Set rngLook = ws.Range("A:M")

'within a loop
  currName = "Example"
  cellNum = wsFunc.VLookup(currName, rngLook, 13, False)

VLookup tidak diharapkan untuk selalu menemukan hasil; tetapi ketika tidak menemukan hasil, baris tersebut error sebelum saya bahkan dapat memeriksa kesalahan pada baris berikutnya.

Kesalahan:

Kesalahan waktu berjalan '1004': Tidak bisa mendapatkan properti VLookup dari kelas WorksheetFunction

Ini berfungsi dengan baik ketika hasilnya ditemukan. Apa cara yang baik untuk menangani kesalahan di sini?

15 2013-08-05T16:33:55+00:00 3
David Zemens
David Zemens
Pertanyaan edit 7 Juli 2014 в 8:14
Pemrograman
vba
excel
excel-vba
Doug Glancy
Doug Glancy
5 Agustus 2013 в 5:30
2013-08-05T17:30:25+00:00
Lebih
Sumber
Sunting
#20806963

Alih-alih WorksheetFunction.Vlookup, Anda dapat menggunakan Application.Vlookup. Jika Anda mengatur Varian sama dengan ini, ia mengembalikan Error 2042 jika tidak ada kecocokan yang ditemukan. Anda kemudian dapat menguji varian - cellNum dalam hal ini - dengan IsError:

Sub test()
Dim ws As Worksheet: Set ws = Sheets("2012")
Dim rngLook As Range: Set rngLook = ws.Range("A:M")
Dim currName As String
Dim cellNum As Variant

'within a loop
currName = "Example"
cellNum = Application.VLookup(currName, rngLook, 13, False)
If IsError(cellNum) Then
    MsgBox "no match"
Else
    MsgBox cellNum
End If
End Sub

Versi Aplikasi dari fungsi VLOOKUP dan MATCH memungkinkan anda untuk menguji error tanpa memunculkan error. Jika anda menggunakan versi WorksheetFunction, anda membutuhkan penanganan error yang berbelit-belit yang mengarahkan kembali kode anda ke error handler, kembali ke pernyataan berikutnya untuk dievaluasi, dll. Dengan fungsi Application, Anda dapat menghindari kekacauan itu.

Hal di atas dapat disederhanakan lebih lanjut dengan menggunakan fungsi IIF. Metode ini tidak selalu tepat (misalnya, jika Anda harus melakukan lebih banyak / prosedur yang berbeda berdasarkan If/Then) tetapi dalam kasus ini di mana Anda hanya mencoba untuk menentukan prompt apa yang akan ditampilkan di MsgBox, itu harus bekerja:

cellNum = Application.VLookup(currName, rngLook, 13, False)
MsgBox IIF(IsError(cellNum),"no match", cellNum)

Pertimbangkan metode-metode tersebut bukannya pernyataan On Error .... Keduanya lebih mudah dibaca dan dipelihara - hanya sedikit hal yang lebih membingungkan daripada mencoba mengikuti sekumpulan pernyataan GoTo dan Resume.

David Zemens
David Zemens
Jawaban edit 6 Juli 2014 в 1:44
51
0
Solution / Answer
 Purchawka
Purchawka
5 Agustus 2013 в 4:58
2013-08-05T16:58:13+00:00
Lebih
Sumber
Sunting
#20806962

Ada cara untuk melewatkan kesalahan di dalam kode dan tetap melanjutkan perulangan, semoga membantu:

Sub new1()

Dim wsFunc As WorksheetFunction: Set wsFunc = Application.WorksheetFunction
Dim ws As Worksheet: Set ws = Sheets(1)
Dim rngLook As Range: Set rngLook = ws.Range("A:M")

currName = "Example"
On Error Resume Next ''if error, the code will go on anyway
cellNum = wsFunc.VLookup(currName, rngLook, 13, 0)

If Err.Number <> 0 Then
''error appeared
    MsgBox "currName not found" ''optional, no need to do anything
End If

On Error GoTo 0 ''no error, coming back to default conditions

End Sub
4
0
 cauchy
cauchy
6 September 2015 в 10:15
2015-09-06T10:15:23+00:00
Lebih
Sumber
Sunting
#20806964

Dari pengalaman saya yang terbatas, hal ini terjadi karena dua alasan utama:

  1. lookup_value (arg1) tidak ada dalam table_array (arg2)

Solusi sederhana di sini adalah menggunakan error handler yang diakhiri dengan Resume Next

  1. Format arg1 dan arg2 tidak diinterpretasikan dengan benar

Jika lookup_value Anda adalah sebuah variabel, Anda bisa mengapitnya dengan TRIM()

cellNum = wsFunc.VLookup(TRIM(currName), rngLook, 13, False)

1
0
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Asilbek Qadamboyev
Terdaftar 6 jam yang lalu
2
Akshit Mehta
Terdaftar 2 hari yang lalu
3
me you
Terdaftar 5 hari yang lalu
4
Никита иванов
Terdaftar 1 minggu yang lalu
5
Alex1976G_06
Terdaftar 1 minggu yang lalu
ID
JA
RU
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi