Excel bị lỗi sau khi gửi email bằng CDO

Liên hệ QC

MinhKhai

Giải pháp Ếc-xào
Tham gia
16/4/08
Bài viết
934
Được thích
568
Nhờ các anh chị kiểm tra giúp lỗi này là lỗi gì với ạ. Em không biết mô tả lỗi này như thế nào cho đúng. Các anh chị xem Clip và File đính kèm để biết rõ hơn

Do file load dữ liệu từ SQL Server, em xin mô tả lỗi như trong Clip như sau:
- Bình thường khi em mở file, bấm Spin Button thì dữ liệu được load như ý muốn.
- Khi em bấm nút Send Email như trong hình, 1 email có được gửi đi đúng địa chỉ (em đã bỏ phần đính kèm file). Lúc này Excel có vẻ treo, hoặc lúc này bấm Spin Button dữ liệu vẫn load ra (xem trên Formular bar vẫn có) nhưng trong ô thì không hiện rõ chữ. Không phải các ô đều không hiện mà có vài ô hiện chữ và vài ô không.
Em đã dò từng dòng code, kết hợp với Google mà không tìm ra lý do cũng như cách khắc phục nó. Em cũng đã thử bỏ 1 số dòng lệnh không liên quan nhưng không có kết quả.
Rất mong các anh chị mách nước giúp

Trân trọng cảm ơn

 

File đính kèm

  • QLCV.xlsb
    92.1 KB · Đọc: 20
- Về việc chọn mail trên Form thì đi theo hướng: sau khi click chọn các mail của một phòng ban nào đó xong phải bấm nút [Chọn] để lưu xuống Sheet, sau đó chọn tiếp phòng ban khác. Làm như thế cho nó gọn code mà cũng không gây khó khăn lắm cho người dùng. Thêm dòng ghi chú trên Form để người dùng biết cách thao tác đỡ hơn tốn thêm một đống code :cool:
- Đã thêm ghi chú chi tiết trong code.
Bạn nên ngâm cứu kỹ lại tầm vực khai báo biến, tầm vực hoạt động của các thủ tục.
Có một qui ước nhỏ cũng không phải là chính thức là dùng từ khoá "Dim" cho khai báo biến ở Form, Procedure level còn "Private" thì dùng ở module-level.
Cảm ơn @ongke0711 rất nhiều
Ngoài việc chú thích, bạn cũng đã sửa code kết nối đến server, (cái mà mình cũng đang loay hoay khi gặp lỗi mất kết nối mạng hoặc thông tin user của SQL được thay đổi).
Với code của bạn, chắc mình cần thêm thời gian để học hỏi và vận dụng.
Tuy nhiên có 1 câu hỏi ngay, mình xin được hỏi luôn như trong hình
32.JPG
 
Upvote 0

Trong trường hợp này của bạn thì cho Exit Sub ở dưới "End Select" luôn cũng được. Nhưng đây là kỹ thuật tôi viết dùng chung cho nhiều trường hợp khi bị lỗi, cần phải ngược quay label "KetNoiServerResume:" để thực hiện thêm vài dòng code gì đó trước khi Exit Sub.

Ví dụ:

Mã:
Public Sub ExecuteQuery(SQLToExecute As String, Optional CloseDatabase As Boolean = True)

'Dung de thuc thi cau lenh Select Query SQL

    On Error GoTo EAQError

    Dim rs As ADODB.Recordset
    If ConnectDB() Then
        Set rs = mobjConn.Execute(SQLToExecute)
    End If

EAQResume:
    If CloseDatabase Then CloseDB
    Exit Sub

EAQError:
    ShowErrorMessages Err, mstrModuleName, "ExecuteActionQuery"
    Resume EAQResume

End Sub


==> Nếu không viết Resume [label...] thì bạn phải thêm một dòng code lần nữa bên dưới -> code bị lặp lại

Mã:
Public Sub ExecuteQuery(SQLToExecute As String, Optional CloseDatabase As Boolean = True)

'Dung de thuc thi cau lenh Select Query SQL

    On Error GoTo EAQError
    ...

EAQResume:
    If CloseDatabase Then CloseDB
    Exit Sub

EAQError:
    ShowErrorMessages Err, mstrModuleName, "ExecuteActionQuery"
    If CloseDatabase Then CloseDB
    Exit Sub

End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom