Gửi email tính lương cho từng người (1 người xem)

  • Thread starter Thread starter zine
  • Ngày gửi Ngày gửi
Liên hệ QC

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

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

Theo code của bạn tôi thấy nó có dán hình mà bạn?
Vậy lạ thật của em lại không có, nếu xóa dòng .send thì có nhưng phải bấm nút send thủ công. Office và Outlook của em đều là 2016.

Mail gửi đi khi giữ đủ display và send
1597283913516.png

Hiện mail gửi (do bỏ dòng code send, giữ lại display. Có đầy đủ nội dung cần thiết nhưng cần thêm thao tác bấm nút send. Ít thì thôi không sao nhưng em phải gửi cho hơn 1000 người hơi cực.

1597284028713.png
Bài đã được tự động gộp:

Vậy lạ thật của em lại không có, nếu xóa dòng .send thì có nhưng phải bấm nút send thủ công. Office và Outlook của em đều là 2016. Cho em hỏi là thực tế anh bấm gửi mail thì có hình ảnh mail gửi đi đầy đủ hay là thấy code thể hiện điều đó thôi?

Mail gửi đi khi giữ đủ display và send
1597283913516.png

Hiện mail gửi (do bỏ dòng code send, giữ lại display. Có đầy đủ nội dung cần thiết nhưng cần thêm thao tác bấm nút send. Ít thì thôi không sao nhưng em phải gửi cho hơn 1000 người hơi cực.

1597284028713.png

Em vừa thử máy anh đồng nghiệp thì lại ngon lành. Lạ thật :(. Hay do em dùng Office bản 64 bit? Ai cũng lỗi thì dễ tìm được câu trả lời. Sợ nhất khác biệt.
 
Lần chỉnh sửa cuối:
Upvote 0
Vậy lạ thật của em lại không có, nếu xóa dòng .send thì có nhưng phải bấm nút send thủ công. Office và Outlook của em đều là 2016.

Mail gửi đi khi giữ đủ display và send
View attachment 242997

Hiện mail gửi (do bỏ dòng code send, giữ lại display. Có đầy đủ nội dung cần thiết nhưng cần thêm thao tác bấm nút send. Ít thì thôi không sao nhưng em phải gửi cho hơn 1000 người hơi cực.

View attachment 242998
Bài đã được tự động gộp:



Em vừa thử máy anh đồng nghiệp thì lại ngon lành. Lạ thật :(. Hay do em dùng Office bản 64 bit? Ai cũng lỗi thì dễ tìm được câu trả lời. Sợ nhất khác biệt.
Nó không ổn định như vậy thì bạn nên chọn phương án gửi bảng thay vì gửi hình nhé.
 
Upvote 0
Nó không ổn định như vậy thì bạn nên chọn phương án gửi bảng thay vì gửi hình nhé.
Vì mẫu phiếu lương này của em hơi phức tạp, kéo dài từ A1 đến AB68 lại có nhiều khung định dạng khác nhau nên em mới chọn phương án gửi ảnh. Anh ơi hay có cách nào xuất toàn bộ ảnh đó thành file ngoài không?
 
Upvote 0
Vì mẫu phiếu lương này của em hơi phức tạp, kéo dài từ A1 đến AB68 lại có nhiều khung định dạng khác nhau nên em mới chọn phương án gửi ảnh. Anh ơi hay có cách nào xuất toàn bộ ảnh đó thành file ngoài không?
Nó kéo dài thì mình chịu khó thiết kế 1 lần, sau đó dùng hoài. Chỉ vấn đề về định dạng thì nó chỉ gửi dạng bảng.

1597286929340.png
 
Upvote 0
Vì mẫu phiếu lương này của em hơi phức tạp, kéo dài từ A1 đến AB68 lại có nhiều khung định dạng khác nhau nên em mới chọn phương án gửi ảnh. Anh ơi hay có cách nào xuất toàn bộ ảnh đó thành file ngoài không?
Bạn nên tạo một sheet riêng dùng trích lọc phiếu lương cho từng người và send mail trên sheet này với "số thứ tự" (hay một cái gì khác) chạy thôi!!!
lúc đó bạn muốn tạo ra PDF hay picture hay gì đó cũng dễ dàng hơn rất nhiều,
Bạn có thể gởi file chính thức của bạn với data giả lập chừng 5 dòng cho mình, mình sẽ xem giúp bạn.
tôi gởi bạn một số file cho bạn tham khảo.
Mấy cái này là tôi giúp một số bạn trên diễn đàn này luôn ah.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bạn nên tạo một sheet riêng dùng trích lọc phiếu lương cho từng người và send mail trên sheet này với "số thứ tự" (hay một cái gì khác) chạy thôi!!!
lúc đó bạn muốn tạo ra PDF hay picture hay gì đó cũng dễ dàng hơn rất nhiều,
Bạn có thể gởi file chính thức của bạn với data giả lập chừng 5 dòng cho mình, mình sẽ xem giúp bạn.
tôi gởi bạn một số file cho bạn tham khảo.
Mấy cái này là tôi giúp một số bạn trên diễn đàn này luôn ah.
FIle giả lập của mình đính kèm ở trên, bạn theo cái đó cũng được miễn sao khi gửi hàng loạt nó kèm ảnh vùng đó. Cảm ơn bạn trước nhé!
 

File đính kèm

Upvote 0
FIle giả lập của mình đính kèm ở trên, bạn theo cái đó cũng được miễn sao khi gửi hàng loạt nó kèm ảnh vùng đó. Cảm ơn bạn trước nhé!
Nếu bạn đưa file này thì tôi không làm, mà bạn xem các file mẫu tôi gởi mà bạn tự làm trên file chính thức của bạn.
Nếu bạn đưa file chính thức lên với dữ liệu giả lập khoảng vài hàng thì tôi làm cho bạn.
Vì tôi làm hoàn chỉnh nên làm trên file mà bàn đưa cho tôi sẽ tốn công tôi!!!
 
Upvote 0
Nếu bạn đưa file này thì tôi không làm, mà bạn xem các file mẫu tôi gởi mà bạn tự làm trên file chính thức của bạn.
Nếu bạn đưa file chính thức lên với dữ liệu giả lập khoảng vài hàng thì tôi làm cho bạn.
Vì tôi làm hoàn chỉnh nên làm trên file mà bàn đưa cho tôi sẽ tốn công tôi!!!
Cảm ơn bạn nhé!
 

File đính kèm

Upvote 0
A1:AB66 bạn nhé. Email được vlookup vào ô X10 trong print.
không ... bạn ơi,
như tôi đã nói là bạn tạo ra cái sheet phiếu lương riêng, và nó sẽ lần lượt trích dữ liệu từ sheet"Payment" của bạn cho từng người.
Tôi sẽ làm trên cái sheet này, và khi gởi cho người nhận đọc sẽ dễ dàng hơn là việc một hàng dài ngoằn như thế này!!! và ngay cả bạn tra cứu cũng đễ dàng hơn cho từng người! và code sẽ rõ ràng hơn. cái này là lời khuyên chân thành đút kết từ những người mà tôi đã giúp, ban đầu cũng giống bạn ... nhưng rùi họ thấy quá bất tiên và theo lời tôi mà làm cái sheet phiếu lương riêng!
Trên cái sheet phiếu lương này bạn chỉ lấy nững mục chình mà người nhận cần thôi, bạn đâu cầm ôm tron gói các mục như sheet"Payment" đâu!!!
Bạn lập ra một bảng vừa đọc mà không cần kéo qua kéo lên kéo xuống mà coi!!
bạn coi lại mấy cái file tôi gởi bạn tham khảo đi nha.
 
Upvote 0
không ... bạn ơi,
như tôi đã nói là bạn tạo ra cái sheet phiếu lương riêng, và nó sẽ lần lượt trích dữ liệu từ sheet"Payment" của bạn cho từng người.
Tôi sẽ làm trên cái sheet này, và khi gởi cho người nhận đọc sẽ dễ dàng hơn là việc một hàng dài ngoằn như thế này!!! và ngay cả bạn tra cứu cũng đễ dàng hơn cho từng người! và code sẽ rõ ràng hơn. cái này là lời khuyên chân thành đút kết từ những người mà tôi đã giúp, ban đầu cũng giống bạn ... nhưng rùi họ thấy quá bất tiên và theo lời tôi mà làm cái sheet phiếu lương riêng!
Trên cái sheet phiếu lương này bạn chỉ lấy nững mục chình mà người nhận cần thôi, bạn đâu cầm ôm tron gói các mục như sheet"Payment" đâu!!!
Bạn lập ra một bảng vừa đọc mà không cần kéo qua kéo lên kéo xuống mà coi!!
bạn coi lại mấy cái file tôi gởi bạn tham khảo đi nha.
Bạn ơi sheet phiếu lương riêng trong sheet Print mà bạn. Trong bài 309 mình có đính kèm file như yêu cầu của bạn đó.
 
Upvote 0
Bạn ơi sheet phiếu lương riêng trong sheet Print mà bạn. Trong bài #309 mình có đính kèm file như yêu cầu của bạn đó.
vậy trong shet đó vùng nào cần gởi mail???
ô nào nào thay đổi để ra từng phiếu riệng của từng người?
ô nào là email?
 
Upvote 0
Vùng gửi mail từ A1:AB68.
Email nhận trong ô X10
Vòng lặp i thay đổi khiến ô AH5 và AH6 thay đổi ==> Từ số thay đổi này mình lấy ra được ID trong vùng AF:AG. Từ ID này form sẽ nhận dữ liệu vlookup trong sheets Payment.
 
Upvote 0
Vùng gửi mail từ A1:AB68.
Email nhận trong ô X10
Vòng lặp i thay đổi khiến ô AH5 và AH6 thay đổi ==> Từ số thay đổi này mình lấy ra được ID trong vùng AF:AG. Từ ID này form sẽ nhận dữ liệu vlookup trong sheets Payment.
hic coi nãy giờ mới ngộ ra...bạn làm vòng vo... nên không ai hiểu nổi!!!
tại sao bạn không trưc tiếp lấy dữ liệu trực trực tiếp từ sheet"Payment" thông qua giá trị chạy từ AG2 đến AH2? mà phải vòng qua cái ID ( AF:AG) mà bạn "copy tay" ra?
Tại sao phải có cái ô K5 trung gian để vlookup từ sheet"Payment" qua???
và thêm nữa tại sao phải tạo picture để ở khu vực F6:AB9 ???
Tất cà mấy cái này làm rất là "bất tiện" và không trong sáng trong file của ban => làm cho bạn quáng thêm nữa...
 
Upvote 0
hic coi nãy giờ mới ngộ ra...bạn làm vòng vo... nên không ai hiểu nổi!!!
tại sao bạn không trưc tiếp lấy dữ liệu trực trực tiếp từ sheet"Payment" thông qua giá trị chạy từ AG2 đến AH2? mà phải vòng qua cái ID ( AF:AG) mà bạn "copy tay" ra?
Tại sao phải có cái ô K5 trung gian để vlookup từ sheet"Payment" qua???

Thực ra không phải copy tay mà mình dùng đoạn code để lấy ID theo phòng ban, theo nhóm.
Code này chạy trên máy khác cũng office như mình thì bình thường, đính kèm ảnh ngon lành. Sang máy mình thì lại không có, cài lại office cũng vẫn vậy. Bạn chỉ mình cách nào khác mà đính kèm được ảnh là mình có thể giải quyết bài toán của mình. Hiện tại mình cũng cần gấp không có thời gian giải thích chi tiết thêm chỉ cần file thực thi chèn ảnh và gửi tự động là tốt rồi. Mong bạn có thể giúp mình tháo gỡ vấn đề chính này.
 
Upvote 0
Thực ra không phải copy tay mà mình dùng đoạn code để lấy ID theo phòng ban, theo nhóm.
Code này chạy trên máy khác cũng office như mình thì bình thường, đính kèm ảnh ngon lành. Sang máy mình thì lại không có, cài lại office cũng vẫn vậy. Bạn chỉ mình cách nào khác mà đính kèm được ảnh là mình có thể giải quyết bài toán của mình. Hiện tại mình cũng cần gấp không có thời gian giải thích chi tiết thêm chỉ cần file thực thi chèn ảnh và gửi tự động là tốt rồi. Mong bạn có thể giúp mình tháo gỡ vấn đề chính này.
Như tôi đã nói, máy của tôi chạy bình thường + với thông tin của bạn là chỉ máy của bạn gặp vấn đề. Vậy bạn nên làm là kiểm tra phiên bản của bạn đang dùng so với máy chạy được coi có khác gì không. Hoặc tìm giải pháp khác là không gửi dán hình qua bộ nhớ đệm như hiện tại.
 
Upvote 0
Như tôi đã nói, máy của tôi chạy bình thường + với thông tin của bạn là chỉ máy của bạn gặp vấn đề. Vậy bạn nên làm là kiểm tra phiên bản của bạn đang dùng so với máy chạy được coi có khác gì không. Hoặc tìm giải pháp khác là không gửi dán hình qua bộ nhớ đệm như hiện tại.
ANh gợi ý giúp em không gửi qua bộ nhớ đệm thì gửi bằng cách nào khác?
 
Upvote 0
Thực ra không phải copy tay mà mình dùng đoạn code để lấy ID theo phòng ban, theo nhóm.
Code này chạy trên máy khác cũng office như mình thì bình thường, đính kèm ảnh ngon lành. Sang máy mình thì lại không có, cài lại office cũng vẫn vậy. Bạn chỉ mình cách nào khác mà đính kèm được ảnh là mình có thể giải quyết bài toán của mình. Hiện tại mình cũng cần gấp không có thời gian giải thích chi tiết thêm chỉ cần file thực thi chèn ảnh và gửi tự động là tốt rồi. Mong bạn có thể giúp mình tháo gỡ vấn đề chính này.
Mã:
Option Explicit

' Chèn anh truc tiep vao mail
Sub SendMail2()
Dim OutApp As Object, OutMail As Object, objFSO As Object, oChart As Object
Dim Tu As Long, Den As Long, i As Long
Dim strPath As String, strFilePic As String
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    strPath = ThisWorkbook.Path
    If Right(strPath, 1) <> "\" Then strPath = strPath & "\"
    strFilePic = strPath & "PicPayment.jpg"
    
    With Sheets("Print")
        Tu = .Range("AG2")
        Den = .Range("AH2")
        For i = Tu To Den Step 2
            .Range("AH5") = i
        'Xoa Attached file hien huu neu có
            If objFSO.FileExists(strFilePic) Then objFSO.DeleteFile strFilePic
        'Tao file (Pic) chi tiet luong voi tên file kem duong dan: strFilePic
            Set oChart = .Shapes.AddChart(xlColumnClustered, .Range("A1:AB68").Width, Height:=.Range("A1:AB68").Height).Chart
            .Range("A1:AB68").CopyPicture xlScreen, xlPicture
            oChart.Parent.Activate
            oChart.Paste
            oChart.Export Filename:=strFilePic, FilterName:="jpg"
            oChart.Parent.Delete
            
            Set OutMail = OutApp.CreateItem(0)
            With OutMail
                .To = Sheets("Print").Range("X10").Value
                .Subject = "Phi" & ChrW(7871) & "u l" & ChrW(432) & ChrW(417) & "ng: " & Sheets("Print").Range("H2").Value
                .Attachments.Add strFilePic, 1, 0
                .HTMLBody = "Xin chào " & "<B>" & Sheets("Print").Range("K4") & "</B>" & _
                "<BR><BR>Phòng Nhân s" & ChrW(7921) & " xin g" & ChrW(7917) & "i l" & ChrW(7841) & "i b" & ChrW(7843) & "ng chi ti" & ChrW(7871) & "t l" & ChrW(432) & ChrW(417) & "ng " & ChrW(273) & "ã tr" & ChrW(7843) & " (tính sai) và b" & ChrW(7843) & "ng chi ti" & ChrW(7871) & "t l" & ChrW(432) & ChrW(417) & "ng tính l" & ChrW(7841) & "i (tính " & ChrW(273) & "úng)." & _
                                "<BR><BR><B>Xin c" & ChrW(7843) & "m " & ChrW(417) & "n,</B><BR><BR>" & _
                                "<img src=""cid:PicPayment.jpg"" height=520 width=750>" & _
                                "<BR><BR><B>Phòng Nhân s" & ChrW(7921) & "!</B>"
                .Display
                SendKeys "({DOWN})", True
                SendKeys "({DOWN})", True
                SendKeys "({DOWN})", True
                SendKeys "^({v})", True
                .Send
            End With
            Set OutMail = Nothing
            Set oChart = Nothing
        Next i
    End With
    Set OutApp = Nothing
    Set objFSO = Nothing
    Set oChart = Nothing
End Sub
thay code gởi mail của bạn bằng code trên
 
Upvote 0
Mã:
Option Explicit

' Chèn anh truc tiep vao mail
Sub SendMail2()
Dim OutApp As Object, OutMail As Object, objFSO As Object, oChart As Object
Dim Tu As Long, Den As Long, i As Long
Dim strPath As String, strFilePic As String
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
   
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    strPath = ThisWorkbook.Path
    If Right(strPath, 1) <> "\" Then strPath = strPath & "\"
    strFilePic = strPath & "PicPayment.jpg"
   
    With Sheets("Print")
        Tu = .Range("AG2")
        Den = .Range("AH2")
        For i = Tu To Den Step 2
            .Range("AH5") = i
        'Xoa Attached file hien huu neu có
            If objFSO.FileExists(strFilePic) Then objFSO.DeleteFile strFilePic
        'Tao file (Pic) chi tiet luong voi tên file kem duong dan: strFilePic
            Set oChart = .Shapes.AddChart(xlColumnClustered, .Range("A1:AB68").Width, Height:=.Range("A1:AB68").Height).Chart
            .Range("A1:AB68").CopyPicture xlScreen, xlPicture
            oChart.Parent.Activate
            oChart.Paste
            oChart.Export Filename:=strFilePic, FilterName:="jpg"
            oChart.Parent.Delete
           
            Set OutMail = OutApp.CreateItem(0)
            With OutMail
                .To = Sheets("Print").Range("X10").Value
                .Subject = "Phi" & ChrW(7871) & "u l" & ChrW(432) & ChrW(417) & "ng: " & Sheets("Print").Range("H2").Value
                .Attachments.Add strFilePic, 1, 0
                .HTMLBody = "Xin chào " & "<B>" & Sheets("Print").Range("K4") & "</B>" & _
                "<BR><BR>Phòng Nhân s" & ChrW(7921) & " xin g" & ChrW(7917) & "i l" & ChrW(7841) & "i b" & ChrW(7843) & "ng chi ti" & ChrW(7871) & "t l" & ChrW(432) & ChrW(417) & "ng " & ChrW(273) & "ã tr" & ChrW(7843) & " (tính sai) và b" & ChrW(7843) & "ng chi ti" & ChrW(7871) & "t l" & ChrW(432) & ChrW(417) & "ng tính l" & ChrW(7841) & "i (tính " & ChrW(273) & "úng)." & _
                                "<BR><BR><B>Xin c" & ChrW(7843) & "m " & ChrW(417) & "n,</B><BR><BR>" & _
                                "<img src=""cid:PicPayment.jpg"" height=520 width=750>" & _
                                "<BR><BR><B>Phòng Nhân s" & ChrW(7921) & "!</B>"
                .Display
                SendKeys "({DOWN})", True
                SendKeys "({DOWN})", True
                SendKeys "({DOWN})", True
                SendKeys "^({v})", True
                .Send
            End With
            Set OutMail = Nothing
            Set oChart = Nothing
        Next i
    End With
    Set OutApp = Nothing
    Set objFSO = Nothing
    Set oChart = Nothing
End Sub
thay code gởi mail của bạn bằng code trên
Cảm ơn bạn, để mình thử nhé.
Bài đã được tự động gộp:

Mã:
Option Explicit

' Chèn anh truc tiep vao mail
Sub SendMail2()
Dim OutApp As Object, OutMail As Object, objFSO As Object, oChart As Object
Dim Tu As Long, Den As Long, i As Long
Dim strPath As String, strFilePic As String
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
   
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    strPath = ThisWorkbook.Path
    If Right(strPath, 1) <> "\" Then strPath = strPath & "\"
    strFilePic = strPath & "PicPayment.jpg"
   
    With Sheets("Print")
        Tu = .Range("AG2")
        Den = .Range("AH2")
        For i = Tu To Den Step 2
            .Range("AH5") = i
        'Xoa Attached file hien huu neu có
            If objFSO.FileExists(strFilePic) Then objFSO.DeleteFile strFilePic
        'Tao file (Pic) chi tiet luong voi tên file kem duong dan: strFilePic
            Set oChart = .Shapes.AddChart(xlColumnClustered, .Range("A1:AB68").Width, Height:=.Range("A1:AB68").Height).Chart
            .Range("A1:AB68").CopyPicture xlScreen, xlPicture
            oChart.Parent.Activate
            oChart.Paste
            oChart.Export Filename:=strFilePic, FilterName:="jpg"
            oChart.Parent.Delete
           
            Set OutMail = OutApp.CreateItem(0)
            With OutMail
                .To = Sheets("Print").Range("X10").Value
                .Subject = "Phi" & ChrW(7871) & "u l" & ChrW(432) & ChrW(417) & "ng: " & Sheets("Print").Range("H2").Value
                .Attachments.Add strFilePic, 1, 0
                .HTMLBody = "Xin chào " & "<B>" & Sheets("Print").Range("K4") & "</B>" & _
                "<BR><BR>Phòng Nhân s" & ChrW(7921) & " xin g" & ChrW(7917) & "i l" & ChrW(7841) & "i b" & ChrW(7843) & "ng chi ti" & ChrW(7871) & "t l" & ChrW(432) & ChrW(417) & "ng " & ChrW(273) & "ã tr" & ChrW(7843) & " (tính sai) và b" & ChrW(7843) & "ng chi ti" & ChrW(7871) & "t l" & ChrW(432) & ChrW(417) & "ng tính l" & ChrW(7841) & "i (tính " & ChrW(273) & "úng)." & _
                                "<BR><BR><B>Xin c" & ChrW(7843) & "m " & ChrW(417) & "n,</B><BR><BR>" & _
                                "<img src=""cid:PicPayment.jpg"" height=520 width=750>" & _
                                "<BR><BR><B>Phòng Nhân s" & ChrW(7921) & "!</B>"
                .Display
                SendKeys "({DOWN})", True
                SendKeys "({DOWN})", True
                SendKeys "({DOWN})", True
                SendKeys "^({v})", True
                .Send
            End With
            Set OutMail = Nothing
            Set oChart = Nothing
        Next i
    End With
    Set OutApp = Nothing
    Set objFSO = Nothing
    Set oChart = Nothing
End Sub
thay code gởi mail của bạn bằng code trên
Bạn ơi ảnh thì chèn vào được rồi nhưng mà không nhìn thấy nội dung
1597301515037.png
 
Upvote 0
Cảm ơn anh, vậy không được rồi. Vì vấn đề nhạy cảm nên em vẫn cần sử dụng form như trước kia dùng.
Vậy bạn có thể thử code sau nhé:

Mã:
Sub SendMail2()
    Dim OutApp As Object
    Dim outMail As Object
    Dim objMailDocument As Object
    Dim Tu As Long, Den As Long, i As Long
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    With Sheets("Print")
        Tu = .Range("M1")
        Den = .Range("O1")
        For i = Tu To Den Step 1
            .Range("M2") = i
            .Range("A1:G4").CopyPicture
            Set outMail = OutApp.CreateItem(0)
            With outMail
                .To = Sheets("Print").Range("G2").Value
                .Subject = "Phi" & ChrW(7871) & "u l" & ChrW(432) & ChrW(417) & "ng: " & Sheets("Print").Range("H2").Value
                .HTMLBody = "Xin chào " & "<B>" & Sheets("Print").Range("K4") & "</B>" & _
                "<BR><BR>Phòng Nhân s" & ChrW(7921) & " xin g" & ChrW(7917) & "i l" & ChrW(7841) & "i b" & ChrW(7843) & "ng chi ti" & ChrW(7871) & "t l" & ChrW(432) & ChrW(417) & "ng " & ChrW(273) & "ã tr" & ChrW(7843) & " và b" & ChrW(7843) & "ng chi ti" & ChrW(7871) & "t l" & ChrW(432) & ChrW(417) & "ng tính l" & ChrW(7841) & "i )." & _
                                "<BR><BR><BR><B>Xin c" & ChrW(7843) & "m " & ChrW(417) & "n,</B><BR>" & _
                               "<BR><B>Phòng Nhân s" & ChrW(7921) & "!</B><br><a href=https://www.giaiphapexcel.com/diendan/threads/g%E1%BB%ADi-email-t%C3%ADnh-l%C6%B0%C6%A1ng-cho-t%E1%BB%ABng-ng%C6%B0%E1%BB%9Di.48211/page-17>Xem thêm tai dây</a><br><strong>Hai Lúa Miên Tây</strong>"
                .Display
                Set objMailDocument = outMail.GetInspector.WordEditor
                objMailDocument.Range(100, 100).Paste
                .send
            End With
            Set outMail = Nothing
        Next i
    End With
    Set OutApp = Nothing
End Sub
 
Upvote 0
Cảm ơn bạn, để mình thử nhé.
Bài đã được tự động gộp:


Bạn ơi ảnh thì chèn vào được rồi nhưng mà không nhìn thấy nội dung
View attachment 243038
đó bạn thấy chưa? xử lý hình ảnh không phải là đơn giản, thế tại sao bạn không gởi file Pdf cho dễ dàng hơn??? pdf thì cũng như hình ảnh thôi, chỉ tạo đúng vùng A1:AB68 đó!!!!!!!!!!!!!!!!

Mã:
Option Explicit

Sub SendMail2()
Dim OutApp As Object, OutMail As Object, objFSO As Object, oChart As Object
Dim Tu As Long, Den As Long, i As Long
Dim strPath As String, strFileAtt As String
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    strPath = ThisWorkbook.Path
    If Right(strPath, 1) <> "\" Then strPath = strPath & "\"
    strFileAtt = strPath & "Payment.Pdf"
    
    With Sheets("Print")
        Tu = .Range("AG2")
        Den = .Range("AH2")
        For i = Tu To Den Step 2
            .Range("AH5") = i
        'Xoa Attached file hien huu neu có
            If objFSO.FileExists(strFileAtt) Then objFSO.DeleteFile strFileAtt
        'Tao file attached (.Pdf) chi tiet luong
            .Range("A1:AB68").ExportAsFixedFormat Type:=xlTypePDF, _
                                                  Filename:=strFileAtt, _
                                                  Quality:=xlQualityStandard, _
                                                  IncludeDocProperties:=True, _
                                                  IgnorePrintAreas:=False, _
                                                  OpenAfterPublish:=False
            
            Set OutMail = OutApp.CreateItem(0)
            With OutMail
                .To = Sheets("Print").Range("X10").Value
                .Subject = "Phi" & ChrW(7871) & "u l" & ChrW(432) & ChrW(417) & "ng: " & Sheets("Print").Range("H2").Value
                .Attachments.Add strFileAtt, 1, 0
                .HTMLBody = "Xin chào " & "<B>" & Sheets("Print").Range("K4") & "</B>" & _
                "<BR><BR>Phòng Nhân s" & ChrW(7921) & " xin g" & ChrW(7917) & "i l" & ChrW(7841) & "i b" & ChrW(7843) & "ng chi ti" & ChrW(7871) & "t l" & ChrW(432) & ChrW(417) & "ng " & ChrW(273) & "ã tr" & ChrW(7843) & " (tính sai) và b" & ChrW(7843) & "ng chi ti" & ChrW(7871) & "t l" & ChrW(432) & ChrW(417) & "ng tính l" & ChrW(7841) & "i (tính " & ChrW(273) & "úng)." & _
                                "<BR><BR><B>Xin c" & ChrW(7843) & "m " & ChrW(417) & "n,</B><BR><BR>" & _
                                "<BR><BR><B>Phòng Nhân s" & ChrW(7921) & "!</B>"
                .Display
                SendKeys "({DOWN})", True
                SendKeys "({DOWN})", True
                SendKeys "({DOWN})", True
                SendKeys "^({v})", True
                .Send
            End With
            If objFSO.FileExists(strFileAtt) Then objFSO.DeleteFile strFileAtt
            Set OutMail = Nothing
            Set oChart = Nothing
        Next i
    End With
    Set OutApp = Nothing
    Set objFSO = Nothing
    Set oChart = Nothing
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Vậy bạn có thể thử code sau nhé:

Mã:
Sub SendMail2()
    Dim OutApp As Object
    Dim outMail As Object
    Dim objMailDocument As Object
    Dim Tu As Long, Den As Long, i As Long
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    With Sheets("Print")
        Tu = .Range("M1")
        Den = .Range("O1")
        For i = Tu To Den Step 1
            .Range("M2") = i
            .Range("A1:G4").CopyPicture
            Set outMail = OutApp.CreateItem(0)
            With outMail
                .To = Sheets("Print").Range("G2").Value
                .Subject = "Phi" & ChrW(7871) & "u l" & ChrW(432) & ChrW(417) & "ng: " & Sheets("Print").Range("H2").Value
                .HTMLBody = "Xin chào " & "<B>" & Sheets("Print").Range("K4") & "</B>" & _
                "<BR><BR>Phòng Nhân s" & ChrW(7921) & " xin g" & ChrW(7917) & "i l" & ChrW(7841) & "i b" & ChrW(7843) & "ng chi ti" & ChrW(7871) & "t l" & ChrW(432) & ChrW(417) & "ng " & ChrW(273) & "ã tr" & ChrW(7843) & " và b" & ChrW(7843) & "ng chi ti" & ChrW(7871) & "t l" & ChrW(432) & ChrW(417) & "ng tính l" & ChrW(7841) & "i )." & _
                                "<BR><BR><BR><B>Xin c" & ChrW(7843) & "m " & ChrW(417) & "n,</B><BR>" & _
                               "<BR><B>Phòng Nhân s" & ChrW(7921) & "!</B><br><a href=https://www.giaiphapexcel.com/diendan/threads/g%E1%BB%ADi-email-t%C3%ADnh-l%C6%B0%C6%A1ng-cho-t%E1%BB%ABng-ng%C6%B0%E1%BB%9Di.48211/page-17>Xem thêm tai dây</a><br><strong>Hai Lúa Miên Tây</strong>"
                .Display
                Set objMailDocument = outMail.GetInspector.WordEditor
                objMailDocument.Range(100, 100).Paste
                .send
            End With
            Set outMail = Nothing
        Next i
    End With
    Set OutApp = Nothing
End Sub
Ảnh chèn vào rồi mà phân giải thấp không nhìn được rõ nội dung anh ạ. Chắc cũng chỉ đến được như vậy :(. Vì nội dung của em thể hiện trong bài 305 nó là một vùng từ A1 đến AB68
Bài đã được tự động gộp:

đó bạn thấy chưa? xử lý hình ảnh không phải là đơn giản, thế tại sao bạn không gởi file Pdf cho dễ dàng hơn??? pdf thì cũng như hình ảnh thôi, chỉ tạo đúng vùng A1:AB68 đó!!!!!!!!!!!!!!!!

Mã:
Option Explicit

Sub SendMail2()
Dim OutApp As Object, OutMail As Object, objFSO As Object, oChart As Object
Dim Tu As Long, Den As Long, i As Long
Dim strPath As String, strFileAtt As String
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
  
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    strPath = ThisWorkbook.Path
    If Right(strPath, 1) <> "\" Then strPath = strPath & "\"
    strFileAtt = strPath & "Payment.Pdf"
  
    With Sheets("Print")
        Tu = .Range("AG2")
        Den = .Range("AH2")
        For i = Tu To Den Step 2
            .Range("AH5") = i
        'Xoa Attached file hien huu neu có
            If objFSO.FileExists(strFileAtt) Then objFSO.DeleteFile strFileAtt
        'Tao file attached (.Pdf) chi tiet luong
            .Range("A1:AB68").ExportAsFixedFormat Type:=xlTypePDF, _
                                                  Filename:=strFileAtt, _
                                                  Quality:=xlQualityStandard, _
                                                  IncludeDocProperties:=True, _
                                                  IgnorePrintAreas:=False, _
                                                  OpenAfterPublish:=False
          
            Set OutMail = OutApp.CreateItem(0)
            With OutMail
                .To = Sheets("Print").Range("X10").Value
                .Subject = "Phi" & ChrW(7871) & "u l" & ChrW(432) & ChrW(417) & "ng: " & Sheets("Print").Range("H2").Value
                .Attachments.Add strFileAtt, 1, 0
                .HTMLBody = "Xin chào " & "<B>" & Sheets("Print").Range("K4") & "</B>" & _
                "<BR><BR>Phòng Nhân s" & ChrW(7921) & " xin g" & ChrW(7917) & "i l" & ChrW(7841) & "i b" & ChrW(7843) & "ng chi ti" & ChrW(7871) & "t l" & ChrW(432) & ChrW(417) & "ng " & ChrW(273) & "ã tr" & ChrW(7843) & " (tính sai) và b" & ChrW(7843) & "ng chi ti" & ChrW(7871) & "t l" & ChrW(432) & ChrW(417) & "ng tính l" & ChrW(7841) & "i (tính " & ChrW(273) & "úng)." & _
                                "<BR><BR><B>Xin c" & ChrW(7843) & "m " & ChrW(417) & "n,</B><BR><BR>" & _
                                "<BR><BR><B>Phòng Nhân s" & ChrW(7921) & "!</B>"
                .Display
                SendKeys "({DOWN})", True
                SendKeys "({DOWN})", True
                SendKeys "({DOWN})", True
                SendKeys "^({v})", True
                .Send
            End With
            If objFSO.FileExists(strFileAtt) Then objFSO.DeleteFile strFileAtt
            Set OutMail = Nothing
            Set oChart = Nothing
        Next i
    End With
    Set OutApp = Nothing
    Set objFSO = Nothing
    Set oChart = Nothing
End Sub
Nếu chuyển pdf thì mình phải sửa như nào? Căn bản sợ máy CNV không đọc được hoặc có người không biết. Vì vậy mình mới chọn phương án hiện ảnh trực tiếp.
 
Upvote 0
Nếu chuyển pdf thì mình phải sửa như nào? Căn bản sợ máy CNV không đọc được hoặc có người không biết. Vì vậy mình mới chọn phương án hiện ảnh trực tiếp.
Nay mà còn sợ có người không đọc được pdf? Các "ông trình duyệt" đã đọc giúp từ lâu rồi.
 
Upvote 0
Ảnh chèn vào rồi mà phân giải thấp không nhìn được rõ nội dung anh ạ. Chắc cũng chỉ đến được như vậy :(. Vì nội dung của em thể hiện trong bài 305 nó là một vùng từ A1 đến AB68
Vậy bạn có đồng ý copy nguyên bảng dữ liệu và dán vào Outlook giữ nguyên định dạng gốc bên excel? Chỉ khác chỗ thay ảnh thành bảng dữ liệu.
 
Upvote 0
Đồng ý anh ơi, miễn sao thể hiện hết nội dung và form giữ nguyên anh ạ.
Vậy bạn thử code sau nhé:

Mã:
Option Explicit
Sub SendMail2()
    Dim OutApp As Object
    Dim outMail As Object
    Dim objMailDocument As Object
    Dim Tu As Long, Den As Long, i As Long
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    With Sheets("Print")
        Tu = .Range("M1")
        Den = .Range("O1")
        For i = Tu To Den Step 1
            .Range("M2") = i
            .Range("A1:G4").Copy 'Picture
            Set outMail = OutApp.CreateItem(0)
            With outMail
                .To = Sheets("Print").Range("G2").Value
                .Subject = "Phi" & ChrW(7871) & "u l" & ChrW(432) & ChrW(417) & "ng: " & Sheets("Print").Range("H2").Value
                .HTMLBody = "Xin chào " & "<B>" & Sheets("Print").Range("K4") & "</B>" & _
                "<BR><BR>Phòng Nhân s" & ChrW(7921) & " xin g" & ChrW(7917) & "i l" & ChrW(7841) & "i b" & ChrW(7843) & "ng chi ti" & ChrW(7871) & "t l" & ChrW(432) & ChrW(417) & "ng " & ChrW(273) & "ã tr" & ChrW(7843) & " và b" & ChrW(7843) & "ng chi ti" & ChrW(7871) & "t l" & ChrW(432) & ChrW(417) & "ng tính l" & ChrW(7841) & "i )." & _
                                "<BR><BR><BR><B>Xin c" & ChrW(7843) & "m " & ChrW(417) & "n,</B><BR>" & _
                               "<BR><B>Phòng Nhân s" & ChrW(7921) & "!</B><br><a href=https://www.giaiphapexcel.com/diendan/threads/g%E1%BB%ADi-email-t%C3%ADnh-l%C6%B0%C6%A1ng-cho-t%E1%BB%ABng-ng%C6%B0%E1%BB%9Di.48211/page-17>Xem thêm tai dây</a><br><strong>Hai Lúa Miên Tây</strong>"
                .Display
                Set objMailDocument = outMail.GetInspector.WordEditor
                objMailDocument.Range(100, 100).PasteAndFormat 1
                .send
            End With
            Set outMail = Nothing
        Next i
    End With
    Set OutApp = Nothing
End Sub
 
Upvote 0
Cảm ơn bạn, để mình thử nhé.
Bài đã được tự động gộp:


Bạn ơi ảnh thì chèn vào được rồi nhưng mà không nhìn thấy nội dung
View attachment 243038
Tôi đã xử lý cái hình không nhhi2n thấy cho bạn được rồi nè...
Bạn chép code này vào code gởi mail của bạn nha
Mã:
Option Explicit

' Chèn anh truc tiep vao mail
Sub SendMail2()
Dim OutApp As Object, OutMail As Object, objFSO As Object, oChart As Object
Dim Tu As Long, Den As Long, i As Long
Dim strPath As String, strFilePic As String
Dim dbWidth As Double, dbHeight As Double
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    strPath = ThisWorkbook.Path
    If Right(strPath, 1) <> "\" Then strPath = strPath & "\"
    strFilePic = strPath & "PicPayment.jpg"
    
    With Sheets("Print")
        
        Tu = .Range("AG2")
        Den = .Range("AH2")
        For i = Tu To Den Step 2
            .Range("AH5") = i
            If objFSO.FileExists(strFilePic) Then objFSO.DeleteFile strFilePic
            .Range("A1:AB68").CopyPicture xlScreen, xlPicture
            dbWidth = Round(.Range("A1:AB68").Width, 0)
            dbHeight = Round(.Range("A1:AB68").Height, 0)
            .Range("A1").Select
            Set oChart = .Shapes.AddChart(Width:=dbWidth, Height:=dbHeight).Chart
            oChart.Parent.Activate
            oChart.Paste
            oChart.Export Filename:=strFilePic, FilterName:="jpg"
            oChart.Parent.Delete
            
            Set OutMail = OutApp.CreateItem(0)
            With OutMail
                .To = Sheets("Print").Range("X10").Value
                .Subject = "Phi" & ChrW(7871) & "u l" & ChrW(432) & ChrW(417) & "ng: " & Sheets("Print").Range("H2").Value
                .Attachments.Add strFilePic, 1, 0
                .HTMLBody = "Xin chào " & "<B>" & Sheets("Print").Range("K4") & "</B>" & _
                "<BR><BR>Phòng Nhân s" & ChrW(7921) & " xin g" & ChrW(7917) & "i l" & ChrW(7841) & "i b" & ChrW(7843) & "ng chi ti" & ChrW(7871) & "t l" & ChrW(432) & ChrW(417) & "ng " & ChrW(273) & "ã tr" & ChrW(7843) & " (tính sai) và b" & ChrW(7843) & "ng chi ti" & ChrW(7871) & "t l" & ChrW(432) & ChrW(417) & "ng tính l" & ChrW(7841) & "i (tính " & ChrW(273) & "úng)." & _
                                "<BR><BR><B>Xin c" & ChrW(7843) & "m " & ChrW(417) & "n,</B><BR><BR>" & _
                                "<BR><BR><B>Phòng Nhân s" & ChrW(7921) & "!</B>" & _
                                "<img src=""cid:PicPayment.jpg"">"
                .Display
                SendKeys "({DOWN})", True
                SendKeys "({DOWN})", True
                SendKeys "({DOWN})", True
                SendKeys "^({v})", True
                .Send
            End With
            If objFSO.FileExists(strFilePic) Then objFSO.DeleteFile strFilePic
            Set OutMail = Nothing
            Set oChart = Nothing
        Next i
    End With
    Set OutApp = Nothing
    Set objFSO = Nothing
    Set oChart = Nothing
End Sub
 
Upvote 0
Vậy bạn thử code sau nhé:

Mã:
Option Explicit
Sub SendMail2()
    Dim OutApp As Object
    Dim outMail As Object
    Dim objMailDocument As Object
    Dim Tu As Long, Den As Long, i As Long
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    With Sheets("Print")
        Tu = .Range("M1")
        Den = .Range("O1")
        For i = Tu To Den Step 1
            .Range("M2") = i
            .Range("A1:G4").Copy 'Picture
            Set outMail = OutApp.CreateItem(0)
            With outMail
                .To = Sheets("Print").Range("G2").Value
                .Subject = "Phi" & ChrW(7871) & "u l" & ChrW(432) & ChrW(417) & "ng: " & Sheets("Print").Range("H2").Value
                .HTMLBody = "Xin chào " & "<B>" & Sheets("Print").Range("K4") & "</B>" & _
                "<BR><BR>Phòng Nhân s" & ChrW(7921) & " xin g" & ChrW(7917) & "i l" & ChrW(7841) & "i b" & ChrW(7843) & "ng chi ti" & ChrW(7871) & "t l" & ChrW(432) & ChrW(417) & "ng " & ChrW(273) & "ã tr" & ChrW(7843) & " và b" & ChrW(7843) & "ng chi ti" & ChrW(7871) & "t l" & ChrW(432) & ChrW(417) & "ng tính l" & ChrW(7841) & "i )." & _
                                "<BR><BR><BR><B>Xin c" & ChrW(7843) & "m " & ChrW(417) & "n,</B><BR>" & _
                               "<BR><B>Phòng Nhân s" & ChrW(7921) & "!</B><br><a href=https://www.giaiphapexcel.com/diendan/threads/g%E1%BB%ADi-email-t%C3%ADnh-l%C6%B0%C6%A1ng-cho-t%E1%BB%ABng-ng%C6%B0%E1%BB%9Di.48211/page-17>Xem thêm tai dây</a><br><strong>Hai Lúa Miên Tây</strong>"
                .Display
                Set objMailDocument = outMail.GetInspector.WordEditor
                objMailDocument.Range(100, 100).PasteAndFormat 1
                .send
            End With
            Set outMail = Nothing
        Next i
    End With
    Set OutApp = Nothing
End Sub
Vẫn vậy anh ạ, các nội dung bé không hiện rõ được.1597306973765.png
 
Upvote 0
Tôi đã xử lý cái hình không nhhi2n thấy cho bạn được rồi nè...
Bạn chép code này vào code gởi mail của bạn nha
Mã:
Option Explicit

' Chèn anh truc tiep vao mail
Sub SendMail2()
Dim OutApp As Object, OutMail As Object, objFSO As Object, oChart As Object
Dim Tu As Long, Den As Long, i As Long
Dim strPath As String, strFilePic As String
Dim dbWidth As Double, dbHeight As Double
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
   
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    strPath = ThisWorkbook.Path
    If Right(strPath, 1) <> "\" Then strPath = strPath & "\"
    strFilePic = strPath & "PicPayment.jpg"
   
    With Sheets("Print")
       
        Tu = .Range("AG2")
        Den = .Range("AH2")
        For i = Tu To Den Step 2
            .Range("AH5") = i
            If objFSO.FileExists(strFilePic) Then objFSO.DeleteFile strFilePic
            .Range("A1:AB68").CopyPicture xlScreen, xlPicture
            dbWidth = Round(.Range("A1:AB68").Width, 0)
            dbHeight = Round(.Range("A1:AB68").Height, 0)
            .Range("A1").Select
            Set oChart = .Shapes.AddChart(Width:=dbWidth, Height:=dbHeight).Chart
            oChart.Parent.Activate
            oChart.Paste
            oChart.Export Filename:=strFilePic, FilterName:="jpg"
            oChart.Parent.Delete
           
            Set OutMail = OutApp.CreateItem(0)
            With OutMail
                .To = Sheets("Print").Range("X10").Value
                .Subject = "Phi" & ChrW(7871) & "u l" & ChrW(432) & ChrW(417) & "ng: " & Sheets("Print").Range("H2").Value
                .Attachments.Add strFilePic, 1, 0
                .HTMLBody = "Xin chào " & "<B>" & Sheets("Print").Range("K4") & "</B>" & _
                "<BR><BR>Phòng Nhân s" & ChrW(7921) & " xin g" & ChrW(7917) & "i l" & ChrW(7841) & "i b" & ChrW(7843) & "ng chi ti" & ChrW(7871) & "t l" & ChrW(432) & ChrW(417) & "ng " & ChrW(273) & "ã tr" & ChrW(7843) & " (tính sai) và b" & ChrW(7843) & "ng chi ti" & ChrW(7871) & "t l" & ChrW(432) & ChrW(417) & "ng tính l" & ChrW(7841) & "i (tính " & ChrW(273) & "úng)." & _
                                "<BR><BR><B>Xin c" & ChrW(7843) & "m " & ChrW(417) & "n,</B><BR><BR>" & _
                                "<BR><BR><B>Phòng Nhân s" & ChrW(7921) & "!</B>" & _
                                "<img src=""cid:PicPayment.jpg"">"
                .Display
                SendKeys "({DOWN})", True
                SendKeys "({DOWN})", True
                SendKeys "({DOWN})", True
                SendKeys "^({v})", True
                .Send
            End With
            If objFSO.FileExists(strFilePic) Then objFSO.DeleteFile strFilePic
            Set OutMail = Nothing
            Set oChart = Nothing
        Next i
    End With
    Set OutApp = Nothing
    Set objFSO = Nothing
    Set oChart = Nothing
End Sub
Ôi ngon rồi bạn ơi. Cảm ơn bạn thnghiachau, cảm ơn anh Hai Lúa Miền Tây!
Bài đã được tự động gộp:

Lạ nhỉ, Bạn xem lại giúp nó là dạng text hay là dạng ảnh nhé.
Dạng ảnh anh ạ.
 
Upvote 0
Nếu chuyển pdf thì mình phải sửa như nào? Căn bản sợ máy CNV không đọc được hoặc có người không biết. Vì vậy mình mới chọn phương án hiện ảnh trực tiếp.
Bạn coi lại bài #325 đi, tôi có đưa code cho bạn luôn rùi đó
Nhắc lại: bạn coi bài #331, Tôi cũng đã chỉnh lại việc không nhìn thấy luôn cho bạn rùi, tôi chay thử code và nhận hình OK lắm!!!
 
Upvote 0
Upvote 0
Vậy bạn có chắc là bạn chạy đúng code trên không, đặc biệt chỗ
.Range("A1:G4").Copy 'Picture
Vậy bạn có chắc là bạn chạy đúng code trên không, đặc biệt chỗ
Phải là
.Range("A1:G4").Copy 'Picture
Chứ không phải
.Range("A1:G4").CopyPicture
Em thay bằng vùng thực tế của em là A1:AB68 anh
Vậy bạn có chắc là bạn chạy đúng code trên không, đặc biệt chỗ
Phải là
.Range("A1:G4").Copy 'Picture
Chứ không phải
.Range("A1:G4").CopyPicture
Em xin lỗi em bổ sung thêm mỗi dòng
Set objMailDocument = OutMail.GetInspector.WordEditor
objMailDocument.Range(100, 100).PasteAndFormat 1
Sửa lại bỏ picture thành .Range("A1:AB68").Copy thì cũng ổn rồi anh ạ. Cảm ơn anh nhé!
.
Bài đã được tự động gộp:

Phù phù... hết một buổi chiều bị bạn quay chóng mặt luôn....
Nhưng dù sao làm được thì mừng vì mình mới học được cái hay!!!
Cám ơn bạn nhá....
Hiiiiii, trình mình chưa thể hiểu được cái hay hay bạn khám phá. Mình xử lý công việc đã nhé. Cảm ơn rất nhiều!
 
Upvote 0
Tôi đã xử lý cái hình không nhhi2n thấy cho bạn được rồi nè...
Bạn chép code này vào code gởi mail của bạn nha
Mã:
Option Explicit

' Chèn anh truc tiep vao mail
Sub SendMail2()
Dim OutApp As Object, OutMail As Object, objFSO As Object, oChart As Object
Dim Tu As Long, Den As Long, i As Long
Dim strPath As String, strFilePic As String
Dim dbWidth As Double, dbHeight As Double
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
   
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    strPath = ThisWorkbook.Path
    If Right(strPath, 1) <> "\" Then strPath = strPath & "\"
    strFilePic = strPath & "PicPayment.jpg"
   
    With Sheets("Print")
       
        Tu = .Range("AG2")
        Den = .Range("AH2")
        For i = Tu To Den Step 2
            .Range("AH5") = i
            If objFSO.FileExists(strFilePic) Then objFSO.DeleteFile strFilePic
            .Range("A1:AB68").CopyPicture xlScreen, xlPicture
            dbWidth = Round(.Range("A1:AB68").Width, 0)
            dbHeight = Round(.Range("A1:AB68").Height, 0)
            .Range("A1").Select
            Set oChart = .Shapes.AddChart(Width:=dbWidth, Height:=dbHeight).Chart
            oChart.Parent.Activate
            oChart.Paste
            oChart.Export Filename:=strFilePic, FilterName:="jpg"
            oChart.Parent.Delete
           
            Set OutMail = OutApp.CreateItem(0)
            With OutMail
                .To = Sheets("Print").Range("X10").Value
                .Subject = "Phi" & ChrW(7871) & "u l" & ChrW(432) & ChrW(417) & "ng: " & Sheets("Print").Range("H2").Value
                .Attachments.Add strFilePic, 1, 0
                .HTMLBody = "Xin chào " & "<B>" & Sheets("Print").Range("K4") & "</B>" & _
                "<BR><BR>Phòng Nhân s" & ChrW(7921) & " xin g" & ChrW(7917) & "i l" & ChrW(7841) & "i b" & ChrW(7843) & "ng chi ti" & ChrW(7871) & "t l" & ChrW(432) & ChrW(417) & "ng " & ChrW(273) & "ã tr" & ChrW(7843) & " (tính sai) và b" & ChrW(7843) & "ng chi ti" & ChrW(7871) & "t l" & ChrW(432) & ChrW(417) & "ng tính l" & ChrW(7841) & "i (tính " & ChrW(273) & "úng)." & _
                                "<BR><BR><B>Xin c" & ChrW(7843) & "m " & ChrW(417) & "n,</B><BR><BR>" & _
                                "<BR><BR><B>Phòng Nhân s" & ChrW(7921) & "!</B>" & _
                                "<img src=""cid:PicPayment.jpg"">"
                .Display
                SendKeys "({DOWN})", True
                SendKeys "({DOWN})", True
                SendKeys "({DOWN})", True
                SendKeys "^({v})", True
                .Send
            End With
            If objFSO.FileExists(strFilePic) Then objFSO.DeleteFile strFilePic
            Set OutMail = Nothing
            Set oChart = Nothing
        Next i
    End With
    Set OutApp = Nothing
    Set objFSO = Nothing
    Set oChart = Nothing
End Sub
Ahhhh, trong code của tôi bạn xóa các dòng:
.Display
SendKeys "({DOWN})", True
SendKeys "({DOWN})", True
SendKeys "({DOWN})", True
SendKeys "^({v})", True

đi nha,
Nó sẽ không hiện ra cái outlook editor mà nó send mail cho bạn luôn, như thế bạn khỏi mắc công vừa nhấn vừa đơi nó send mail rùi đợi nhấn và send kế tiếp....
Bạn đi uống cafe rùi quay lại thì xong nha!
 
Upvote 0
Ahhhh, trong code của tôi bạn xóa các dòng:
.Display
SendKeys "({DOWN})", True
SendKeys "({DOWN})", True
SendKeys "({DOWN})", True
SendKeys "^({v})", True

đi nha,
Nó sẽ không hiện ra cái outlook editor mà nó send mail cho bạn luôn, như thế bạn khỏi mắc công vừa nhấn vừa đơi nó send mail rùi đợi nhấn và send kế tiếp....
Bạn đi uống cafe rùi quay lại thì xong nha!
Hết dịch làm vại bia nhé bạn ;)
 
Upvote 0
Tôi cho bạn ví dụ thực tế. :D
Tuy không đặt ảnh ở F6:AB9 nhưng bản chất như nhau.

A1 = "Công ty TNHH Thăng Long"
Chèn logo của công ty vào A2:A6

Gửi: vd. A1: G25
Chào anh batman1 !
Em ngưỡng mộ anh từ lâu. Anh có thể chỉ thêm một cách khác cho em học hỏi được không ạ?
 
Upvote 0
Mọi người coi giúp giùm em, sao code của em tạo được pdf, ra email nhưng nó lại không chèn pdf vào email. Với nếu muốn tạo password cho file pdf theo ô trong sheet thì có đc ko ạ. Cám ơn mọi người
 

File đính kèm

Upvote 0
có thể chỉ thêm một cách khác cho em học hỏi được không ạ?

Bạn tạo 1 cái form đăng nhập và tạo tài khoản đăng nhập cho các nhân viên trong công ty. Sau đó bạn có thể gửi nguyên cả file lương lên nhóm của công ty để mọi người đăng nhập vào. Người nào đăng nhập thì chỉ xem được phần lương của người đó.
 
Upvote 0
Mọi người coi giúp giùm em, sao code của em tạo được pdf, ra email nhưng nó lại không chèn pdf vào email.
Bạn đọc tất cả các bài trong chủ đề này
Với nếu muốn tạo password cho file pdf theo ô trong sheet thì có đc ko ạ.
Đã gởi mail riêng thì cần pass làm chi cho phức tạp?
 
Upvote 0
Bạn đọc tất cả các bài trong chủ đề này

Đã gởi mail riêng thì cần pass làm chi cho phức tạp?
Vấn đề là nếu bạn nào vô tình vào máy mà mở lên thì vẫn đọc được payslip á bạn.
Bài đã được tự động gộp:

Bạn thử đọc bài 325 nhé.
Mình không chuyên lắm nên nhìn code không biết được lỗi, file của mình là tạo được pdf rồi, hiện ra email rồi nhưng vấn đề là file pdf không insert vào email được.
 
Upvote 0
Mọi người coi giúp giùm em, sao code của em tạo được pdf, ra email nhưng nó lại không chèn pdf vào email. Với nếu muốn tạo password cho file pdf theo ô trong sheet thì có đc ko ạ. Cám ơn mọi người
code bạn:
Mã:
Option Explicit

Sub SendMail()
Dim OutApp As Object
Dim OutMail As Object
Dim printFrom As Variant, printTo As Variant
Dim sFile As String
Dim sPath As String
Dim i As Long
    printFrom = Sheets("Payslip").Range("G13")
    printTo = Sheets("Payslip").Range("G14")
    Set OutApp = CreateObject("Outlook.Application")
    For i = printFrom To printTo
        Sheets("Payslip").Range("G10") = i
        sPath = Application.ActiveWorkbook.Path
        sFile = sPath & "\" & "Payslip Dec 2019 - " & Sheets("Payslip").Range("B5") & ".pdf"
        Sheets("Payslip").Range("A1:C55").ExportAsFixedFormat Type:=xlTypePDF, _
                                                              filename:=sFile, _
                                                              Quality:=xlQualityStandard, _
                                                              IncludeDocProperties:=True, _
                                                              IgnorePrintAreas:=False, _
                                                              OpenAfterPublish:=False
        Set OutMail = OutApp.CreateItem(0)
        With OutMail
            .To = Sheets("Payslip").Range("B6")
            .CC = ""
            .BCC = ""
            .Subject = "Payslip Jan 2020"
            .HTMLBody = " Dear " & Sheets("Payslip").Range("B5") & "</B> <BR><BR> Kindly find attachment payslip of December 2019. <BR>" & _
                        "<BR>Should you have any questions, do not hestitate to contact us." & _
                        "<BR><BR>Thanks & regards</B><BR>" & _
                        "</B>"
            .Attachments.Add (sFile)
            .Send
        End With
        Set OutMail = Nothing
    Next i
    Set OutApp = Nothing
    Set OutMail = Nothing

End Sub
 
Upvote 0
Chào bạn,
bạn có thể giúp mình xem đoạn code này không.
Có vấn đề ở đoạn code này là trong phạm vi copy thì nó không thể copy ảnh trong phạm vi đó và chữ định dạng thế nào thì nó cũng về mặc định của nó.
Cảm ơn bạn!

Mã:
'=====================COPY RANGE TO HTML===================
Function RangetoHTML(rng As Range)
' Changed by Ron de Bruin 28-Oct-2006
' Working in Office 2000-2013
    Dim fso As Object
    Dim ts As Object
    Dim TempFile As String
    Dim TempWB As Workbook


    TempFile = Environ$("temp") & "\" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"


    'Copy the range and create a new workbook to past the data in
    rng.Copy
    Set TempWB = Workbooks.Add(1)
    With TempWB.Sheets(1)
        .Cells(1).PasteSpecial Paste:=8
        .Cells(1).PasteSpecial xlPasteValues, , False, False
        .Cells(1).PasteSpecial xlPasteFormats, , False, False
        .Cells(1).Select
        Application.CutCopyMode = False
        On Error Resume Next
        .DrawingObjects.Visible = True
        .DrawingObjects.Delete
        On Error GoTo 0
    End With


    'Publish the sheet to a htm file
    With TempWB.PublishObjects.Add( _
         SourceType:=xlSourceRange, _
         Filename:=TempFile, _
         Sheet:=TempWB.Sheets(1).Name, _
         Source:=TempWB.Sheets(1).UsedRange.Address, _
         HtmlType:=xlHtmlStatic)
        .Publish (True)
    End With


    'Read all data from the htm file into RangetoHTML
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
RangetoHTML = ts.readall
    ts.Close
    RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
                          "align=left x:publishsource=")


    'Close TempWB
    TempWB.Close savechanges:=False


    'Delete the htm file we used in this function
    Kill TempFile


    Set ts = Nothing
    Set fso = Nothing
    Set TempWB = Nothing
End Function
 
Upvote 0
Chào bạn,
bạn có thể giúp mình xem đoạn code này không.
Có vấn đề ở đoạn code này là trong phạm vi copy thì nó không thể copy ảnh trong phạm vi đó và chữ định dạng thế nào thì nó cũng về mặc định của nó.
Cảm ơn bạn!

Mã:
'=====================COPY RANGE TO HTML===================
Function RangetoHTML(rng As Range)
' Changed by Ron de Bruin 28-Oct-2006
' Working in Office 2000-2013
    Dim fso As Object
    Dim ts As Object
    Dim TempFile As String
    Dim TempWB As Workbook


    TempFile = Environ$("temp") & "\" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"


    'Copy the range and create a new workbook to past the data in
    rng.Copy
    Set TempWB = Workbooks.Add(1)
    With TempWB.Sheets(1)
        .Cells(1).PasteSpecial Paste:=8
        .Cells(1).PasteSpecial xlPasteValues, , False, False
        .Cells(1).PasteSpecial xlPasteFormats, , False, False
        .Cells(1).Select
        Application.CutCopyMode = False
        On Error Resume Next
        .DrawingObjects.Visible = True
        .DrawingObjects.Delete
        On Error GoTo 0
    End With


    'Publish the sheet to a htm file
    With TempWB.PublishObjects.Add( _
         SourceType:=xlSourceRange, _
         Filename:=TempFile, _
         Sheet:=TempWB.Sheets(1).Name, _
         Source:=TempWB.Sheets(1).UsedRange.Address, _
         HtmlType:=xlHtmlStatic)
        .Publish (True)
    End With


    'Read all data from the htm file into RangetoHTML
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
RangetoHTML = ts.readall
    ts.Close
    RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
                          "align=left x:publishsource=")


    'Close TempWB
    TempWB.Close savechanges:=False


    'Delete the htm file we used in this function
    Kill TempFile


    Set ts = Nothing
    Set fso = Nothing
    Set TempWB = Nothing
End Function
Cái này hình như không dính dáng gì tới chủ đề "gởi Email tính lương cho từng người" thì phải?
bạn có thể lập ra cái chủ đề mới để mọi người giúp bạn nha.
Xin lỗi, mình không rành về cái dụ này lắm.
 
Upvote 0
Cái này hình như không dính dáng gì tới chủ đề "gởi Email tính lương cho từng người" thì phải?
bạn có thể lập ra cái chủ đề mới để mọi người giúp bạn nha.
Xin lỗi, mình không rành về cái dụ này lắm.
Cảm ơn bạn.
Tại vì nó cũng ở file send email hàng loạt tới từng người bạn ạ
 
Upvote 0
Mấy Anh/Chị giúp em đoạn code này với ạ, em mới tập mày mò VBA được vài ngày, lấy code củ của mn thui ạ. Ý tưởng là muốn sử dụng một nút duy nhất để tạo ra file excel và có pass, sau đó sẽ gửi email đồng loạt luôn ạ.
Em còn gà lắm, dò lỗi mà ko hiểu sai chổ nào. Cao nhân giúp đỡ ạ.

Mã:
Sub Button4_Click()
Dim ArrData, i As Long, FName As String
Dim OutApp As Object
Dim OutMail As Object
Dim printFrom As Variant, printTo As Variant
Dim sFile As String
Dim sPath As String
Dim j As Long
Application.ScreenUpdating = False
Application.EnableEvents = False
printFrom = Sheets("Sheet3").Range("I8")
printTo = Sheets("Sheet3").Range("I9")
Set OutApp = CreateObject("Outlook.Application")
For j = printFrom To printTo
Sheets("Sheet3").Range("I5") = j
sPath = Application.ActiveWorkbook.Path
'ArrData = Sheet3.Range(Sheets("Sheet3").Range("I14"), Sheet2.Cells(&H100000, 2).End(xlUp)).Value

ArrData = Sheet2.Range(Sheet2.Cells(2, 15), Sheet2.Cells(&H100000, 2).End(xlUp)).Value

'Sheets("Sheet3").Range("A1:D33").ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=sFile, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False

sFile = ThisWorkbook.Path & "\Phieuluong" & Format(Now, "yyyy-mm")
Const DeleteReadOnly = True

Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FolderExists(sFile) Then
fso.DeleteFolder sFile, DeleteReadOnly
fso.CreateFolder (sFile)
End If
If Not fso.FolderExists(sFile) Then
fso.CreateFolder (sFile)
End If
For i = 1 To UBound(ArrData, 1)
Sheet3.Cells(11, 2).Value = ArrData(i, 1)
Sheets("Sheet3").Range("A2:D33").Copy
ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
ActiveWorkbook.SaveAs sFile & "\" & ArrData(i, 1) & ".xlsx", , ArrData(i, 73)
ActiveWorkbook.Close False
Next
Application.EnableEvents = True
Application.ScreenUpdating = True

Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = Sheets("Sheet3").Range("B12")
.CC = ""
.BCC = ""
.Subject = Sheets("Sheet3").Range("B9")
.HTMLBody = " Dear " & Sheets("Sheet3").Range("B11") & "</B> <BR><BR> Kindly find attachment payslip of December 2019. <BR>" & _
"<BR>Should you have any questions, do not hestitate to contact us." & _
"<BR><BR>Thanks & regards</B><BR>" & _
"</B>"
.Attachments.Add (sFile)
.Send
End With
Set OutMail = Nothing
Next j
Set OutApp = Nothing
Set OutMail = Nothing
MsgBox "Success"
End Sub
 

File đính kèm

Upvote 0
Làm sao để xóa bài #355 được ạ, em làm được rùi, mn có hướng dẫn từ những # bài trước. Admin có thể xóa bài này giúp mình nha. Em xin chân thành cảm ơn .
 
Upvote 0
- Xin chào các cao nhân, mình mới tập tành thử , mà sao mình sửa các thông tin + thêm hàng (thêm nhân viên nữa) +thêm cột (danh mục lương hơn 25 cột) thi nó báo lỗi , các AC xem giúp mới. thank you

Option Explicit 'Declare Public Var Public File_Name_Attached As String Public shSendMail As Worksheet Public shMailInfo As Worksheet Public shSetup As Worksheet Public shOutForm As Worksheet Sub Initialization_SheetVAR() Set shSendMail = Sheet1 Set shMailInfo = Sheet2 Set shSetup = Sheet3 Set shOutForm = Sheet4 End Sub 'Do not change the code in the functions in this module Function Create_PDF(Myvar As Object, FixedFilePathName As String, _ OverwriteIfFileExist As Boolean, OpenPDFAfterPublish As Boolean) As String Dim FileFormatstr As String Dim Fname As Variant 'Test If the Microsoft Add-in is installed If Dir(Environ("commonprogramfiles") & "\Microsoft Shared\OFFICE" _ & Format(Val(Application.Version), "00") & "\EXP_PDF.DLL") <> "" Then If FixedFilePathName = "" Then 'Open the GetSaveAsFilename dialog to enter a file name for the pdf FileFormatstr = "PDF Files (*.pdf), *.pdf" Fname = Application.GetSaveAsFilename("", filefilter:=FileFormatstr, Title:="Create PDF") 'If you cancel this dialog Exit the function If Fname = False Then Exit Function Else Fname = FixedFilePathName End If 'If OverwriteIfFileExist = False we test if the PDF 'already exist in the folder and Exit the function if that is True If OverwriteIfFileExist = False Then If Dir(Fname) <> "" Then Exit Function End If 'Now the file name is correct we Publish to PDF On Error Resume Next Myvar.ExportAsFixedFormat _ Type:=xlTypePDF, _ FileName:=Fname, _ Quality:=xlQualityStandard, _ IncludeDocProperties:=True, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=OpenPDFAfterPublish On Error GoTo 0 'If Publish is Ok the function will return the file name If Dir(Fname) <> "" Then Create_PDF = Fname End If End Function Sub Make_RangeOfSheet_To_PDF(File_Name As String, Range_of_Sheet As Object) Dim FileName, sThisFilePath, File_Name_Save_Temp As String If ActiveWindow.SelectedSheets.Count > 1 Then MsgBox "There is more then one sheet selected," & vbNewLine & _ "be aware that every selected sheet will be published" End If 'Call the function with the correct arguments 'Tip: You can also use Sheets("Sheet3") instead of ActiveSheet in the code(sheet not have to be active then) sThisFilePath = ThisWorkbook.Path If (Right(sThisFilePath, 1) <> "\") Then sThisFilePath = sThisFilePath & "\" File_Name_Save_Temp = sThisFilePath & File_Name & ".pdf" FileName = Create_PDF(Range_of_Sheet, File_Name_Save_Temp, True, False) File_Name_Attached = File_Name_Save_Temp 'For a fixed file name and overwrite it each time you run the macro use 'Create_PDF(ActiveSheet, "C:\Users\Ron\Test\YourPdfFile.pdf", True, True) If FileName <> "" Then 'Ok, you find the PDF where you saved it 'You can call the mail macro here if you want Else MsgBox "Not possible to create the PDF, possible reasons:" & vbNewLine & _ "Microsoft Add-in is not installed" & vbNewLine & _ "You Canceled the GetSaveAsFilename dialog" & vbNewLine & _ "The path to Save the file in arg 2 is not correct" & vbNewLine & _ "You didn't want to overwrite the existing PDF if it exist" End If End Sub Sub Dellete_File(File_Name_Dellete As String) On Error Resume Next Workbooks(File_Name_Dellete).Close False 'it gets reopened Kill File_Name_Dellete End Sub Sub Fill_Data(RowNum As Long) Dim i As Long Dim iLastRow_shSetup As Integer Dim arrSetupCell() As Variant iLastRow_shSetup = shSetup.Cells(Rows.Count, 2).End(xlUp).Offset(0, 0).Row 'Fill Data into Sheet "Out_Form" If iLastRow_shSetup >= 2 Then arrSetupCell = shSetup.Range("B2:C" & iLastRow_shSetup) For i = 1 To iLastRow_shSetup - 1 shOutForm.Range(arrSetupCell(i, 2)).Value = shSendMail.Range(arrSetupCell(i, 1) & RowNum).Value Next i End If End Sub Sub Del_Data() Dim i As Long Dim iLastRow_shSetup As Integer Dim arrSetupCell() As Variant iLastRow_shSetup = shSetup.Cells(Rows.Count, 2).End(xlUp).Offset(0, 0).Row 'Dellete Data in Sheet "Out_Form" If iLastRow_shSetup >= 2 Then arrSetupCell = shSetup.Range("B2:C" & iLastRow_shSetup) For i = 1 To iLastRow_shSetup - 1 shOutForm.Range(arrSetupCell(i, 2)).Value = "" Next i End If End Sub
 

File đính kèm

Upvote 0
& Xin các AC chỉ giúp làm 1 file excel để có thể tự gửi email chúc mừng sinh nhật cho nhân viên, khoảng 250 ngừoi với. xin cảm ơn
 

File đính kèm

Upvote 0

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

Back
Top Bottom