Gửi email tính lương cho từng người

Liên hệ QC

zine

Thành viên mới
Tham gia
21/8/07
Bài viết
27
Được thích
13
Hi các anh chị
Em có bảng tính lương cho tất cả CBCNV trong công ty
Bây giờ em muốn sau khi tính lương, gửi cách tính lương chi tiết của từng người cho người đó qua email.(thông tin lương của người nào, chỉ người đó biết)
Em gửi kèm file, mọi người có cách gì giúp em nhé, đa tạ.
 

File đính kèm

  • Gui email tu dong theo danh sach.xlsx
    13.2 KB · Đọc: 2,820
Code của a Lua e chạy trên win7 office 2007 bình thường nhưng giờ chạy trên win10 o2016 bị lỗi

method to of object mailitem failed

Anh xem giúp, cảm ơn anh

---
Các bạn thêm .text sau cùng đoạn .to nha
.To = rng.Offset(, 4).Text
 

File đính kèm

  • GuiMail 1.3 (1).xls
    39.5 KB · Đọc: 18
Lần chỉnh sửa cuối:
Upvote 0
Các bác cho hỏi, có cách nào sửa việc hiển thị được tiếng việt khi gửi mail từ Excel bằng CDO không ạ ?
Em gửi tiếng việt trên gmail báo lỗi font. mặc dù chuẩn font ở Excel và Gmail là như nhau
Cám ơn !

Mình cũng đang vướng vụ font chữ tiếng Việt khi gửi mail từ Excel bằng CDO mà chưa có cách xử lý.
Bác nào có tuyệt chiêu xin chỉ giáo với ạ.
 
Upvote 0
Chào cả nhà,
Hôm nay rảnh rỗi tí nên dạo GIaiPhapExcel một tí chơi.... tình cờ lạc vào topic nay. Mình thấy rất khâm phục bạn "Hai Lúa" giúp từng người một với dữ liệu khác nhau...
Mình sẵn đây làm cái này sử dụng cũng lâu lắm rùi, nay post lên cho các bạn tham khảo sử dụng.
Cái này "TỔNG QUÁT" thêm hàng cột trong data gì cũng dc ah... nhưng phải điều chỉnh lại thông tin tương ứng với sheet"Setup".
Cái này tạo ra file Pdf như trong sheet"Out_Form" với dữ liệu được điền từ sheet"Send_Mail" theo từng hàng vào từng cell như trong Sheet"Setup", rồi send mail với attached file Pdf đó theo list email trong Sheet"Mailinfo"
các bạn cứ thử nha...
Mong các thầy trong Giaiphapexcel giúp hoàn thiện nếu có ý kiến gì...
Cám ơn nhiều.
 

File đính kèm

  • Pay Roll - send OUTLOOK-AttachedFilePDF-GiaiPhapExcel.xlsm
    61.2 KB · Đọc: 46
Upvote 0
Sub GuiMail()
Dim OutApp As Object, OutMail As Object
Dim Ash As Worksheet, mailAddress As String
Dim Rcount As Long, Rnum As Long, strHeader As String, strRow As String
On Error GoTo cleanup
Set OutApp = CreateObject("Outlook.Application")
Set Ash = Sheet1
Rcount = Application.WorksheetFunction.CountA(Ash.Columns(1))
For i = 1 To 10
strHeader = strHeader & " " & "<th bgcolor=#82FA58 >" & Ash.Cells(1, i) & "</th>"
Next
If Rcount >= 2 Then

For Rnum = 2 To Rcount
strRow = ""
For ir = 1 To 9
strRow = strRow & " " & "<td align=Center>" & Format(Ash.Cells(Rnum, ir), "#,##0") & "</td>"

Next
For ir = 10 To 10
strRow = strRow & " " & "<td align=Center>" & Format(Ash.Cells(Rnum, ir), "#%") & "</td>"

Next
mailAddress = ""
On Error Resume Next
mailAddress = Application.WorksheetFunction. _
VLookup(Ash.Cells(Rnum, 1).Value, _
Ash.Range("A1:K" & _
Ash.Rows.Count), 11, False)
' Worksheets("Mailinfo").Range("A1:C" & _
' Worksheets("Mailinfo").Rows.Count), 3, False)

On Error GoTo 0
If mailAddress <> "" Then
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next
With OutMail
.BodyFormat = olFormatHTML
.To = mailAddress
.Subject = "Doanh s" + ChrW(7889) + " c" + ChrW(7911) + "a " & Ash.Range("B" & Rnum) & " " & Ash.Range("L1:L1")
.HTMLBody = "Dear <B>" & Ash.Range("B" & Rnum) & ",</B><BR>" & _
"<BR>" & _
"Chi ti" + ChrW(7871) + "t DOANH S" + ChrW(7888) + " c" + ChrW(7853) + "p nh" + ChrW(7853) + "t t" + ChrW(7899) + "i" & " <B>" & Format(Ash.Range("M1:M1"), "h:mm:ss") & " </B>" & "ng" + ChrW(224) + "y" & " <B>" & Ash.Range("N1:N1") & " </B>" & "nh" + ChrW(432) + " b" + ChrW(234) + "n d" + ChrW(432) + ChrW(7899) + "i:<BR><BR>" & _
"<table border=1><tr>" & _
strHeader & _
"</tr><tr>" & _
strRow & _
"</tr>" & _
"</table>" & _
"<BR>" & _
"M" + ChrW(7885) + "i th" + ChrW(7855) + "c m" + ChrW(7855) + "c xin vui l" + ChrW(242) + "ng ph" + ChrW(7843) + "n h" + ChrW(7891) + "i ph" + ChrW(242) + "ng K" + ChrW(7871) + " ho" + ChrW(7841) + "ch T" + ChrW(7853) + "p " + ChrW(273) + "o" + ChrW(224) + "n.<BR>" & _
ChrW(272) + ChrW(7847) + "u m" + ChrW(7889) + "i li" + ChrW(234) + "n h" + ChrW(7879) + ":<B> Anh Nguy" + ChrW(7877) + "n T" + ChrW(7845) + "t H" + ChrW(7843) + "i </B>" & _
"<BR>" & _
"<B>Email:</B> nguyentathai@kangaroo.vn" & _
"<BR>" & _
"<BR>" & _
"Xin ch" + ChrW(250) + "c anh m" + ChrW(7897) + "t ng" + ChrW(224) + "y l" + ChrW(224) + "m vi" + ChrW(7879) + "c hi" + ChrW(7879) + "u qu" + ChrW(7843) + ".</B>" & _
"<BR>" & _
"<BR>" & _
"<B>Tr" + ChrW(226) + "n tr" + ChrW(7885) + "ng c" + ChrW(7843) + "m " + ChrW(417) + "n</B>"
.Send 'Or use Send
End With
On Error GoTo 0
Set OutMail = Nothing
End If
Ash.AutoFilterMode = False
Next Rnum
End If

MsgBox "Da tao xong email gui", vbInformation
'ThisWorkbook.Close (False)
cleanup:
Set OutApp = Nothing: Set OutMail = Nothing
End Sub

