VBA - hàm Find bị lỗi

Liên hệ QC

Phương Phương mito

Thành viên thường trực
Tham gia
1/5/19
Bài viết
275
Được thích
65
Kính gửi ANh chị và các bạn
Em muốn tìm ký tự Car trong vùng V2:V65000. Và đưa ra thông báo. Nhưng báo lỗi "Object required". Anh chị giúp em sửa với ạ.

Dim x as Integer

Set x = Range("V2:V65000").Find("Car").Row

If x > 0 Then

MsgBox "Ton kho xe Car" & x

Else
MsgBox " Hoan thanh ban hang"
End If
 
Kính gửi ANh chị và các bạn
Em muốn tìm ký tự Car trong vùng V2:V65000. Và đưa ra thông báo. Nhưng báo lỗi "Object required". Anh chị giúp em sửa với ạ.

Dim x as Integer

Set x = Range("V2:V65000").Find("Car").Row

If x > 0 Then

MsgBox "Ton kho xe Car" & x

Else
MsgBox " Hoan thanh ban hang"
Bỏ Set đi. x là số chứ có phải đối tượng đâu mà SET.

Ngoài ra vùng có tới tận dòng có chỉ số 65000, nhưng kiểu Integer chỉ ở trong phạm vi (-32768 ; 32767). Vậy hãy dùng kiểu Log: Dim x As Long.
Với code của bạn nếu Car không được tìm thấy thì sẽ có lỗi. Vậy hoặc phải làm như bài #2, hoặc phải bẫy lỗi:
Mã:
Dim x as Long

On Error Resume Next
x = Range("V2:V65000").Find("Car").Row
If Err.Number then
    MsgBox " Hoan thanh ban hang"
Else
    MsgBox "Ton kho xe Car" & x
End If
On Error Goto 0
 
Lần chỉnh sửa cuối:
Upvote 0
=> x dương = 32767
=> Range("V2:V65000").Find("Car").Row trả về số lớn hơn 32767 thì lăn ra ngỏm.

Sửa lại:
Dim cell_ as Range
Set cell_ = Range("V2:V65000").Find("Car")
If not cell_ is Nothing then
msgbox "tìm thấy"
Else
Msgbox "không thấy"
End if
Dạ em sửa theo anh rồi mà cả hai Case nó đều trả kết quả là "không thấy". Không rõ sao ạ.
 
Upvote 0
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Có nhiều ô được tìm thấy thì sao?
Phương thức Find() sẽ tìm ra ô (Range), & bạn nên viết chân phương như sau:
Dim Rng As Range, sRng As Range
Dim MyAdd As String

Set Rng= Range("V2:V65000")
Set sRng=Rng.Find("Car', , xlFormulas, xlWhole)
If sRng Is Nothing Then
MsgBox "Nothing"
Else
Msgbox sRng Row

End If

Tạm thời chỉ vậy, Còn muốn như í thì đọc lại bài tổng quan về phương thức này;
Nếu vẫn chưa xong thì gởi file giả lập của bạn lên
 
Upvote 0
Dạ, em đã làm được rồi ạ ! Em cảm ơn các anh đã giúp đỡ ạ !
Thế có biết lý do không?
Khi tìm bằng Ctrl F sẽ có các tuỳ chọn Match case, Formula, Value. Những tuỳ chọn này vẫn được lưu giữ kể cả khi đóng hộp thoại tìm kiếm, và code Find sẽ tìm theo những tuỳ chọn này.
- Giả sử Match case được đánh dấu, tồn tại car mà tìm Car sẽ không thấy
- Giả sử chọn Formula, mà Car lại là kết quả của công thức, thì cũng không thấy
- Giả sử đánh dấu Match entire cell contents mà tồn tại chỉ có Card thì cũng không thấy (không phải trường hợp của bạn, nhưng cũng nên ghi nhớ)
- Nếu ô chọn đang ở cuối bảng thì chỉ tìm phía sau ô chọn và không thấy

Để tránh những trường hợp trên thì viết lệnh Find nên viết đầy đủ

Set cell_ = Range("V2:V65000").Find("Car" After:=Range("V2"), LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True)
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom