Cần giúp đỡ sửa lỗi khi sử dụng INDEX MATCH trong USERFORM+VBA

Liên hệ QC

caoviethung1911

Thành viên mới
Tham gia
25/10/10
Bài viết
1
Được thích
0
Chào các bác,
Tôi đang làm 1 cái userform nhập dữ liệu. Có đang sử dụng index và match để code trong userform với mục đích nhập 1 ô thì các dữ liệu ô khác tự động ăn theo.
Nhưng hiện tại tôi đang gặp lỗi khi MATCH textbox.value tại userform với ô trong sheet.
Các bác xem giúp tôi cần sửa ntn để code chạy được nhỉ?
Tôi có attach file .xlsm và screenshot để các bác xem cho dễ hiểu.
Cám ơn!
 

File đính kèm

  • Screenshot3.png
    Screenshot3.png
    200.5 KB · Đọc: 25
  • Screenshot2.png
    Screenshot2.png
    208.5 KB · Đọc: 24
  • Screenshot1.png
    Screenshot1.png
    135.2 KB · Đọc: 24
  • Form REPO CPNY.xlsm
    43.5 KB · Đọc: 9
Cột E trên sheet chứa các giá trị SỐ, vậy muốn tìm SỐ thì phải "ÉP" txtcorp1.Value thành SỐ.
Mã:
corpID = Application.WorksheetFunction.Match(CLng(txtcorp1.Value), Sheet4.Range("E:E"), 0)
Cũng giống công thức trên sheet, nếu không tìm thấy thì có lỗi. Vậy phải phục vụ trường hợp lỗi nếu sảy ra.

Trong trường hợp này VBA chiếu cố nên tự "hiểu" nhưng nên tập thói quen tốt, tư duy lôgíc. MATCH trả về VỊ TRÍ, tức một con SỐ. Vậy chả lý gì lại Dim corpID As String. Hãy sửa lại thành Dim corpID As Long.
 
Upvote 0
. . . Tôi đang làm 1 cái userform nhập dữ liệu. Có đang sử dụng index và match để code trong userform với mục đích nhập 1 ô thì các dữ liệu ô khác tự động ăn theo.
Nhưng hiện tại tôi đang gặp lỗi khi MATCH textbox.value tại userform với ô trong sheet.
Các bác xem giúp tôi cần sửa ntn để code chạy được nhỉ?
Tôi có attach file .xlsm và screenshot để các bác xem cho dễ hiểu.
Cám ơn!
Để chạy được thì trước khi vào lỗi bạn xài lệnh On Error Resume Next là OK thôi;
Còn để chạy đúng thì phải bãy lỗi kiểu khác khấm khá hơn

Ví dụ: (& chỉ là ví dụ đơn thuần thôi nha)
PHP:
Sub ABCXYZ()
. . . . . .
On Error Goto LoiCT
. . . . . .

Err_:
  MsgBox "Xin Chào!", , "Chúc May Nhá!"
 Exit Sub
LoiCT:
 If Err=1004 then
   On Error Resume Next
 Else
      MsgBox Error,, Err & " "   '  & Erl()  '
      Resume Err_
 End If
End Sub
 
Upvote 0
Để chạy được thì trước khi vào lỗi bạn xài lệnh On Error Resume Next là OK thôi;
Còn để chạy đúng thì phải bãy lỗi kiểu khác khấm khá hơn
...
Đối với hàm WorksheetFunction thì kiểu kinh điển là On Error Resume Next.
Lệnh này chỉ tạm thời giúp chặn chương trình không "dãy nãy Lên".
Kế đó, người dùng (người viết code) phải có code test cái lỗi đó:
On Error Resume Next ' tạm thời nhảy qua nếu lệnh gọi WorkSheetFunction trả về lỗi
If Err.Number <> Then ' có lỗi
' code gì đó
Err.Clear ' xóa lỗi
End If
' ngay sau chỗ này cần lệnh On Error Goto gì đó để trả về trạng thái bẫy lỗi ban đầu

Rất tiếc là VBA không có lệnh "saved" trạng thái ban đầu để có thể quay về một cách dễ dàng. Cách dễ nhất là gói chúng trong một hàm. Như vậy lệnh bẫy này không ảnh hưởng lệnh kia.

Tuy nhiên, nếu phải gói chúng trong hàm thì dùng quách luôn Application.Hàm luôn cho khỏe.
Khi dùng kiểu này thì Application nó bẫy lỗi giùm, ta chỉ cần xét lại xem nó trả về cái gì, kết quả hay lỗi.
 
Upvote 0
Web KT

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

Back
Top Bottom