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

MinhKhai

Giải pháp Ếc-xào
Tham gia ngày
16 Tháng tư 2008
Bài viết
796
Được thích
522
Điểm
860
- 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
 

ongke0711

Thành viên tiêu biểu
Tham gia ngày
7 Tháng chín 2006
Bài viết
652
Được thích
729
Điểm
860
Nơi ở
HCM
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:
Top Bottom