Đặt báo lỗi khi không tìm thấy file (1 người xem)

Liên hệ QC

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

phuocrobe

Thành viên hoạt động
Tham gia
2/11/16
Bài viết
131
Được thích
0
Mình có 1 file tổng hợp khi chạy macro sẽ cập nhật dữ liệu từ các file có tên trong vùng Sheets("HUONGDAN").Range("B6:B41") , nhưng có những trường hợp khi nhập tên file vào vùng B6:B41 không đúng với tên file trong cùng thư mục thì code vẫn chạy mà không báo lỗi dẫn đến số liệu không chính xác.

Vì vậy nhờ các anh chị giúp mình cài thêm báo lỗi khi không tìm thấy file ở vùng B6:B41 để hạn chế sai sót. Em xin cám ơn nhiều ạ -=.,,

Public Sub tonghop()Application.ScreenUpdating = False
Dim tArr(), sArr(), dArr(1 To 30, 1 To 11), MyName As String, I As Long, J As Long, K As Long, N As Long, Pat As String


With ActiveWorkbook
tArr = Sheets("HUONGDAN").Range("B6:B41").Value
Pat = ActiveWorkbook.Path & ""
MyName = .Name
End With


For N = 1 To 35
If tArr(N, 1) <> "" Then
On Error Resume Next
Workbooks.Open Filename:=Pat & tArr(N, 1)
If Err.Number <> 0 Then GoTo tiep
With Sheets("TG")
sArr = .Range("A16", .Range("A65536").End(xlUp)).Resize(, 11).Value
End With
For I = 1 To UBound(sArr)
If sArr(I, 3) <> "" Then
K = K + 1: dArr(K, 1) = K
For J = 2 To 11
dArr(K, J) = sArr(I, J)
Next J

End If

Next I
ActiveWorkbook.Close False
End If
tiep:
Err.Clear
Next N
Workbooks(MyName).Activate
With Sheets("TG")
.Range("A16").Resize(30, 11).ClearContents
.Range("A16").Resize(K, 11) = dArr
End With
End Sub
 
Mình có 1 file tổng hợp khi chạy macro sẽ cập nhật dữ liệu từ các file có tên trong vùng Sheets("HUONGDAN").Range("B6:B41") , nhưng có những trường hợp khi nhập tên file vào vùng B6:B41 không đúng với tên file trong cùng thư mục thì code vẫn chạy mà không báo lỗi dẫn đến số liệu không chính xác.

Vì vậy nhờ các anh chị giúp mình cài thêm báo lỗi khi không tìm thấy file ở vùng B6:B41 để hạn chế sai sót. Em xin cám ơn nhiều ạ -=.,,

if dir("duongdan check file") ="" then msgbox("file không tồn tại")
 
Upvote 0
Hix hix. Em còn đang tập tành chứ chưa rành về code lắm, chẳng phải biết đưa vào đoạn nào nữa à.

Anh giúp em đưa báo lỗi trực tiếp vào code chứ em bó tay rồi ạ. Vì nhiều khi file ở trong thư mục tên là "DỮ LIỆU MỚI" mà nhập vào vùng B6:B41 sai tên như "DỮ LIỆU MOI" thì chạy code sẽ bị thiếu dữ liệu nên phải báo lỗi để biết mà sửa à

if dir("duongdan check file") ="" then msgbox("file không tồn tại")
 
Upvote 0
Hix hix. Em còn đang tập tành chứ chưa rành về code lắm, chẳng phải biết đưa vào đoạn nào nữa à.

Anh giúp em đưa báo lỗi trực tiếp vào code chứ em bó tay rồi ạ. Vì nhiều khi file ở trong thư mục tên là "DỮ LIỆU MỚI" mà nhập vào vùng B6:B41 sai tên như "DỮ LIỆU MOI" thì chạy code sẽ bị thiếu dữ liệu nên phải báo lỗi để biết mà sửa à

Bạn bỏ dòng:
On Error Resume Next
Tất cả các lỗi đều được báo, xem lại code bị lỗi ở dòng nào sẽ biết lý do bị lỗi.
Có nhiều bài viết về "sự lợi hại" của "On Error Resume Next" trên GPE.
 
Lần chỉnh sửa cuối:
Upvote 0
Vì file này mình chia sẻ cho người khác dùng nữa nên mới làm báo lỗi kỹ vậy chứ nếu mình dùng thì k cần báo lỗi bằng chữ tiếng việt làm gì à.

Excel đúng là còn quá nhiều điều hay ho mà chưa thể khám phá hết được, bỏ dòng đó nó báo lỗi bằng tiếng anh ngay, hay thật, cám ơn anh rất nhiều ạ

Bạn bỏ dòng:
On Error Resume Next
Tất cả các lỗi đều được báo, xem lại code bị lỗi ở dòng nào sẽ biết lý do bị lỗi.
Có nhiều bài viết về "sự lợi hại" của "On Error Resume Next" trên GPE.
 
Upvote 0
Theo mình thầy Ba Tê xui bạn bỏ dòng lệnh đó đi là thiệt uổn đó nha!

Bạn chỉ cần vô hiệu hóa nó đi là được mọi nhẽ rồi (Bằng dấu nháy đơn hay 'Rem' đầu dòng lệnh).
 
Upvote 0
Sao vậy bạn, bỏ cái đó đi có ảnh hưởng gì đến code không vậy ? Mình không rành về code lắm à
Theo mình thầy Ba Tê xui bạn bỏ dòng lệnh đó đi là thiệt uổn đó nha!

Bạn chỉ cần vô hiệu hóa nó đi là được mọi nhẽ rồi (Bằng dấu nháy đơn hay 'Rem' đầu dòng lệnh).
 
Upvote 0
Mình xúi bạn đừng bỏ nó đi;
Mình xúi chỉ nên vô hiệu hóa tạm thòi nó thôi;

Còn chuyện tạm thời tới đâu là do bạn mà!
 
Upvote 0
Vậy có cách nào không bỏ câu lệnh đó nhưng vẫn hiện thông báo khi không tìm thấy file có tên trong vùng B6:B41 được không vậy bạn ?

Mình xúi bạn đừng bỏ nó đi;
Mình xúi chỉ nên vô hiệu hóa tạm thòi nó thôi;

Còn chuyện tạm thời tới đâu là do bạn mà!
 
Upvote 0
Để làm được việc này, bạn cần biết:
a./ Khi không tìm thấy được file có tên trong vùng [B6:B41] sẽ sinh ra lỗi gì ( Err & Error())
Khi biết như vậy, ta sẽ thực hiện công đoạn xử riêng lỗi đó như sau

(Giả dụ lỗi đó có Err=307, nha!)

PHP:
Public Sub TongHop()
  On Error Goto LoiCT
' Các câu lệnh của bạn
 . . . . . . .     '

Err_: Exit Sub
LoiCT:
 If Err = 307 then
    Resume Next
 Else
    MsgBox Err, , Error()
    Resume Err_
 End If
End Sub

b./ Bạn thử đi nha, mình chưa & sẽ không thử bao giờ cái chuyện mở tùm lum file như vậy!

Chúc thành công & vui ngày cuối tuần!
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn nói như thế mình cảm thấy đây không phải là cách tối ưu nhỉ? Mình không hiểu bỏ dòng lệnh On Error Resume Next thì không biết có ảnh hưởng gì đến file không vậy để mình biết có nên bỏ hay không?

Để làm được việc này, bạn cần biết:
a./ Khi không tìm thấy được file có tên trong vùng [B6:B41] sẽ sinh ra lỗi gì ( Err & Error())
Khi biết như vậy, ta sẽ thực hiện công đoạn xử riêng lỗi đó như sau

(Giả dụ lỗi đó có Err=307, nha!)

PHP:
Public Sub TongHop()
  On Error Goto LoiCT
' Các câu lệnh của bạn
 . . . . . . .     '

Err_: Exit Sub
LoiCT:
 If Err = 307 then
    Resume Next
 Else
    MsgBox Err, , Error()
    Resume Err_
 End If
End Sub

b./ Bạn thử đi nha, mình chưa & sẽ không thử bao giờ cái chuyện mở tùm lum file như vậy!

Chúc thành công & vui ngày cuối tuần!
 
Upvote 0
Web KT

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

Back
Top Bottom