Hướng dẫn code gửi bảng lương cho từng người

Liên hệ QC

saobekhonglac

Thành viên mới
Tham gia
1/11/08
Bài viết
1,565
Được thích
1,450
Giới tính
Nam
Chào Anh/Chị.

Em có file bảng lương nhân viên. Trong file có sheet "Chi tiet" và sheet "Tong hop". Nhờ Anh/Chị viết giúp em code để khi nhấn nút thì sẽ tự động gửi Email cho từng nhân viên với nội dung như sau:

Người nhận: Theo danh sách địa chỉ mail tại cột T sheet "Chi tiet".
Tiêu đề: BẢNG LƯƠNG THÁNG 7 (lấy dòng 1 của sheet "Tong hop"
Nội dung:
Chào NGUYỄN VĂN A (lấy ô B3 sheet "Tong hop").
Vui lòng xem bảng lương theo bảng tổng hợp bên dưới và file đính kèm. Nếu có thắc mắc về lương vui lòng liên hệ Ms XYZ phòng HCNS.
Cám ơn.

Bảng tổng hợp bên dưới sẽ copy hết nội dung sheet "Tong hop" dán vào mail (dán dạng text, nếu được dạng hình thì càng tốt)
File đính kèm thì sẽ xuất dữ liệu sheet "Chi tiet" của nhân viên đó (dòng 1, 2 vẫn giữ làm tiêu đề).

Mình có đính kèm hình của thư mẫu, nhờ Anh/Chị xem và hỗ trợ giúp.

Cám ơn Anh/Chị nhiều.
 
Lần chỉnh sửa cuối:
Chào Anh/Chị.

Em có file bảng lương nhân viên. Trong file có sheet "Chi tiet" và sheet "Tong hop". Nhờ Anh/Chị viết giúp em code để khi nhấn nút thì sẽ tự động gửi Email cho từng nhân viên với nội dung như sau:

Người nhận: Theo danh sách địa chỉ mail tại cột T sheet "Chi tiet".
Tiêu đề: BẢNG LƯƠNG THÁNG 7 (lấy dòng 1 của sheet "Tong hop"
Nội dung:
Chào NGUYỄN VĂN A (lấy ô B3 sheet "Tong hop").
Vui lòng xem bảng lương theo bảng tổng hợp bên dưới và file đính kèm. Nếu có thắc mắc về lương vui lòng liên hệ Ms XYZ phòng HCNS.
Cám ơn.

Bảng tổng hợp bên dưới sẽ copy hết nội dung sheet "Tong hop" dán vào mail (dán dạng text, nếu được dạng hình thì càng tốt)
File đính kèm thì sẽ xuất dữ liệu sheet "Chi tiet" của nhân viên đó (dòng 1, 2 vẫn giữ làm tiêu đề).

Mình có đính kèm hình của thư mẫu, nhờ Anh/Chị xem và hỗ trợ giúp.

Cám ơn Anh/Chị nhiều.

Gửi cho từng người theo file đính kèm riêng hay bảng tổng hợp bên dưới thì trong diễn đàn có nhiều nhưng gộp cả 2 lại thì chưa thấy.
 
Gửi cho từng người theo file đính kèm riêng hay bảng tổng hợp bên dưới thì trong diễn đàn có nhiều nhưng gộp cả 2 lại thì chưa thấy.
Gửi cho từng người theo file đính kèm riêng hay bảng tổng hợp bên dưới thì trong diễn đàn có nhiều nhưng gộp cả 2 lại thì chưa thấy.
Bài đã được tự động gộp:


Cái đó mình cũng có, nhưng không biết gọp 2 cái vào 1 như thế nào nên mới nhờ cao nhân giúp đỡ
 

File đính kèm

  • BANG LUONG.xlsm
    28.6 KB · Đọc: 31
Xem file đính kèm có đúng yêu cầu không nhé!

Anh chỉnh giúp em khi bấm là mail gửi luôn nha anh chứ mấy trăm mail mà bấm từng mail thì tội em. Anh chỉnh giúp em bảng tổng hợp dạng hình được không anh (em có bỏ hình vào sheet "Tong hop".
Cám ơn anh nhiều
 
Anh chỉnh giúp em khi bấm là mail gửi luôn nha anh chứ mấy trăm mail mà bấm từng mail thì tội em. Anh chỉnh giúp em bảng tổng hợp dạng hình được không anh (em có bỏ hình vào sheet "Tong hop".
Cám ơn anh nhiều
theem cái này vào : OutMail.send
PHP:
     Set OutMail = OutApp.CreateItem(0)
                  With OutMail
                    .Display
                  End With
                  Signature = OutMail.htmlBody
                     With OutMail
                        .To = mailAddress
                        .Subject = M_Subject
                        .htmlBody = Body & Signature
                        .Attachments.Add TempFile
                      End With
               OutMail.send
           Set OutMail = Nothing
[/ICODE]
Bài đã được tự động gộp:

 
theem cái này vào : OutMail.send
PHP:
     Set OutMail = OutApp.CreateItem(0)
                  With OutMail
                    .Display
                  End With
                  Signature = OutMail.htmlBody
                     With OutMail
                        .To = mailAddress
                        .Subject = M_Subject
                        .htmlBody = Body & Signature
                        .Attachments.Add TempFile
                      End With
               OutMail.send
           Set OutMail = Nothing
[/ICODE]
Bài đã được tự động gộp:

Anh ơi.

File đính kèm xuất ra nó lại lấy sheet tổng hợp, Anh sửa giúp em lấy sheet chi tiết. Tên file anh lấy theo mail, anh sửa giúp em theo mã nhân viên hay tên được không anh.
 
Anh ơi.

File đính kèm xuất ra nó lại lấy sheet tổng hợp, Anh sửa giúp em lấy sheet chi tiết. Tên file anh lấy theo mail, anh sửa giúp em theo mã nhân viên hay tên được không anh.
Đổi chỗ tô đỏ:
TempFile = Environ$("temp") & "/" & data(i, 2) & ".xlsx"
Sheet1.Copy
Nếu muốn là hình thì chỉ cần code dưới:
PHP:
Sub Gui_mail()
    On Error Resume Next
    Dim OutApp As Object, OutMail As Object
    Dim objNsp As Object, colSyc As Object, objSyc As Object
    Dim mailAddress As String, M_Subject As String, Body
    Dim i As Long, k As Long, j As Long, h As Integer
    Dim Signature
    Dim data, Bluong As Range
    Dim anh As Object
    'On Error GoTo cleanup
    Application.DisplayAlerts = False
    Set OutApp = CreateObject("Outlook.Application")
    Set objNsp = OutApp.Application.GetNamespace("MAPI")
    Set colSyc = objNsp.SyncObjects
   data = Sheet1.Range("A3:S" & Sheet1.Range("A1048576").End(xlUp).Row)
   M_Subject = Sheet2.Range("A1").Value
   For i = 1 To UBound(data)
   Sheet2.Range("B2").Value = data(i, 1)
   Set Bluong = Sheet2.Range("A1:B18")
    Body = "Chào " & Sheet2.Range("B3").Value & "<BR>" & Sheet1.Range("W1").Value & "<BR>" & Sheet1.Range("W2").Value & "<BR>" ' & RangetoHTML(Bluong)
     If data(i, 19) Like "**@**" Then
         TempFile = Environ$("temp") & "\" & data(i, 2) & ".xlsx"
         Sheet1.Copy
         ActiveWorkbook.SaveAs TempFile
         ActiveWorkbook.Close
        
         tmpImageName = Environ$("temp") & "\tempo.jpg"
         Bluong.CopyPicture Appearance:=xlScreen, Format:=xlPicture
         Set sht = Sheets.Add
             sht.Shapes.AddChart
             sht.Shapes.Item(1).Select
         Set objChart = ActiveChart

    With objChart
        .ChartArea.Height = Bluong.Height
        .ChartArea.Width = Bluong.Width
        .ChartArea.Fill.Visible = msoFalse
        .ChartArea.Border.LineStyle = xlLineStyleNone
        .Paste
        .Export Filename:=tmpImageName, FilterName:="JPG"
    End With
    sht.Delete
         mailAddress = data(i, 19)
           Set OutMail = OutApp.CreateItem(0)
                  With OutMail
                    .Display
                  End With
                  Signature = OutMail.htmlBody
                     With OutMail
                        .To = mailAddress
                        .Subject = M_Subject
                        .htmlBody = Body & "<img src=" & "'" & tmpImageName & "'/>" & Signature
                        .Attachments.Add TempFile
                      End With
               OutMail.send
           Set OutMail = Nothing
         '//---------------//
            For h = 1 To colSyc.Count
                Set objSyc = colSyc.Item(h)
                objSyc.Start
            Next
          '//---------------//
        Kill TempFile
        Kill tmpImageName
       End If
Next
       OutMail.Quit
        Set objNsp = Nothing
        Set colSyc = Nothing
        Set objSyc = Nothing
        Set OutApp = Nothing
cleanup:
    Set OutApp = Nothing
    Application.DisplayAlerts = False
    Application.DisplayAlerts = True
    With Application
        .EnableEvents = True
        .ScreenUpdating = True
    End With
End Sub
 
Đổi chỗ tô đỏ:
TempFile = Environ$("temp") & "/" & data(i, 2) & ".xlsx"
Sheet1.Copy
Nếu muốn là hình thì chỉ cần code dưới:
PHP:
Sub Gui_mail()
    On Error Resume Next
    Dim OutApp As Object, OutMail As Object
    Dim objNsp As Object, colSyc As Object, objSyc As Object
    Dim mailAddress As String, M_Subject As String, Body
    Dim i As Long, k As Long, j As Long, h As Integer
    Dim Signature
    Dim data, Bluong As Range
    Dim anh As Object
    'On Error GoTo cleanup
    Application.DisplayAlerts = False
    Set OutApp = CreateObject("Outlook.Application")
    Set objNsp = OutApp.Application.GetNamespace("MAPI")
    Set colSyc = objNsp.SyncObjects
   data = Sheet1.Range("A3:S" & Sheet1.Range("A1048576").End(xlUp).Row)
   M_Subject = Sheet2.Range("A1").Value
   For i = 1 To UBound(data)
   Sheet2.Range("B2").Value = data(i, 1)
   Set Bluong = Sheet2.Range("A1:B18")
    Body = "Chào " & Sheet2.Range("B3").Value & "<BR>" & Sheet1.Range("W1").Value & "<BR>" & Sheet1.Range("W2").Value & "<BR>" ' & RangetoHTML(Bluong)
     If data(i, 19) Like "**@**" Then
         TempFile = Environ$("temp") & "\" & data(i, 2) & ".xlsx"
         Sheet1.Copy
         ActiveWorkbook.SaveAs TempFile
         ActiveWorkbook.Close
      
         tmpImageName = Environ$("temp") & "\tempo.jpg"
         Bluong.CopyPicture Appearance:=xlScreen, Format:=xlPicture
         Set sht = Sheets.Add
             sht.Shapes.AddChart
             sht.Shapes.Item(1).Select
         Set objChart = ActiveChart

    With objChart
        .ChartArea.Height = Bluong.Height
        .ChartArea.Width = Bluong.Width
        .ChartArea.Fill.Visible = msoFalse
        .ChartArea.Border.LineStyle = xlLineStyleNone
        .Paste
        .Export Filename:=tmpImageName, FilterName:="JPG"
    End With
    sht.Delete
         mailAddress = data(i, 19)
           Set OutMail = OutApp.CreateItem(0)
                  With OutMail
                    .Display
                  End With
                  Signature = OutMail.htmlBody
                     With OutMail
                        .To = mailAddress
                        .Subject = M_Subject
                        .htmlBody = Body & "<img src=" & "'" & tmpImageName & "'/>" & Signature
                        .Attachments.Add TempFile
                      End With
               OutMail.send
           Set OutMail = Nothing
         '//---------------//
            For h = 1 To colSyc.Count
                Set objSyc = colSyc.Item(h)
                objSyc.Start
            Next
          '//---------------//
        Kill TempFile
        Kill tmpImageName
       End If
Next
       OutMail.Quit
        Set objNsp = Nothing
        Set colSyc = Nothing
        Set objSyc = Nothing
        Set OutApp = Nothing
cleanup:
    Set OutApp = Nothing
    Application.DisplayAlerts = False
    Application.DisplayAlerts = True
    With Application
        .EnableEvents = True
        .ScreenUpdating = True
    End With
End Sub
Đã ra dạng hình, đã xuất sheet "Chi tiet" nhưng không phải xuất từng người mà gửi nguyên sheet luôn anh ơi, Anh xem lai giúp em chứ lương gửi như vậy là lảnh lương sớm luôn. Với lại anh chỉ em cách nếu khi em không muốn gửi file đính kèm mà chỉ gửi file hình bên dưới không thì xóa dòng lệnh nào giúp em với (công nhân họ không xem trên điện thoại nên không cần gửi file đính kèm)
 
Lần chỉnh sửa cuối:
Trả hiểu bạn muốn xuất sheet kiểu gì nữa


Em muốn xuất sheet "Chi tiet". Ví dụ gửi lương cho ông A thì hình bên dưới là của ông A và file đính kèm chỉ có dòng lương của ông Nguyễn Văn A thôi (hiện tại đang hiện hết lương của 3 người). Với lại anh chỉ em cách nếu khi em không muốn gửi file đính kèm mà chỉ gửi file hình bên dưới không thì xóa dòng lệnh nào giúp em với (công nhân họ xem trên điện thoại nên không cần gửi file đính kèm)
 
Em muốn xuất sheet "Chi tiet". Ví dụ gửi lương cho ông A thì hình bên dưới là của ông A và file đính kèm chỉ có dòng lương của ông Nguyễn Văn A thôi (hiện tại đang hiện hết lương của 3 người). Với lại anh chỉ em cách nếu khi em không muốn gửi file đính kèm mà chỉ gửi file hình bên dưới không thì xóa dòng lệnh nào giúp em với (công nhân họ xem trên điện thoại nên không cần gửi file đính kèm)
Nếu muốn có riêng dòng của người đó thì phải lọc riêng ra một sheet làm như file đầu mình gửi ấy
câu lệnh dưới là để copy sheet ra
----------------------------------------------------------------------------------
Sheet1.Copy copy sheet cần đính kèm với mail
ActiveWorkbook.SaveAs TempFile Lưu file đó theo đường link "TempFile" đã tao ở trên
ActiveWorkbook.Close đóng file đó lại
.....
.Attachments.Add TempFile đính kèm vào mail
.......
Kill TempFile sau khi đã gửi mail thì xóa file đó đi
-------------------------------------------------------------------------------------
nếu không muốn gửi file đính kèm thì xóa nó đi.
 
Nếu muốn có riêng dòng của người đó thì phải lọc riêng ra một sheet làm như file đầu mình gửi ấy
câu lệnh dưới là để copy sheet ra
----------------------------------------------------------------------------------
Sheet1.Copy copy sheet cần đính kèm với mail
ActiveWorkbook.SaveAs TempFile Lưu file đó theo đường link "TempFile" đã tao ở trên
ActiveWorkbook.Close đóng file đó lại
.....
.Attachments.Add TempFile đính kèm vào mail
.......
Kill TempFile sau khi đã gửi mail thì xóa file đó đi
-------------------------------------------------------------------------------------
nếu không muốn gửi file đính kèm thì xóa nó đi.


File đính kèm vẫn hiện hết 3 người 1533266360980.png
 
Bạn ko đọc kỹ bài mình viết à ?
"Nếu muốn có riêng dòng của người đó thì phải lọc riêng ra một sheet "
sau đó thì code như mẫu ,chú ý tên sheet

Nếu lọc ra từng sheet thì sau gửi được cho tất cả mọi người, nếu 2,000 nhân viên phải lọc ra 2,000 sheet.

Mình có code xuất ra 2,000 file và gửi mail cho từng người được, nhưng cái cần là không phải xuất file mà gửi trực tiếp và đính kèm thêm nội dung bên dưới vì công nhân họ không cần xem file đính kèm.

Nếu được anh viết giúp em 1 file gửi bảng tổng hợp như từ đầu giờ và cho em cái cột bỏ đường dẫn file đính kèm và để gửi luôn (nếu ai k cần file thì cột đó em để trống)
 
Nếu lọc ra từng sheet thì sau gửi được cho tất cả mọi người, nếu 2,000 nhân viên phải lọc ra 2,000 sheet.

Mình có code xuất ra 2,000 file và gửi mail cho từng người được, nhưng cái cần là không phải xuất file mà gửi trực tiếp và đính kèm thêm nội dung bên dưới vì công nhân họ không cần xem file đính kèm.

Nếu được anh viết giúp em 1 file gửi bảng tổng hợp như từ đầu giờ và cho em cái cột bỏ đường dẫn file đính kèm và để gửi luôn (nếu ai k cần file thì cột đó em để trống)
Giời ơi là trời !!!
Thêm một sheet có công thức như sheet tổng hơp nhưng format tiêu đề và các cột của sheet "Chi tiet"
những phần đơn giản vậy mà bạn không tự làm được sao.
 
Giời ơi là trời !!!
Thêm một sheet có công thức như sheet tổng hơp nhưng format tiêu đề và các cột của sheet "Chi tiet"

hihi, tại không hiểu ý anh nói, e làm được rồi, em gửi lại file anh làm thêm giúp em 1 trường hợp cái bảng tổng hợp bên dưới dạng text giúp em với nha, cảm ơn anh nhiều thật nhiều (vì có người họ muốn lấy dạng text để họ copy). Khi nào anh rảnh hậu tạ anh sau,
 
Không xem thì gửi làm gì cho mệt? Mỗi lần gửi từng đó dung lượng mail của mình tăng lên cỡ 100MB là ít, lại tốn công dọn?
Thứ nữa, chọn một trong hai phương án thôi: Hoặc gửi trong nội dung mail hoặc đính kèm file.

xem #5

Công nhân mỗi người 1 ý anh ơi, người muốn file đính kèm, người muốn bảng sum dạng text, người muốn bảng sum dạng hình,....
 
Công nhân mỗi người 1 ý anh ơi, người muốn file đính kèm, người muốn bảng sum dạng text, người muốn bảng sum dạng hình,....
"sum sum" là gì vậy?

Có phải cái chợ đâu mà mỗi người một ý? Chắc mình rảnh rỗi quá nên mới "chiều" hai ngàn ý?

Việc thông báo lương tới người lao động bằng hình thức/ nội dung như nào có quy định rõ ràng. Công ty có tới hơn hai ngàn người mà không có cái quy định đó? Kỳ lạ!!!!!!!
 
Web KT
Back
Top Bottom