'''''''''''''''''''''''''''
Code trên hiển thị table theo chiều ngang.
Nay em muốn nó hiển thị theo chiều dọc
Nhờ anh HLMT chỉ giáo!
 

File đính kèm

  • BC Hang ngang.png
    BC Hang ngang.png
    19.6 KB · Đọc: 20
Upvote 0
Chủ đề này không bao giờ cũ!! Cho spam xí nhe mấy bác ^^
 
Upvote 0
Code của a Lua e chạy trên win7 office 2007 bình thường nhưng giờ chạy trên win10 o2016 bị lỗi

Chào các anh/ chị,

Em có file cần lọc tên từng người và trích xuất tự động thành file khác rồi gửi mail cho người đó. Em đã nghiên cứu cả ngày rồi mà h vẫn chưa làm đc, vì cũng chưa bao h làm VBA. Anh/ chị/ bạn nào biết có thể giúp đỡ em được không ạ? Sáng nay em phải gửi rồi ạ, hic.

Em cảm ơn mọi người trước ah.
 

File đính kèm

  • Sendmail.xlsm
    24 KB · Đọc: 5
Upvote 0
Chào các anh/ chị,

Em có file cần lọc tên từng người và trích xuất tự động thành file khác rồi gửi mail cho người đó. Em đã nghiên cứu cả ngày rồi mà h vẫn chưa làm đc, vì cũng chưa bao h làm VBA. Anh/ chị/ bạn nào biết có thể giúp đỡ em được không ạ? Sáng nay em phải gửi rồi ạ, hic.

Em cảm ơn mọi người trước ah.
Bạn dùng code bên dưới nhé.

Mã:
Sub SendMail_HLMT()
    Dim OutApp As Object, OutMail As Object
    Dim cell As Range, i As Integer
    Application.ScreenUpdating = False
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    With Sheet1
        For Each cell In Sheet2.[A2:A100]
            i = i + 1
            If Len(cell) > 0 Then
                .[A9:W1000].AutoFilter Field:=18, Criteria1:=cell
                 If .Cells(Rows.Count, 18).End(xlUp).Row > 1 Then
                    .[A8].CurrentRegion.CopyPicture
                    Set OutMail = OutApp.CreateItem(0)
                    With OutMail
                       .To = cell.Offset(, 1)
                       .subject = "VNPT: " & cell
                       .HTMLBody = " <B>Xin chao " & cell & "</B> <BR><BR> Vui long kiem tra chi tiet nhu ben duoi: <BR>" & _
                                        "<BR><BR>Neu co thac mac gi xin phan hoi som" & _
                                        "<BR><B>Xin cam on,</B><BR>" & _
                                        "<BR><B>HLMT</B>"
                       .Display
                    End With
                    SendKeys "({DOWN})", True
                    SendKeys "({DOWN})", True
                    SendKeys "({DOWN})", True
                    SendKeys "^({v})", True
                End If
            End If
        Next
        .ShowAllData
    End With
    Application.ScreenUpdating = True
    
End Sub
 

File đính kèm

  • Sendmail.xlsm
    28.8 KB · Đọc: 36
Upvote 0
Bạn dùng code bên dưới nhé.

Mã:
Sub SendMail_HLMT()
    Dim OutApp As Object, OutMail As Object
    Dim cell As Range, i As Integer
    Application.ScreenUpdating = False
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    With Sheet1
        For Each cell In Sheet2.[A2:A100]
            i = i + 1
            If Len(cell) > 0 Then
                .[A9:W1000].AutoFilter Field:=18, Criteria1:=cell
                 If .Cells(Rows.Count, 18).End(xlUp).Row > 1 Then
                    .[A8].CurrentRegion.CopyPicture
                    Set OutMail = OutApp.CreateItem(0)
                    With OutMail
                       .To = cell.Offset(, 1)
                       .subject = "VNPT: " & cell
                       .HTMLBody = " <B>Xin chao " & cell & "</B> <BR><BR> Vui long kiem tra chi tiet nhu ben duoi: <BR>" & _
                                        "<BR><BR>Neu co thac mac gi xin phan hoi som" & _
                                        "<BR><B>Xin cam on,</B><BR>" & _
                                        "<BR><B>HLMT</B>"
                       .Display
                    End With
                    SendKeys "({DOWN})", True
                    SendKeys "({DOWN})", True
                    SendKeys "({DOWN})", True
                    SendKeys "^({v})", True
                End If
            End If
        Next
        .ShowAllData
    End With
    Application.ScreenUpdating = True
   
End Sub


Bác Hai Lúa Miền Tây ơi, em cảm ơn bác đã hỗ trợ em rất nhanh. Nhưng em muốn hỏi thêm bác mấy vấn đề này:
- Nếu cần gửi file đính kèm cho từng người thì code phải sửa ntn?
- CC thêm cho 1 số người khác nữa thì thêm code j` ạ?

Em cũng thử mày mò dùng file của người khác để chỉnh sửa mà paste vào file của em nó không chạy được, hic.

Bác giúp em luôn được không ạ?

Em cảm ơn bác trước ạ.
 
Upvote 0
Bác Hai Lúa Miền Tây ơi, em cảm ơn bác đã hỗ trợ em rất nhanh. Nhưng em muốn hỏi thêm bác mấy vấn đề này:
- Nếu cần gửi file đính kèm cho từng người thì code phải sửa ntn?
- CC thêm cho 1 số người khác nữa thì thêm code j` ạ?

Em cũng thử mày mò dùng file của người khác để chỉnh sửa mà paste vào file của em nó không chạy được, hic.

Bác giúp em luôn được không ạ?

Em cảm ơn bác trước ạ.
Bạn cố gắng đọc lại đề tài này sẽ có câu trả lời cho bạn nhé.
 
Upvote 0
Bạn cố gắng đọc lại đề tài này sẽ có câu trả lời cho bạn nhé.

Bác HLMT ơi,

Phần CC thì em thấy rồi. Nhưng còn đoạn tách file em vẫn bị lỗi: WB.SaveAs FileName:="D:\" & FileName

Loi code VBA.PNG

Option Explicit

Sub GuiMail()
Dim OutApp As Object, OutMail As Object
Dim WB As Workbook, Ash As Worksheet, mailAddress As String, i As Integer, ir As Integer
Dim Rcount As Long, FileName As String, Rnum As Long, strHeader As String, strRow As String
On Error GoTo cleanup
Set OutApp = CreateObject("Outlook.Application")
Set Ash = Sheet1
Rcount = Application.WorksheetFunction.CountA(Ash.Columns(1))
For i = 1 To 23
strHeader = strHeader & " " & "<th>" & Ash.Cells(1, i) & "</th>"
Next
If Rcount >= 2 Then
For Rnum = 2 To Rcount
strRow = ""
For ir = 1 To 23
strRow = strRow & " " & "<td>" & Ash.Cells(Rnum, ir) & "</td>"
Sheets("Form").Cells(8, ir) = Ash.Cells(Rnum, ir)
Next
mailAddress = ""
On Error Resume Next
mailAddress = Application.WorksheetFunction. _
VLookup(Ash.Cells(Rnum, 1).Value, _
Worksheets("Mailinfo").Range("A1:C" & _
Worksheets("Mailinfo").Rows.Count), 3, False)
Sheets("Form").Copy
Set WB = ActiveWorkbook
FileName = Ash.Cells(Rnum, 1) & ".xls"
Kill "D:\" & FileName
On Error GoTo 0
WB.SaveAs FileName:="D:\" & FileName
If mailAddress <> "" Then
Set OutMail = OutApp.CreateItem(0)
With OutMail

.To = mailAddress
.Subject = "Chi tiet bang luong: " & Ash.Range("B" & Rnum) _
& " (Voi he so chuc danh la " & Ash.Range("C" & Rnum) & ")"
.Attachments.Add WB.FullName
.HTMLBody = "<B>Dear " & Ash.Range("B" & Rnum) & ",</B><BR>" & _
"Xin vui long xem chi tiet bang luong nhu ben duoi:<BR><BR>" & _
"<table border=1><tr>" & _
strHeader & _
"</tr><tr>" & _
strRow & _
"</tr>" & _
"</table>" & _
"<BR>" & _
"Neu thay co gi thac mac xin vui long phan hoi som.<BR>" & _
"<B>Xin Cam on,</B>" & _
"<BR>" & _
"<B>HLMT<B>" & _
"<BR>" & _
Ash.Range("O9")
.Send 'Or use Send
End With
On Error GoTo 0
Set OutMail = Nothing
End If
WB.ChangeFileAccess Mode:=xlReadOnly
Kill WB.FullName
WB.Close SaveChanges:=False
Next Rnum
End If

MsgBox "Da tao xong email gui", vbInformation
'ThisWorkbook.Close (False)
cleanup:
Set OutApp = Nothing: Set OutMail = Nothing

End Sub

Nhờ bác chỉ giúp em với ạ.
 
Upvote 0
Bác HLMT ơi,

Phần CC thì em thấy rồi. Nhưng còn đoạn tách file em vẫn bị lỗi: WB.SaveAs FileName:="D:\" & FileName

View attachment 233615

Option Explicit

Sub GuiMail()
Dim OutApp As Object, OutMail As Object
Dim WB As Workbook, Ash As Worksheet, mailAddress As String, i As Integer, ir As Integer
Dim Rcount As Long, FileName As String, Rnum As Long, strHeader As String, strRow As String
On Error GoTo cleanup
Set OutApp = CreateObject("Outlook.Application")
Set Ash = Sheet1
Rcount = Application.WorksheetFunction.CountA(Ash.Columns(1))
For i = 1 To 23
strHeader = strHeader & " " & "<th>" & Ash.Cells(1, i) & "</th>"
Next
If Rcount >= 2 Then
For Rnum = 2 To Rcount
strRow = ""
For ir = 1 To 23
strRow = strRow & " " & "<td>" & Ash.Cells(Rnum, ir) & "</td>"
Sheets("Form").Cells(8, ir) = Ash.Cells(Rnum, ir)
Next
mailAddress = ""
On Error Resume Next
mailAddress = Application.WorksheetFunction. _
VLookup(Ash.Cells(Rnum, 1).Value, _
Worksheets("Mailinfo").Range("A1:C" & _
Worksheets("Mailinfo").Rows.Count), 3, False)
Sheets("Form").Copy
Set WB = ActiveWorkbook
FileName = Ash.Cells(Rnum, 1) & ".xls"
Kill "D:\" & FileName
On Error GoTo 0
WB.SaveAs FileName:="D:\" & FileName
If mailAddress <> "" Then
Set OutMail = OutApp.CreateItem(0)
With OutMail

.To = mailAddress
.Subject = "Chi tiet bang luong: " & Ash.Range("B" & Rnum) _
& " (Voi he so chuc danh la " & Ash.Range("C" & Rnum) & ")"
.Attachments.Add WB.FullName
.HTMLBody = "<B>Dear " & Ash.Range("B" & Rnum) & ",</B><BR>" & _
"Xin vui long xem chi tiet bang luong nhu ben duoi:<BR><BR>" & _
"<table border=1><tr>" & _
strHeader & _
"</tr><tr>" & _
strRow & _
"</tr>" & _
"</table>" & _
"<BR>" & _
"Neu thay co gi thac mac xin vui long phan hoi som.<BR>" & _
"<B>Xin Cam on,</B>" & _
"<BR>" & _
"<B>HLMT<B>" & _
"<BR>" & _
Ash.Range("O9")
.Send 'Or use Send
End With
On Error GoTo 0
Set OutMail = Nothing
End If
WB.ChangeFileAccess Mode:=xlReadOnly
Kill WB.FullName
WB.Close SaveChanges:=False
Next Rnum
End If

MsgBox "Da tao xong email gui", vbInformation
'ThisWorkbook.Close (False)
cleanup:
Set OutApp = Nothing: Set OutMail = Nothing

End Sub

Nhờ bác chỉ giúp em với ạ.

Em up file bác xem giúp em với ạ.
 

File đính kèm

  • guimail 1.2.xls
    81 KB · Đọc: 7
Lần chỉnh sửa cuối:
Upvote 0
Em up file bác xem giúp em với ạ.
Với tập tin thế thì sai te tua.

1.
For i = 1 To 18
strHeader = strHeader & " " & "<th>" & Ash.Cells(1, i) & "</th>"
Next
Dòng 1 là dòng trống, làm gì có tiêu đề.

2.
Mã:
If Rcount >= 2 Then
Thế nếu Rcount = 2, tức chỉ có A8 = "No." và A10 = "Charge in VND" thì cũng thực hiện? Lúc đó làm gì có dữ liệu mà thực hiện?

3.
Mã:
For Rnum = 2 To Rcount

Chạy từ Rnum = 2? Thế thì sau khi chạy dòng
Mã:
FileName = Ash.Cells(Rnum, 1) & ".xls"
sẽ có FileName = ".xls" vì Ash.Cells(Rnum, 1) = Ash.Cells(2, 1) = Ash.Range("A2") = "" (ô A2 rỗng)
Chính vì với FileName = ".xls" nên có lỗi như trong hình bạn đính kèm ở bài #270.

4.
Mã:
mailAddress = Application.WorksheetFunction. _
              VLookup(Ash.Cells(Rnum, 1).Value, _
                    Worksheets("Mailinfo").Range("A1:C" & _
                    Worksheets("Mailinfo").Rows.Count), 3, False)
mailAddress = "" vì cột Mailinfo!A rỗng. Thậm chí nếu nhập A2 = 1, A3 = 2, ... thì vẫn có mailAddress = "" vì lúc đó cột Mailinfo!A chứa số còn Sheet1!A11:A... chứa chuỗi, tức Ash.Cells(Rnum, 1).Value là chuỗi. Với Excel đó là chuỗi giả bộ là số.
--------------
Ít ra phải sửa:
- ở điểm 1 sửa 1 thành 8
- ở điểm 2 sửa thành If Rcount >= 3 Then
- ở điểm 3 sửa thành For Rnum = 11 To 8 + Rcount
- để điểm 4 trả về giá trị thì: nhập 1, 2, ... vào Mailinfo!A2:A..., và nhập 1, 2, ... (SỐ) vào Sheet1!A11:A...

Không thể là
Mã:
Sheets("Form").Cells(8, ir) = Ash.Cells(Rnum, ir)
vì tiêu đề trong sheet1 ở dòng 8 chứ không phải ở dòng Rnum. Sửa lại thành
Mã:
Sheets("Form").Cells(8, ir) = Ash.Cells(8, ir)
 
Upvote 0
Với tập tin thế thì sai te tua.

1.

Dòng 1 là dòng trống, làm gì có tiêu đề.

2.
Mã:
If Rcount >= 2 Then
Thế nếu Rcount = 2, tức chỉ có A8 = "No." và A10 = "Charge in VND" thì cũng thực hiện? Lúc đó làm gì có dữ liệu mà thực hiện?

3.
Mã:
For Rnum = 2 To Rcount

Chạy từ Rnum = 2? Thế thì sau khi chạy dòng
Mã:
FileName = Ash.Cells(Rnum, 1) & ".xls"
sẽ có FileName = ".xls" vì Ash.Cells(Rnum, 1) = Ash.Cells(2, 1) = Ash.Range("A2") = "" (ô A2 rỗng)
Chính vì với FileName = ".xls" nên có lỗi như trong hình bạn đính kèm ở bài #270.

4.
Mã:
mailAddress = Application.WorksheetFunction. _
              VLookup(Ash.Cells(Rnum, 1).Value, _
                    Worksheets("Mailinfo").Range("A1:C" & _
                    Worksheets("Mailinfo").Rows.Count), 3, False)
mailAddress = "" vì cột Mailinfo!A rỗng. Thậm chí nếu nhập A2 = 1, A3 = 2, ... thì vẫn có mailAddress = "" vì lúc đó cột Mailinfo!A chứa số còn Sheet1!A11:A... chứa chuỗi, tức Ash.Cells(Rnum, 1).Value là chuỗi. Với Excel đó là chuỗi giả bộ là số.
--------------
Ít ra phải sửa:
- ở điểm 1 sửa 1 thành 8
- ở điểm 2 sửa thành If Rcount >= 3 Then
- ở điểm 3 sửa thành For Rnum = 11 To 8 + Rcount
- để điểm 4 trả về giá trị thì: nhập 1, 2, ... vào Mailinfo!A2:A..., và nhập 1, 2, ... (SỐ) vào Sheet1!A11:A...

Không thể là
Mã:
Sheets("Form").Cells(8, ir) = Ash.Cells(Rnum, ir)
vì tiêu đề trong sheet1 ở dòng 8 chứ không phải ở dòng Rnum. Sửa lại thành
Mã:
Sheets("Form").Cells(8, ir) = Ash.Cells(8, ir)

Vâng, vì em mới mày mò mấy hôm nay nên nhìn code có hiểu j` đâu ạ. Em lấy file của mọi người chạy được xong paste dữ liệu của em vào đấy. Em đang loay hoay thử tìm các lỗi trên google xong sửa thử chỗ này thì nó lại sai chỗ khác :v May quá bác trả lời, để em nghiên cứu các lỗi bác đã note ra và sửa xm file có chạy ngon lành đc ko. Em cảm ơn các bác rất nhiều. Có j` em chưa hiểu em lại làm phiền các bác nhé, mong các bác chỉ giáo giúp em.
 
Upvote 0
Với tập tin thế thì sai te tua.

1.

Dòng 1 là dòng trống, làm gì có tiêu đề.

2.
Mã:
If Rcount >= 2 Then
Thế nếu Rcount = 2, tức chỉ có A8 = "No." và A10 = "Charge in VND" thì cũng thực hiện? Lúc đó làm gì có dữ liệu mà thực hiện?

3.
Mã:
For Rnum = 2 To Rcount

Chạy từ Rnum = 2? Thế thì sau khi chạy dòng
Mã:
FileName = Ash.Cells(Rnum, 1) & ".xls"
sẽ có FileName = ".xls" vì Ash.Cells(Rnum, 1) = Ash.Cells(2, 1) = Ash.Range("A2") = "" (ô A2 rỗng)
Chính vì với FileName = ".xls" nên có lỗi như trong hình bạn đính kèm ở bài #270.

4.
Mã:
mailAddress = Application.WorksheetFunction. _
              VLookup(Ash.Cells(Rnum, 1).Value, _
                    Worksheets("Mailinfo").Range("A1:C" & _
                    Worksheets("Mailinfo").Rows.Count), 3, False)
mailAddress = "" vì cột Mailinfo!A rỗng. Thậm chí nếu nhập A2 = 1, A3 = 2, ... thì vẫn có mailAddress = "" vì lúc đó cột Mailinfo!A chứa số còn Sheet1!A11:A... chứa chuỗi, tức Ash.Cells(Rnum, 1).Value là chuỗi. Với Excel đó là chuỗi giả bộ là số.
--------------
Ít ra phải sửa:
- ở điểm 1 sửa 1 thành 8
- ở điểm 2 sửa thành If Rcount >= 3 Then
- ở điểm 3 sửa thành For Rnum = 11 To 8 + Rcount
- để điểm 4 trả về giá trị thì: nhập 1, 2, ... vào Mailinfo!A2:A..., và nhập 1, 2, ... (SỐ) vào Sheet1!A11:A...

Không thể là
Mã:
Sheets("Form").Cells(8, ir) = Ash.Cells(Rnum, ir)
vì tiêu đề trong sheet1 ở dòng 8 chứ không phải ở dòng Rnum. Sửa lại thành
Mã:
Sheets("Form").Cells(8, ir) = Ash.Cells(8, ir)

Bác batman1 ơi, em sửa theo mấy chỗ bác bảo mà nó vẫn chưa gửi được mail (có thấy chạy tạo file).

Ở điểm 4 thực tế em chỉ cần gửi file danh sách đính kèm cho từng người có tên trong Sheet1 thôi (Sheet1 dòng nào có tên người đó thì cắt sang Form) thì sửa ntn hả bác? Code kia là em giữ nguyên file của 1 bạn post trong thread này thôi ạ.

Bác xem giúp em với, em vẫn mông lung quá.
 

File đính kèm

  • Copy of guimail 1.2.xlsm
    34.8 KB · Đọc: 3
Upvote 0
Bác batman1 ơi, em sửa theo mấy chỗ bác bảo mà nó vẫn chưa gửi được mail (có thấy chạy tạo file).

Ở điểm 4 thực tế em chỉ cần gửi file danh sách đính kèm cho từng người có tên trong Sheet1 thôi (Sheet1 dòng nào có tên người đó thì cắt sang Form) thì sửa ntn hả bác? Code kia là em giữ nguyên file của 1 bạn post trong thread này thôi ạ.

Bác xem giúp em với, em vẫn mông lung quá.
Tôi viết là ít nhất phải sửa những chỗ đo. Tôi không nói là đủ.

Bạn tìm trên GPE có nhiều code mà. Kể cả code không dùng Outlook.

Bạn đợi người khác nhé, vì tôi đi nằm đây. Nếu không ai giúp thì khi dậy tôi sẽ sem. Tôi không cài Outlook nhưng ít ra có thể xem chay code.
 
Upvote 0
Tôi viết là ít nhất phải sửa những chỗ đo. Tôi không nói là đủ.

Bạn tìm trên GPE có nhiều code mà. Kể cả code không dùng Outlook.

Bạn đợi người khác nhé, vì tôi đi nằm đây. Nếu không ai giúp thì khi dậy tôi sẽ sem. Tôi không cài Outlook nhưng ít ra có thể xem chay code.

Vâng. Hôm trước bác HLMT cũng đã giúp em mà em cần đính kèm thêm cả file, nói chung với bọn chưa biết j` như em thì không biết sửa như nào đâu ạ. Kể ra có ai hỗ trợ trực tiếp để vướng chỗ nào hỏi đc ngay thì tốt quá.

Em lại đang cần dùng Outlook để gửi nên cái này đúng yêu cầu rồi ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
Vâng. Hôm trước bác HLMT cũng đã giúp em mà em cần đính kèm thêm cả file, nói chung với bọn chưa biết j` như em thì không biết sửa như nào đâu ạ. Kể ra có ai hỗ trợ trực tiếp để vướng chỗ nào hỏi đc ngay thì tốt quá.

Em lại đang cần dùng Outlook để gửi nên cái này đúng yêu cầu rồi ạ.
Nếu chưa gửi được mail thì tôi cũng chả ngạc nhiên. Tôi đã viết rất rõ nhưng bạn không làm đúng. Tôi nhắc lại 1 lần cuối cùng, sẽ không có lần sau:
mailAddress = "" vì cột Mailinfo!A rỗng. Thậm chí nếu nhập A2 = 1, A3 = 2, ... thì vẫn có mailAddress = "" vì lúc đó cột Mailinfo!A chứa số còn Sheet1!A11:A... chứa chuỗi, tức Ash.Cells(Rnum, 1).Value là chuỗi. Với Excel đó là chuỗi giả bộ là số.
...
- để điểm 4 trả về giá trị thì: nhập 1, 2, ... vào Mailinfo!A2:A..., và nhập 1, 2, ... (SỐ) vào Sheet1!A11:A...
Kiểm tra lại tập tin ở bài #275 thì thấy cột Sheet1!A vẫn chứa chuỗi giả bộ SỐ. Ít ra thì với Vlookup cột Sheet1!A là CHUỖI, trong khi cột Mailinfo!A là SỐ. Vì thế Vlookup không tìm thấy và mailAddress = "", nên mail không được gửi.
 
Upvote 0

File đính kèm

  • guimail 1.2.xls
    67 KB · Đọc: 28
Lần chỉnh sửa cuối:
Upvote 0
Em chào bác Hai Lúa,

Em muốn hỏi chút. Em làm theo file gửi nhiều mail mà bác gửi, khi gửi cho nhiều email có địa chỉ khác nhau thì okie. Nhưng nếu em chỉ gửi cho 1 địa chỉ email duy nhất (mặc dù nội dung các cột khác nhau) thì nó lại chỉ gửi đúng 1 email ở dòng đầu tiên. Làm thế nào để khắc phục bác nhỉ.

Em cảm ơn bác.

Họ tênĐịa chỉ EmailHệ số chức danhSố ngày công Lương CD Phụ cấp điện thoai Phụ cấp đoàn thể Trừ BHXH, BHTY Lương CKĐIỀU KIỆN GỬI MAIL
Lê Phát Đởm​
4​
22​
6,000,000​
300,000​
100,000​
(245,000)​
6,155,000​
yes​
Lê Phát Đởm​
4​
21​
5,000,000​
200,000​
-​
(245,000)​
4,955,000​
Đởm Lê Phát​
4​
20​
5,500,000​
200,000​
100,000​
(245,000)​
5,555,000​
yes​
Phát Lê Đởm​
4​
20​
5,500,000​
200,000​
100,000​
(245,000)​
5,555,000​
 

File đính kèm

  • guimail.xls
    51.5 KB · Đọc: 5
Upvote 0
Web KT
Back
Top Bottom