Tại sao cùng một UDF, có máy chạy được, có máy báo lỗi? (1 người xem)

  • Thread starter Thread starter theman
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

theman

Thành viên mới
Tham gia
7/3/10
Bài viết
3
Được thích
0
Xin chào các Anh, chị ở diến đàn giaiphapexcel.com
Chả là em mới tập tành viết code VBA trên excel. Trong quá trình học viết code thì cũng có tham khảo 2 hàm tự tạo này của các anh/chị trên diễn đàn mình, đó là:
1, Hàm xác định 1 sheet có tồn tại:
Function SheetExist(wksName As Variant) As Variant
On Error Resume Next
SheetExist = Not ActiveWorkbook.Sheets(wksName) Is Nothing
End Function

2, Hàm lấy số ngẫu nhiên không trùng:
Function URNum(Bottom As Long, Top As Long, Amount As Long)
'Application.Volatile '<--- Neu muon gia tri thay doi khi bam F9
On Error Resume Next
If Amount > Top - Bottom + 1 Then Amount = Top - Bottom + 1
With CreateObject("Scripting.Dictionary")
Do
.Add Int(Rnd() * (Top - Bottom + 1)) + Bottom, ""
Loop Until .Count = Amount
URNum = WorksheetFunction.Transpose(.Keys)
End With
End Function

Trước đây, khi mới áp dụng 2 hàm này thì code chạy ngon lành, nhưng không hiểu sao dạo gần đây khi e sử dụng 2 hàm này trong code của mình thì hàm số 1 bị báo lỗi Subcript out of Range khi có sheet không tồn tại và hàm số 2 báo lỗi "This key is already associated with an element of this colection".
Điều đáng nói là cùng code e mang sang các máy khác thì chạy ngon lành, không báo lỗi gì cả. Em muốn hỏi các anh/chị là tại sao lại như thế và có phải là do máy em thiết lập chế độ gì mà bị như thế ko?
 
Bạn vào Tools - Option - General - Error trapping, chuyển break on all errors thành break on unhandled errors.
 
Upvote 0
Thanks anh Hau151978 rất nhiều. Sau khi làm như anh hướng dẫn thì code của e đã chạy ngon lành rồi. Tiện đây, anh có thể giải thích rõ hơn cho e về 2 chế độ Error trapping này ko ạ?
 
Upvote 0
Thanks anh Hau151978 rất nhiều. Sau khi làm như anh hướng dẫn thì code của e đã chạy ngon lành rồi. Tiện đây, anh có thể giải thích rõ hơn cho e về 2 chế độ Error trapping này ko ạ?
Mình cũng không rõ lắm về cái này. Mình thường sử dụng "break all" khi test chương trình có sử dụng bẫy lỗi "on error...", chương trình sẽ luôn dừng khi lỗi, test lỗi xong thì chuyển về "break unhandled" để bẫy lỗi có hiệu lực.
 
Upvote 0

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

Back
Top Bottom