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

Các đại ca ơi giúp với. Tình hình mình copy đoạn code để add vào file mình nhưng nó không chạy, có ai giúp mình k. đa tạ lắm.
 

File đính kèm

Upvote 0
Em đã làm được rồi ạ, Cảm ơn file của các Anh chị và các bạn nhiều
 
Lần chỉnh sửa cuối:
Upvote 0
@tt_kimbai Bài toán của bạn khó nhờ, bạn muốn người giúp bạn bẻ khóa file excel này à?
 
Upvote 0
Bác @Hai Lúa Miền Tây và anh chị giúp em với ạ
 
Upvote 0
Anh chị cho mình hỏi trường hợp sau

Em thấy code của bác HaiLua #124 Trang 13



E đã làm thành công nhưng cho em hỏi muốn khi gửi đi sẽ có thêm 1 sheet là định dạng phiếu lương, dùng sẵn hàm vlookup bên sheet2 qua sheet1 để ra dữ liệu. Vì nhiều khi nhân viên muốn in ra theo định dạng.
Anh chị xem giúp

Anh HL và các bạn giúp mình, helppp @!##
 
Upvote 0
Trong sheet form mình muốn gửi đến từng email
Nhưng format mình muốn giữ nguyên
Chỉ có mỗi người nhận được dòng tương ứng với email đó.
các sư huynh help me với, mình xin hậu tạ!
 

File đính kèm

Upvote 0
Nhờ các anh chị giúp đỡ ạ
mail không dán phần copy vào body thư
và em muốn bỏ đính kèm file di ạ

}}}}}}}}}}
Sub SendMail()
Dim OutlookApp As Object, MailItem As Object, i As Integer
Dim FileName As String, WB As Workbook
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For i = 1 To Application.WorksheetFunction.CountA(Sheet1.[A14:A1000]) - 2
Sheet2.[G2] = i
If UCase(Sheet2.[J4]) = "YES" Then
With Sheets("pay slip")
.Copy
.[A1:E31].CopyPicture
End With
Set WB = ActiveWorkbook
FileName = "BangLuong"
On Error Resume Next
Kill "E:" & FileName
WB.SaveAs FileName:="E:" & FileName
Set OutlookApp = CreateObject("Outlook.Application")
Set MailItem = OutlookApp.CreateItem(0)
With MailItem
.To = Sheet2.[G4]
.Subject = "Bang luong cua: " & Sheet2.[C3]
.Attachments.Add WB.FullName
.HTMLBody = "<B>Xin chao: " & Sheet2.[C3] & "</B>" & _
"<BR><BR>Xin vui long kiem tra lai chi tiet bang luong nhu ben duoi: <BR>" & _
"<BR><BR><BR><BR>Neu co thac mac gi xin phan hoi som" & _
"<BR><B>Xin cam on,</B><BR>" & _
"<BR><B>Lê Thi Hà </B>"
.Display
End With
SendKeys "({DOWN})", True
SendKeys "({DOWN})", True
SendKeys "({DOWN})", True
SendKeys "({DOWN})", True
SendKeys "({DOWN})", True
SendKeys "^({v})", True
WB.ChangeFileAccess Mode:=xlReadOnly
Kill WB.FullName
WB.Close SaveChanges:=False
End If
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Set OutlookApp = Nothing
Set MailItem = Nothing
End Sub
 

File đính kèm

  • hinh 1.jpg
    hinh 1.jpg
    9.8 KB · Đọc: 124
Lần chỉnh sửa cuối:
Upvote 0
Khi em xóa . Copy

Thì .[A1:E31].CopyPicture được dán vào body mail
nhưng lại không gửi mail cho nhiều người được mà chỉ nhận địa chỉ mail trên cùng của bảng lương thôi ạ
Anh chị sửa lỗi giúp em với ạ


Sub SendMail()
Dim OutlookApp As Object, MailItem As Object, i As Integer
Dim FileName As String, WB As Workbook
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For i = 1 To Application.WorksheetFunction.CountA(Sheet1.[A14:A1000]) - 2
Sheet2.[G2] = i
If UCase(Sheet2.[J4]) = "YES" Then
With Sheets("pay slip")
.[A1:E31].CopyPicture
End With
Set WB = ActiveWorkbook
FileName = "BangLuong"
On Error Resume Next
Kill "C:" & FileName
WB.SaveAs FileName:="C:" & FileName
Set OutlookApp = CreateObject("Outlook.Application")
Set MailItem = OutlookApp.CreateItem(0)
With MailItem
.To = Sheet2.[G4]
.Subject = "Bang luong cua: " & Sheet2.[C3]
.HTMLBody = "<B>Xin chao: " & Sheet2.[C3] & "</B>" & _
"<BR><BR>Xin vui long kiem tra lai chi tiet bang luong nhu ben duoi: <BR>" & _
"<BR><BR><BR><BR>Neu co thac mac gi xin phan hoi som" & _
"<BR><B>Xin cam on,</B><BR>" & _
"<BR><B>Lê Thi Hà </B>"
.Display
End With
SendKeys "({DOWN})", True
SendKeys "({DOWN})", True
SendKeys "({DOWN})", True
SendKeys "({DOWN})", True
SendKeys "({DOWN})", True
SendKeys "^({v})", True
WB.ChangeFileAccess Mode:=xlReadOnly
Kill WB.FullName
WB.Close SaveChanges:=False
End If
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Set OutlookApp = Nothing
Set MailItem = Nothing
End Sub
 
Upvote 0
Dear các anh các chị em có một vấn đề cũng gần giống với nhưng top trên nhưng em đọc mãi mà vẫn chưa biết áp dụng như thế nào với trường hợp của em.
Em có 1 file dữ liệu bảng kê của từng khách hàng tương ứng với từng sheet
Giờ em muốn gửi mỗi 1 sheet đấy cho 1 email thì phải làm như thế nào ạ . nhờ các cao thủ giúp cho em với
 

File đính kèm

Upvote 0
Mình gửi lên đây file mẫu gửi lương mình lấy theo file của Anh HLMT và áp dụng cho cty mình, bạn nào cần lấy về chỉnh sửa theo nhu cầu
Cảm ơn Anh Hai Lúa Miền Tây và các anh chị đã có những file thật tuyệt vời như này
 

File đính kèm

Upvote 0
Dùng excel lập bảng lương và dùng outlook để gửi, có gì bạn tham khảo ở đây nhé.
[video=youtube;1vuzPgjP9rU]https://www.youtube.com/watch?v=1vuzPgjP9rU[/video]
 
Upvote 0
Bạn sử dụng code sau thử nhé

Mã:
Sub SendMail()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim cell As Range
    Dim Addresslist As Scripting.Dictionary
    Application.ScreenUpdating = False
    Set Addresslist = New Scripting.Dictionary
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon

    For Each cell In Columns("B").Cells.SpecialCells(xlCellTypeConstants)
        If cell.Value Like "?*@?*.?*" And _
           LCase(Cells(cell.Row, "J").Value) = "yes" Then
            On Error Resume Next
            Addresslist.Add cell.Value, cell.Value
            If Err.Number = 0 Then
                Set OutMail = OutApp.CreateItem(0)
                With OutMail
                    .To = cell.Value
                    .Subject = "Phieu luong: " & Cells(cell.Row, "A").Value
                    .Body = "Dear " & Cells(cell.Row, "A").Value _
                          & vbNewLine & vbNewLine & _
                            "Xin vui long xem chi tiet bang luong nhu ben duoi:" & _
                            vbNewLine & vbNewLine & _
                           "+ He So Chuc Danh: " & Cells(cell.Row, "C").Value & _
                              vbNewLine & _
                           "+ So ngay cong: " & Cells(cell.Row, "D").Value & _
                            vbNewLine & _
                           "+ Luong CD: " & Cells(cell.Row, "E").Value & _
                            vbNewLine & _
                           "+ Phu cap DT: " & Cells(cell.Row, "F").Value & _
                            vbNewLine & _
                           "+ Phu cap doan the: " & Cells(cell.Row, "G").Value & _
                            vbNewLine & _
                           "+ Tru BHXH, BHYT: " & Cells(cell.Row, "H").Value & _
                            vbNewLine & _
                           "+ Luong CK: " & Cells(cell.Row, "I").Value & _
                           vbNewLine & vbNewLine & _
                           "Cam on"
                    .Display  'Or use Send
                End With
                Set OutMail = Nothing
            End If
            On Error GoTo 0
        End If
    Next cell

    Set OutApp = Nothing
    Set Addresslist = Nothing
    Application.ScreenUpdating = True
End Sub

http://www.rondebruin.nl/mail/folder3/message.htm

Tham khảo thêm file nhé.

trước cũng tìm hiểu trường hợp này
 
Upvote 0
Mình có file bảng lương với code. Tại công trình, mỗi người có thể có 1 email riêng hoặc 1 người (quản lý) đại diện cho nhân viên tại công trình đó. HIện tại, mỗi người 1 email riêng thì gửi mail bình thường, còn 1 email đại diện cho nhiều người thì chưa gửi được, nó chỉ gửi đc người đầu tiên trong danh sách tại công trình.
Mọi người giúp mình đc ko, để dù trùng địa chỉ email thì vẫn gửi đc.
Xin cám ơn.
 

File đính kèm

Upvote 0
Khi mình xuất ra nó sẽ tự bun ra mà bạn. Nếu chưa chỉnh về Shrink to fit thì nó sẽ bị che mất.

[video=youtube;3QP9aMoFkuc]http://www.youtube.com/watch?v=3QP9aMoFkuc&amp;feature=youtu.be[/video]

Dear anh Hai Lua Mien Tay cùng toàn thể các anh em,
Theo file của anh HLMT hướng dẫn em tùy chỉnh để dùng được, tuy nhiên khi xuất dữ liệu vào mail, các số ko thể nào lấy được dấu phân cách nên rất khó nhìn (file em đính kèm)
Em nhờ các tiền bối chỉ giúp cách tùy chọn!
Cám ơn các bác!
 

File đính kèm

  • 2016-06-01_174447.jpg
    2016-06-01_174447.jpg
    32.8 KB · Đọc: 115
Upvote 0
Em không gửi được email ạ. Hay bắt buộc gửi qua outlook ạ
 
Upvote 0
Tìm hiểu riết mà em cũng chưa làm được cái mình muốn.
Vì em khá nhiều việc lặp đi lặp lại, mất thời gian nên để quản lý thời gian và công việc tốt hơn em đã tìm đến topic. Nhưng chắc do ngu cái khoản này quá or do quá nôn nóng cho việc hiện tại mà chưa đầu tư hết công suất để học từ đầu.
Vì vậy nhờ các bác giúp em tạo đoạn code cho file đính kèm này với ạ.

Hàng ngày em nhận được rất nhiều giấy tờ và phải thông báo đến người chịu trách nhiệm giấy tờ (có file attachment).
Trong file dưới em muốn:
- Tự động gửi mail để từng người.
- Nếu phần "Email status" là "incomplete" thì gửi, "complete" thì thôi.
- Nội dung thể hiện theo dạng cột (giống như bác Hai lúa Miền Tây đã làm)

Nhờ mọi người giúp em với ạ, sau vụ này chắc em phải dành thêm thời gian để học.
Em cảm ơn nhiều ạ.
 

File đính kèm

Upvote 0
Dear anh Hai Lua Mien Tay cùng toàn thể các anh em,
Theo file của anh HLMT hướng dẫn em tùy chỉnh để dùng được, tuy nhiên khi xuất dữ liệu vào mail, các số ko thể nào lấy được dấu phân cách nên rất khó nhìn (file em đính kèm)
Em nhờ các tiền bối chỉ giúp cách tùy chọn!
Cám ơn các bác!
Bạn xem lại bài #139 để giải quyết vấn đề của bạn nhé.
 
Upvote 0
Tìm hiểu riết mà em cũng chưa làm được cái mình muốn.
Vì em khá nhiều việc lặp đi lặp lại, mất thời gian nên để quản lý thời gian và công việc tốt hơn em đã tìm đến topic. Nhưng chắc do ngu cái khoản này quá or do quá nôn nóng cho việc hiện tại mà chưa đầu tư hết công suất để học từ đầu.
Vì vậy nhờ các bác giúp em tạo đoạn code cho file đính kèm này với ạ.

Hàng ngày em nhận được rất nhiều giấy tờ và phải thông báo đến người chịu trách nhiệm giấy tờ (có file attachment).
Trong file dưới em muốn:
- Tự động gửi mail để từng người.
- Nếu phần "Email status" là "incomplete" thì gửi, "complete" thì thôi.
- Nội dung thể hiện theo dạng cột (giống như bác Hai lúa Miền Tây đã làm)

Nhờ mọi người giúp em với ạ, sau vụ này chắc em phải dành thêm thời gian để học.
Em cảm ơn nhiều ạ.
Bạn xem file đính kèm coi đúng ý chưa nhé
 

File đính kèm

Upvote 0
Bạn xem file đính kèm coi đúng ý chưa nhé
Dạ, em cảm ơn bác nhiều ạ.
Nhờ có đoạn code này em hiểu cách viết và sửa lại theo ý mình rồi ạ.
Em cũng có tham khảo đoạn code để khi gửi mail, nó sẽ là dạng cột (ý em ở đây là bảng ạ). Tuy nhiên, trong quá trình edit lại gặp phải 1 số lỗi.
Vậy nhờ bác Hai Lúa Miền Tây thêm giúp em tính năng: gửi mail đi là dạng bảng được không ạ?

Em cảm ơn bác trước ạ!
 
Upvote 0
Dạ, em cảm ơn bác nhiều ạ.
Nhờ có đoạn code này em hiểu cách viết và sửa lại theo ý mình rồi ạ.
Em cũng có tham khảo đoạn code để khi gửi mail, nó sẽ là dạng cột (ý em ở đây là bảng ạ). Tuy nhiên, trong quá trình edit lại gặp phải 1 số lỗi.
Vậy nhờ bác Hai Lúa Miền Tây thêm giúp em tính năng: gửi mail đi là dạng bảng được không ạ?

Em cảm ơn bác trước ạ!
BẠn thử code sau thử:

Mã:
Sub SendMail2()

    Dim OutApp As Object
    Dim OutMail As Object
    Dim cell As Range
    Dim i As Integer
    Application.ScreenUpdating = False
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    With Sheet2
        For Each cell In Sheet3.[C1:C1000]
            i = i + 1
            If Len(cell) > 0 Then
                .[A1:K1000].AutoFilter Field:=11, Criteria1:=cell
                .[A1:K1000].AutoFilter Field:=7, Criteria1:="Incomplete"
                 If .Cells(Rows.Count, 7).End(xlUp).Row > 1 Then
                    .[A1].CurrentRegion.CopyPicture
                    Set OutMail = OutApp.CreateItem(0)
                    With OutMail
                       .To = cell.Value
                       .Subject = "PRODUCTS: " & Cells(cell.Row, "C").Value
                       .HTMLBody = " <B>Xin chao " & cell.Offset(, -1) & "</B>" & _
                                        "<BR><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 "^({v})", True
                End If
            End If
        Next
        .ShowAllData
    End With
    Application.ScreenUpdating = True
    
End Sub

Lưu ý chuyển Table về range nhé.
 

File đính kèm

Upvote 0
Mình có file bảng lương với code. Tại công trình, mỗi người có thể có 1 email riêng hoặc 1 người (quản lý) đại diện cho nhân viên tại công trình đó. HIện tại, mỗi người 1 email riêng thì gửi mail bình thường, còn 1 email đại diện cho nhiều người thì chưa gửi được, nó chỉ gửi đc người đầu tiên trong danh sách tại công trình.
Mọi người giúp mình đc ko, để dù trùng địa chỉ email thì vẫn gửi đc.
Xin cám ơn.

Mình cũng quan tâm đến vấn đề này.
Muốn gửi 2 dòng có email trùng như thì xử lý thế nào nhỉ, hiện nó chỉ đọc email đầu tiên thôi.

Ai biết chỉ dùm.
Cảm ơn nhiều!
 
Upvote 0
Mình cũng quan tâm đến vấn đề này.
Muốn gửi 2 dòng có email trùng như thì xử lý thế nào nhỉ, hiện nó chỉ đọc email đầu tiên thôi.

Ai biết chỉ dùm.
Cảm ơn nhiều!
Bạn lấy file ở bài #221 rồi vào sheet [Personel info], cột email, bạn gõ thêm địa chỉ email chung trong 1 cell và cách nhau bằng dấu chấm phẩy nhé.
 
Upvote 0
BẠn thử code sau thử:

Mã:
Sub SendMail2()

    Dim OutApp As Object
    Dim OutMail As Object
    Dim cell As Range
    Dim i As Integer
    Application.ScreenUpdating = False
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    With Sheet2
        For Each cell In Sheet3.[C1:C1000]
            i = i + 1
            If Len(cell) > 0 Then
                .[A1:K1000].AutoFilter Field:=11, Criteria1:=cell
                .[A1:K1000].AutoFilter Field:=7, Criteria1:="Incomplete"
                 If .Cells(Rows.Count, 7).End(xlUp).Row > 1 Then
                    .[A1].CurrentRegion.CopyPicture
                    Set OutMail = OutApp.CreateItem(0)
                    With OutMail
                       .To = cell.Value
                       .Subject = "PRODUCTS: " & Cells(cell.Row, "C").Value
                       .HTMLBody = " <B>Xin chao " & cell.Offset(, -1) & "</B>" & _
                                        "<BR><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 "^({v})", True
                End If
            End If
        Next
        .ShowAllData
    End With
    Application.ScreenUpdating = True
    
End Sub

Lưu ý chuyển Table về range nhé.
Em rất cảm ơn bác HLMT nhiều ạ!
Em đã làm đc và hiểu đc nhiều cái
 
Upvote 0
Anh chị giúp em.
Em có 1 file excel khoảng 100 sheet. Có 1 sheet có đầy đủ tên, địa chỉ email. và các sheet khác tương ứng với tên từng nhân viên là kết quả hoạt động của họ theo từng ngày.
Khi cuối tháng để đối chiếu và thông báo kết quả làm việc, em sẽ gửi mail cho toàn bộ nhân viên và đính kèm sheet tương ứng của họ.
Anh chị xem giúp em trong file đính kèm

Em cảm ơn nhiều
 

File đính kèm

Upvote 0
Em có xin được 1 file gửi mail như trong đính kèm. Nhưng để khởi tạo nút Send thì em chưa làm được.
Anh/Chị xem giúp em
Anh chị giúp em.
Em có 1 file excel khoảng 100 sheet. Có 1 sheet có đầy đủ tên, địa chỉ email. và các sheet khác tương ứng với tên từng nhân viên là kết quả hoạt động của họ theo từng ngày.
Khi cuối tháng để đối chiếu và thông báo kết quả làm việc, em sẽ gửi mail cho toàn bộ nhân viên và đính kèm sheet tương ứng của họ.
Anh chị xem giúp em trong file đính kèm

Em cảm ơn nhiều
 

File đính kèm

Upvote 0
Anh chị giúp em.
Em có 1 file excel khoảng 100 sheet. Có 1 sheet có đầy đủ tên, địa chỉ email. và các sheet khác tương ứng với tên từng nhân viên là kết quả hoạt động của họ theo từng ngày.
Khi cuối tháng để đối chiếu và thông báo kết quả làm việc, em sẽ gửi mail cho toàn bộ nhân viên và đính kèm sheet tương ứng của họ.
Anh chị xem giúp em trong file đính kèm

Em cảm ơn nhiều

Nếu bạn quan tâm mình có thể giúp tùy biến code cho phù hợp với mục đích.
Gửi cho tất cả các Email nhiều cỡ nào cũng được tùy vào Server or Cấu hình máy. Nội dung thay đổi theo từng người , gửi luôn file đính kèm cũng Ok. CC or Bcc cho nhiều người tùy thích , Liên hệ Mail : ductaigtvt@gmail.com.
 
Upvote 0
BẠn thử code sau thử:

Mã:
Sub SendMail2()

    Dim OutApp As Object
    Dim OutMail As Object
    Dim cell As Range
    Dim i As Integer
    Application.ScreenUpdating = False
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    With Sheet2
        For Each cell In Sheet3.[C1:C1000]
            i = i + 1
            If Len(cell) > 0 Then
                .[A1:K1000].AutoFilter Field:=11, Criteria1:=cell
                .[A1:K1000].AutoFilter Field:=7, Criteria1:="Incomplete"
                 If .Cells(Rows.Count, 7).End(xlUp).Row > 1 Then
                    .[A1].CurrentRegion.CopyPicture
                    Set OutMail = OutApp.CreateItem(0)
                    With OutMail
                       .To = cell.Value
                       .Subject = "PRODUCTS: " & Cells(cell.Row, "C").Value
                       .HTMLBody = " <B>Xin chao " & cell.Offset(, -1) & "</B>" & _
                                        "<BR><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 "^({v})", True
                End If
            End If
        Next
        .ShowAllData
    End With
    Application.ScreenUpdating = True
    
End Sub

Lưu ý chuyển Table về range nhé.
Có trường hợp xuất hiện 01 mail item trong vònglặp, vẫn có đầy đủ To, Subject,.. nhưng lại không có Picture (nghĩa là khôngpaste được hoặc lại paste ra chỗ khác), cái này sẽ xử lý như thế nào được ạ??
 
Upvote 0
Dear bác Hai Lúa Miền Tây,

Có cách nào khi gửi File đính kèm trong email, Thay vì File *.xlsx thì Excel xuất ra file PDF và có set pass (pass là cung cấp theo 1 cột ở Sheet1 theo các thông tin khác kèm theo đó ạ)

Nếu được bác giúp e với nhé.

Cảm ơn bác
 
Upvote 0
Có trường hợp xuất hiện 01 mail item trong vònglặp, vẫn có đầy đủ To, Subject,.. nhưng lại không có Picture (nghĩa là khôngpaste được hoặc lại paste ra chỗ khác), cái này sẽ xử lý như thế nào được ạ??
BẠn có thể linh hoạt và điều chỉnh trong code, dời xuống hay dời lên để thực hiện theo ý.
 
Upvote 0
Kính nhờ anh/chị hỗ trợ giúp em với ạ.

Hàng tháng em phải gửi danh sách khách hàng xuống đơn vị kèm theo file đính kèm cho từng đơn vị ( 2-4 file tùy đơn vị ). Anh/chị/em giúp em với ạ.

file các thông tin e muốn gửi như tệp đính kèm. Đây chỉ là ví dụ 2 đơn vị, còn bt em phải gửi là gần 300 đơn vị như này ạ. e xin cảm ơn
 

File đính kèm

Upvote 0
Kính nhờ các bro hỗ trợ giúp em với ạ.
Hàng tháng em phải gửi phiếu lương cho nhân viên trong công ty. Trước đây em toàn in ra và gửi cho từng người, bây giờ giám đốc yêu cầu gửi phiếu lương qua email. Em có một file excel trong đó có 1 sheet tính lương sheet[PQ] và sheet phiếu lương dùng để gửi mail sheet[Gui Mail auto]. Giám đốc yêu cầu như sau: Khi nhấn nút gửi trong Sheet[Gui Mail auto] thì sẽ lấy thông tin trong sheet tính lương ( 2 sheet này liên kết với nhau thông qua số thứ tự) vào trong sheet gửi mail. Sau đó kiểm tra điều kiện gửi mail ở cột BP trong sheet tính lương. Nếu thõa điều kiện thì copy nội dung sheet trong sheet[Gui Mail auto] dưới dạng hình ảnh và gửi mail cho nhân viên. Địa chỉ gửi mail nằm trong cột BO sheet tính lương. Email được gửi cho tất cả nhân viên nếu thõa điều kiện.
Em cảm ơn các bác nhiều ạ.
 

File đính kèm

Upvote 0
Kính nhờ các bro hỗ trợ giúp em với ạ.
Hàng tháng em phải gửi phiếu lương cho nhân viên trong công ty. Trước đây em toàn in ra và gửi cho từng người, bây giờ giám đốc yêu cầu gửi phiếu lương qua email. Em có một file excel trong đó có 1 sheet tính lương sheet[PQ] và sheet phiếu lương dùng để gửi mail sheet[Gui Mail auto]. Giám đốc yêu cầu như sau: Khi nhấn nút gửi trong Sheet[Gui Mail auto] thì sẽ lấy thông tin trong sheet tính lương ( 2 sheet này liên kết với nhau thông qua số thứ tự) vào trong sheet gửi mail. Sau đó kiểm tra điều kiện gửi mail ở cột BP trong sheet tính lương. Nếu thõa điều kiện thì copy nội dung sheet trong sheet[Gui Mail auto] dưới dạng hình ảnh và gửi mail cho nhân viên. Địa chỉ gửi mail nằm trong cột BO sheet tính lương. Email được gửi cho tất cả nhân viên nếu thõa điều kiện.
Em cảm ơn các bác nhiều ạ.

Em đã làm được nhưng bị lỗi như thế này. Nếu thay dislay = send thì trong thân mail không có nội dung. Nội dung này được dán vào sheet[Gui Mail auto]. Nó hiện lên rất nhiều mail trống. Các bác xem giúp em với ạ.
 

File đính kèm

Upvote 0
Mọi người cho em hỏi làm thế nào để mình định dạng nội dung trong email vậy ? VD như tô màu chữ, chỉnh kích thước, in đậm ...
 

File đính kèm

Upvote 0
Upvote 0
Upvote 0
Kính nhờ các bác giúp em ạ,
Em có file tổng cần tách ra thành từng file rồi đính kèm gửi đến từng người trong danh sách mà không biết làm thế nào,
Kính nhờ các bác giúp ạ.
P/s: Trong mail có tiêu đê: Kính gửi anh/chị: ...
Nội Dung: Kính gửi anh/chị KPIS tháng này
Chữ ký:
Em cám ơn nhiều ạ
 

File đính kèm

Upvote 0
các Bác cho em nhờ tí khi chạy off 2007 bình thường nhưng khi chay off 2010 nó báo cái lỗi ngay khi chạy : Run time error '429' của đoạn mã ........ Set outApp= CreateObject("Outlook.Application") mình khắc phục như nào ạ. Xin chân thành cảm ơn các bác quan tâm hộ trợ.
 
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 !
 
Upvote 0
Bạn sử dụng code sau thử nhé

Mã:
Sub SendMail()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim cell As Range
    Dim Addresslist As Scripting.Dictionary
    Application.ScreenUpdating = False
    Set Addresslist = New Scripting.Dictionary
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon

    For Each cell In Columns("B").Cells.SpecialCells(xlCellTypeConstants)
        If cell.Value Like "?*@?*.?*" And _
           LCase(Cells(cell.Row, "J").Value) = "yes" Then
            On Error Resume Next
            Addresslist.Add cell.Value, cell.Value
            If Err.Number = 0 Then
                Set OutMail = OutApp.CreateItem(0)
                With OutMail
                    .To = cell.Value
                    .Subject = "Phieu luong: " & Cells(cell.Row, "A").Value
                    .Body = "Dear " & Cells(cell.Row, "A").Value _
                          & vbNewLine & vbNewLine & _
                            "Xin vui long xem chi tiet bang luong nhu ben duoi:" & _
                            vbNewLine & vbNewLine & _
                           "+ He So Chuc Danh: " & Cells(cell.Row, "C").Value & _
                              vbNewLine & _
                           "+ So ngay cong: " & Cells(cell.Row, "D").Value & _
                            vbNewLine & _
                           "+ Luong CD: " & Cells(cell.Row, "E").Value & _
                            vbNewLine & _
                           "+ Phu cap DT: " & Cells(cell.Row, "F").Value & _
                            vbNewLine & _
                           "+ Phu cap doan the: " & Cells(cell.Row, "G").Value & _
                            vbNewLine & _
                           "+ Tru BHXH, BHYT: " & Cells(cell.Row, "H").Value & _
                            vbNewLine & _
                           "+ Luong CK: " & Cells(cell.Row, "I").Value & _
                           vbNewLine & vbNewLine & _
                           "Cam on"
                    .Display  'Or use Send
                End With
                Set OutMail = Nothing
            End If
            On Error GoTo 0
        End If
    Next cell

    Set OutApp = Nothing
    Set Addresslist = Nothing
    Application.ScreenUpdating = True
End Sub

http://www.rondebruin.nl/mail/folder3/message.htm

Tham khảo thêm file nhé.
bác ơi.e cảm ơn bác vì code bác viết chạy rất tốt ạ. nhưng có một vấn đề xảy ra là như này:
- nếu địa chỉ mail ở 3 dòng là 3 mail giống nhau thì nó chỉ gửi 1 dòng và 2 dòng còn lại nó sẽ ko gửi ạ.
 
Upvote 0
bác ơi.e cảm ơn bác vì code bác viết chạy rất tốt ạ. nhưng có một vấn đề xảy ra là như này:
- nếu địa chỉ mail ở 3 dòng là 3 mail giống nhau thì nó chỉ gửi 1 dòng và 2 dòng còn lại nó sẽ ko gửi ạ.
Bạn ráng tìm đọc trong đề tài này, sẽ có hướng giải quyết vấn đề của bạn nhé.
 
Upvote 0
Bạn lấy file ở bài #221 rồi vào sheet [Personel info], cột email, bạn gõ thêm địa chỉ email chung trong 1 cell và cách nhau bằng dấu chấm phẩy nhé.
bác HLMT ơi. e đọc lại từ đầu bài đến cuối như bác chỉ thì đã tìm được vấn đề mà những thành viên trước cũng gặp phải, tuy nhiên trong phần xử lý của bác hỗ trợ thì bác đang hiểu nhầm ý rồi.
bác đang hiểu là: 1 người có nhiều địa chỉ mail
nhưng thắc mắc của e và những thành viên có cùng câu hỏi là : 1 mail dùng cho nhiều người
mong bác kiểm tra lại :D
e cảm ơn :)
 
Upvote 0
bác HLMT ơi. e đọc lại từ đầu bài đến cuối như bác chỉ thì đã tìm được vấn đề mà những thành viên trước cũng gặp phải, tuy nhiên trong phần xử lý của bác hỗ trợ thì bác đang hiểu nhầm ý rồi.
bác đang hiểu là: 1 người có nhiều địa chỉ mail
nhưng thắc mắc của e và những thành viên có cùng câu hỏi là : 1 mail dùng cho nhiều người
mong bác kiểm tra lại :D
e cảm ơn :)
Vậy thì chỉnh lại chút xíu là được.

Mã:
Sub SendMail2()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim cell As Range
    Dim i As Integer
    Application.ScreenUpdating = False
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    With Sheet2
        For Each cell In Sheet3.[A1:A1000]
            i = i + 1
            If Len(cell) > 0 Then
                .[A1:K1000].AutoFilter Field:=9, Criteria1:=cell
                .[A1:K1000].AutoFilter Field:=7, Criteria1:="Incomplete"
                 If .Cells(Rows.Count, 7).End(xlUp).Row > 1 Then
                    .[A1].CurrentRegion.CopyPicture
                    Set OutMail = OutApp.CreateItem(0)
                    With OutMail
                       .To = cell.Offset(, 2)
                       .Subject = "PRODUCTS: " & Cells(cell.Row, "B").Value
                       .HTMLBody = " <B>Xin chao " & cell.Offset(, 1) & "</B>" & _
                                        "<BR><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 "^({v})", True
                End If
            End If
        Next
        .ShowAllData
    End With
    Application.ScreenUpdating = True
End Sub
 

File đính kèm

Upvote 0
Vậy thì chỉnh lại chút xíu là được.

Mã:
Sub SendMail2()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim cell As Range
    Dim i As Integer
    Application.ScreenUpdating = False
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    With Sheet2
        For Each cell In Sheet3.[A1:A1000]
            i = i + 1
            If Len(cell) > 0 Then
                .[A1:K1000].AutoFilter Field:=9, Criteria1:=cell
                .[A1:K1000].AutoFilter Field:=7, Criteria1:="Incomplete"
                 If .Cells(Rows.Count, 7).End(xlUp).Row > 1 Then
                    .[A1].CurrentRegion.CopyPicture
                    Set OutMail = OutApp.CreateItem(0)
                    With OutMail
                       .To = cell.Offset(, 2)
                       .Subject = "PRODUCTS: " & Cells(cell.Row, "B").Value
                       .HTMLBody = " <B>Xin chao " & cell.Offset(, 1) & "</B>" & _
                                        "<BR><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 "^({v})", True
                End If
            End If
        Next
        .ShowAllData
    End With
    Application.ScreenUpdating = True
End Sub
được rồi ạ.
e cảm ơn bác đã trợ giúp nhiệt tình :D
 
Upvote 0
E hiện tại đang nhập đơn hàng thủ công theo file từng KH vào trong mẫu, các anh có thể giúp e làm thế nào mình điền giá trị theo từng KH vào form mẫu và in hàng loạt theo số tờ định sẵn như 2 tờ 1 lúc được ko ạ,
e chân thành cảm ơn
 

File đính kèm

Upvote 0
bạn ơi, chỉ mình với lúc nhấn vào gửi mail thì hiển thị lên " Microsoft outlook 2010 startup" rùi mình nhấn next .... sao đó mình ko gửi dc , bạn có thể chỉ mình những thao tác lúc gửi mail bằng hình được ko ạ, với lại tại mình ko biết cách chụp màn hình như thế nào, phải mình bt mình chụp gửi qua bạn hướng dẫn cho nhanh
 
Upvote 0
mình nghĩ bạn nên làm code lưu phiếu lương thành 1 file pdf cho từng người lưu vào folder sau đó làm code đính kèm file pdf đã tạo cho mỗi người hay hơn. Bên công ty mình thường làm như vậy!
Bài đã được tự động gộp:

mình nghĩ bạn nên làm code lưu phiếu lương thành 1 file pdf cho từng người lưu vào folder sau đó làm code đính kèm file pdf đã tạo cho mỗi người hay hơn. Bên công ty mình thường làm như vậy!
 
Upvote 0
Bạn sử dụng code sau thử nhé

Mã:
Sub SendMail()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim cell As Range
    Dim Addresslist As Scripting.Dictionary
    Application.ScreenUpdating = False
    Set Addresslist = New Scripting.Dictionary
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon

    For Each cell In Columns("B").Cells.SpecialCells(xlCellTypeConstants)
        If cell.Value Like "?*@?*.?*" And _
           LCase(Cells(cell.Row, "J").Value) = "yes" Then
            On Error Resume Next
            Addresslist.Add cell.Value, cell.Value
            If Err.Number = 0 Then
                Set OutMail = OutApp.CreateItem(0)
                With OutMail
                    .To = cell.Value
                    .Subject = "Phieu luong: " & Cells(cell.Row, "A").Value
                    .Body = "Dear " & Cells(cell.Row, "A").Value _
                          & vbNewLine & vbNewLine & _
                            "Xin vui long xem chi tiet bang luong nhu ben duoi:" & _
                            vbNewLine & vbNewLine & _
                           "+ He So Chuc Danh: " & Cells(cell.Row, "C").Value & _
                              vbNewLine & _
                           "+ So ngay cong: " & Cells(cell.Row, "D").Value & _
                            vbNewLine & _
                           "+ Luong CD: " & Cells(cell.Row, "E").Value & _
                            vbNewLine & _
                           "+ Phu cap DT: " & Cells(cell.Row, "F").Value & _
                            vbNewLine & _
                           "+ Phu cap doan the: " & Cells(cell.Row, "G").Value & _
                            vbNewLine & _
                           "+ Tru BHXH, BHYT: " & Cells(cell.Row, "H").Value & _
                            vbNewLine & _
                           "+ Luong CK: " & Cells(cell.Row, "I").Value & _
                           vbNewLine & vbNewLine & _
                           "Cam on"
                    .Display  'Or use Send
                End With
                Set OutMail = Nothing
            End If
            On Error GoTo 0
        End If
    Next cell

    Set OutApp = Nothing
    Set Addresslist = Nothing
    Application.ScreenUpdating = True
End Sub

http://www.rondebruin.nl/mail/folder3/message.htm

Tham khảo thêm file nhé.
Cảm ơn bạn nhiều
 
Upvote 0
Thông báo đó là do outlook security khi gởi mail hàng loạt bằng vba nhằm tránh spam đó mà . Hôm trước mình viết code gởi mail bảng chi tiết lương hơn 500 nhân viên Outlook cung báo vậy. Có 2 cách khắc phục : nếu bạn rành về hệ thống thì vào Regedit sửa còn không thí có tool để enable một số port trong out look la ok . bạn cần thì mail cho mình khongventoan@gmail.com
Của mình phần bạn bảo
Bạn vào Outlook Options > Trust Center > Trust Center Setting... > Programmatic Access > Click chọn Never warn me about ...
Thế là xong.
của mình chỗ đó mờ đi luôn không cho tích. Có ai có giải pháp nào khác không giúp em với?
 
Upvote 0
Chào các bác! Mình mới tìm hiểu về VBA, các bác có thể giải thích giúp mình ý nghĩa của các biến không ?
 
Upvote 0
em muốn gởi phiếu lương vào email cho mọi người, mong các ace hướng dẫn ah. em cám ơn.
em gởi kèm file bảng lương ah.
 

File đính kèm

Upvote 0
Các bác cho em hỏi làm sao mình có thể định dạng số cho dữ liệu khi gửi mail

Ví dụ: Lương thực tế phải hiện lên là 127.655.000

1552123625185.png
 
Upvote 0
Bạn ráng tìm đọc trong đề tài này, sẽ có hướng giải quyết vấn đề của bạn nhé.

Chào anh ạ.
Em có đọc đề tài này của anh và các anh chị trong chủ đề, em cũng tìm tòi nhưng do không biết về VBA nên mong anh và mọi người trên diễn đàn giúp đỡ ạ.
Em có file lương như đính kèm, em cũng có phần "Phiếu Lương" hàng tháng in và phát cho mọi người. Tuy nhiên em cũng có mong muốn như đề tài các anh chị đang bàn đó là muốn gửi các thông tin "phiếu lương" qua email cho người lao động. Chỉ khối sản xuất mới in phiếu lương ra phát.

Anh chị giúp em để em có thể gửi email phiếu lương với ạ.
Nội dung email

1. Tiêu đề email:
CÔNG TY TNHH ..... GỬI PHIẾU LƯƠNG THÁNG .... NĂM....
2. Nội dung Email:
Công ty TNHH ... cảm ơn sự nỗ lực và cống hiến của Anh / Chị trong tháng qua. Sau đây là Phiếu lương chi tiết trong tháng ........ năm........ .
214606

Anh/ chị kiểm tra Phiếu lương:
Nếu có thắc mắc về thời gian làm việc vui long liên hệ với Phòng hành chính nhân sự để được giải đáp
Nếu có thắc mắc về cách tính lương, các khoản bù trừ lương vui lòng liên hệ với Phòng Tài chính kế toán để được giải đáp.

3. Chũ ký Email

Trân Trọng

=============================

Nguyễn Thị H– Kế toán Trưởng

Mobile:...............
Email: ........................

Mong anh và các anh chị trong thành viên giúp đỡ em với ạ. Em xin cảm ơn ạ
 

File đính kèm

Upvote 0
NHỜ CÁC BẠN XEM GIÚP MÌNH VỚI NHA
MÌNH CẦN ĐỂ GỬI MAIL CHO MỖI NGƯỜI VA ĐÍNH KÈM MỖI FILE KHÁC NHAU NHƯNG KHÔNG GỬI ĐƯỢC
 

File đính kèm

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

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

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

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

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

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

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

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

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

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ôngLương CDPhụ cấp điện thoaiPhụ cấp đoàn thểTrừ BHXH, BHTYLươ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​
Chào bạn,
Bạn tìm đọc trong chủ đề này sẽ có cái bạn cần nhé,
HLMT
 
Upvote 0
Chào bạn,
Bạn tìm đọc trong chủ đề này sẽ có cái bạn cần nhé,
HLMT
Cảm ơn bác. Em đã làm được.

Tuy nhiên em có câu hỏi thêm là, em dùng bảng này để gửi mail --> từ đó sẽ tạo yêu cầu tự động trên hệ thống --> tuy nhiên đối với ký tự đặc biệt như "/" "@" "&" thì lại không nhận. Trong khi nếu em tạo mail thông thường thì các ký tự này lại nhận. Vậy trong phần code có phải sửa thêm gì nữa không bác?
 
Upvote 0
Anh @Hai Lúa Miền Tây Có Thể Giúp Em Phần Này Được Không Ạ? Sau Khi E Chạy Code Gửi Mail Tự Động Thì Máy Báo Lỗi Như Thế Này, Hiện Em Không Biết Làm Sao Để Sửa, Mong Được Anh Giúp, Cám Ơn Anh
 

File đính kèm

  • 1574092843614.png
    1574092843614.png
    71 KB · Đọc: 22
Upvote 0
Dear các anh
Nhờ anh giúp em file gửi email cảnh báo tiến độ công việc hết hạn và sắp hết hạn với ạ. Nội dung Body email và file đính kèm email như thế này ạ

NoNGÀY BĐTrọng số CVMÔ TẢNHÓMTHỜI HẠNK.L GiaoK.L H.Thành% H.ThànhKẾT QUẢSố ngày
A
CÔNG VIỆC QUÁ HẠN​
1
01/04/2020​
4
Ngầm theo KPI (CT chính - ĐVT: tuyến)
+ Long Hải: 140503-BQLDA/VTNet-Long Hải/XL 2019​
HCQT​
20/04/2020​
3​
2​
67%​
-5​
2
01/04/2020​
4
Cáp Treo (triển khai truyền dẫn trạm BTS)
+ CTCT: 210609 - BQLDA/VTNet - CTCT/XL 2018​
HCQT​
15/04/2020​
10​
0%​
-10​
3
05/04/2020​
4
Quyết toán hợp đồng Công ty Tân Thanh
+ 120701-KTHT/VTU-TÂNTHANH/XL2018​
HCQT​
11/04/2020​
11​
9​
82%​
-14​
4
25/03/2020​
4
HCQT Hợp đồng thay thế cáp dập nát
+ 250401-KTHT/VTU-XÂY DỰNG VŨNG TÀU/XL 2018​
HCQT​
15/04/2020​
1​
1​
100%​
-10​
B
CÔNG VIỆC SẮP HẾT HẠN​
1
01/04/2020​
4
Điều hành triển khai thi công ngầm hóa 08 tuyến ngầm​
Truyền dẫn​
25/04/2020​
6​
6​
100%​
0​
2
10/04/2020​
4
Hoàn thành Đưa vào sử dụng các tuyến cáp ngầm kiên cố​
Truyền dẫn​
25/04/2020​
3​
3​
100%​
0​
3
08/04/2020​
4
Triển khai thi công kéo cáp quang treo cho trạm BTS: 07 tuyến​
Truyền dẫn​
25/04/2020​
6,3​
0%​
0​
4
08/04/2020​
4
Hoàn thành Đưa vào sử dụng các tuyến cáp quang treo phát sóng trạm BTS​
Truyền dẫn​
25/04/2020​
4​
4​
100%​
0​
5
01/04/2020​
4
Giảm tồn Xuất hàng đầu tư mới cho công trình truyền dẫn (treo + ngầm)​
QLTS​
25/04/2020​
2,017619​
0,4​
20%​
0​
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
mọi người ơi cho em hỏi với ạ, tại sao khi em copy Code của a HLMT sang file của mình thì bị báo lỗi như thế này ạ? mong được mọi người giải đáp.
 

File đính kèm

  • Annotation 2020-04-25 164134.jpg
    Annotation 2020-04-25 164134.jpg
    60.8 KB · Đọc: 19
  • Annotation 2020-04-25 164159.jpg
    Annotation 2020-04-25 164159.jpg
    62 KB · Đọc: 17
Upvote 0
mọi người ơi cho em hỏi với ạ, tại sao khi em copy Code của a HLMT sang file của mình thì bị báo lỗi như thế này ạ? mong được mọi người giải đáp.
Nếu khai báo
Mã:
Dim Addresslist As Scripting.Dictionary
thì phải thêm thư viện Microsoft Scripting Runtime: Tools -> references -> Microsoft Scripting Runtime


Nếu muốn kết nối chậm thì không phải thêm thư viện như trên nhưng phải có:
Mã:
Dim Addresslist As Object
...
Set Addresslist = CreateObject("Scripting.Dictionary")
 
Upvote 0
Nếu khai báo
Mã:
Dim Addresslist As Scripting.Dictionary
thì phải thêm thư viện Microsoft Scripting Runtime: Tools -> references -> Microsoft Scripting Runtime


Nếu muốn kết nối chậm thì không phải thêm thư viện như trên nhưng phải có:
Mã:
Dim Addresslist As Object
...
Set Addresslist = CreateObject("Scripting.Dictionary")
Cám Ơn Bạn Rất Rất Nhiều, Mình Đã Làm Theo Và Hết Lỗi Rồi. ^^
 
Upvote 0
Xin Lỗi Lại Làm Phiền Bạn @batman1 một lần nữa được không ạ? sau khi được bạn sửa code mình chạy đã rất ổn rồi, nhưng có một vấn đề mình không biết phải sửa làm sao, đó là mình tham chiếu mail trong code là ô B84, nếu mình tự gõ mail trong ô B84 thì sẽ gửi được, nhưng nếu mình lấy mail từ sheet khác đưa vào ô B84 thì lại không gửi được mail, mong bạn giúp đỡ ^^, cám ơn bạn nhiều.
Gõ mail trực tiếp vào ô tham chiếu thì gửi được
Bài đã được tự động gộp:

gõ hàm để lấy mail từ 1 sheet khác vào ô tham chiếu ví dụ như thế này thì lại không được.
 

File đính kèm

  • Annotation 2020-04-26 234044.jpg
    Annotation 2020-04-26 234044.jpg
    9.7 KB · Đọc: 8
  • Annotation 2020-04-26 234204.jpg
    Annotation 2020-04-26 234204.jpg
    10 KB · Đọc: 6
Upvote 0
Xin Lỗi Lại Làm Phiền Bạn @batman1 một lần nữa được không ạ? sau khi được bạn sửa code mình chạy đã rất ổn rồi, nhưng có một vấn đề mình không biết phải sửa làm sao, đó là mình tham chiếu mail trong code là ô B84, nếu mình tự gõ mail trong ô B84 thì sẽ gửi được, nhưng nếu mình lấy mail từ sheet khác đưa vào ô B84 thì lại không gửi được mail, mong bạn giúp đỡ ^^, cám ơn bạn nhiều.
Gõ mail trực tiếp vào ô tham chiếu thì gửi được
Bài đã được tự động gộp:

gõ hàm để lấy mail từ 1 sheet khác vào ô tham chiếu ví dụ như thế này thì lại không được.
Tôi không trả lời những người chỉ chơi ảnh.

Không phải lúc nào cũng nhìn thấy code trên ảnh.
 
Upvote 0
xin lỗi bạn, mình vô ý quá, mình gửi file lên mong bạn hỗ trợ ^^
Tại dòng này (nếu chỉ có ảnh thì không ai nhìn thấy)
Mã:
cell In Columns("B").Cells.SpecialCells(xlCellTypeConstants)
Nên những ô có công thức không được xét. Chỉ các ô có hằng số (xlCellTypeConstants) mới được xét.

Nếu bạn vẫn xét từng ô trên sheet thì tôi đề nghị:
1. Thêm khai báo
Mã:
Dim rng As Range

2. Thay
Mã:
For Each cell In Columns("B").Cells.SpecialCells(xlCellTypeConstants)
bằng
Mã:
With ThisWorkbook.Worksheets("Sheet2")
    Set rng = .Range("B1:B" & .Cells(Rows.Count, "B").End(xlUp).Row)
End With
For Each cell In rng
 
Upvote 0
Tại dòng này (nếu chỉ có ảnh thì không ai nhìn thấy)
Mã:
cell In Columns("B").Cells.SpecialCells(xlCellTypeConstants)
Nên những ô có công thức không được xét. Chỉ các ô có hằng số (xlCellTypeConstants) mới được xét.

Nếu bạn vẫn xét từng ô trên sheet thì tôi đề nghị:
1. Thêm khai báo
Mã:
Dim rng As Range

2. Thay
Mã:
For Each cell In Columns("B").Cells.SpecialCells(xlCellTypeConstants)
bằng
Mã:
With ThisWorkbook.Worksheets("Sheet2")
    Set rng = .Range("B1:B" & .Cells(Rows.Count, "B").End(xlUp).Row)
End With
For Each cell In rng
Cám ơn bạn rất nhiệt tình hướng dẫn, rất hữu ích với những người mới như mình ^^
Bài đã được tự động gộp:

Tại dòng này (nếu chỉ có ảnh thì không ai nhìn thấy)
Mã:
cell In Columns("B").Cells.SpecialCells(xlCellTypeConstants)
Nên những ô có công thức không được xét. Chỉ các ô có hằng số (xlCellTypeConstants) mới được xét.

Nếu bạn vẫn xét từng ô trên sheet thì tôi đề nghị:
1. Thêm khai báo
Mã:
Dim rng As Range

2. Thay
Mã:
For Each cell In Columns("B").Cells.SpecialCells(xlCellTypeConstants)
bằng
Mã:
With ThisWorkbook.Worksheets("Sheet2")
    Set rng = .Range("B1:B" & .Cells(Rows.Count, "B").End(xlUp).Row)
End With
For Each cell In rng
Cám ơn bạn thêm một lần nữa, Code đã chạy theo đúng như mình mong đợi ^^
 
Lần chỉnh sửa cuối:
Upvote 0
Bác HLMT ơi,
Em thấy các code bác viết đều để là .copypicture, như vậy dán vào email sẽ là dạng ảnh
Em để .copy mà không copy được vào outlook
Ý em là muốn có table trong oullook mà không phải dạng ảnh. Bác giúp em với
 
Upvote 0
Em sưu tầm được đoạn code sau dùng để tạo ảnh vùng bất kỳ. Có cách nào nâng cấp lên thêm sau khi tạo được ảnh đó thì sẽ gửi email ảnh đó theo list được không? (Mỗi ảnh gửi cho một email). Trường hợp không gửi trực tiếp trên VBA được thì có thể chỉ em làm cách nào export được ảnh đó thành file được không?
Mã:
Sub DoCamera()
    Dim MyPrompt As String
    Dim MyTitle As String
    Dim UserRange As Range
    Dim OutputRange As Range

    Application.ScreenUpdating = True

    'Prompt user for range to capture
    MyPrompt = "Select the range you would like to capture."
    MyTitle = "User Input Required"
    On Error Resume Next
    Set UserRange = Application.InputBox(Prompt:=MyPrompt, _
        Title:=MyTitle, Default:=ActiveCell.Address, Type:=8)
    If UserRange Is Nothing Then End
    On Error GoTo 0

    'Copy range to Clipboard as picture
    UserRange.CopyPicture

    'Prompt user for range to paste to
    MyPrompt = "Select the range on which you would like to paste."
    MyTitle = "User Input Required"
    On Error Resume Next
    Set OutputRange = Application.InputBox(Prompt:=MyPrompt, _
        Title:=MyTitle, Default:=ActiveCell.Address, Type:=8)
    If OutputRange Is Nothing Then End
    On Error GoTo 0

    'Paste picture to output range
    OutputRange.PasteSpecial
    'Selection.Formula = UserRange.Address
    Selection.Name = "007"
End Sub
 
Upvote 0
Bác HLMT ơi,
Em thấy các code bác viết đều để là .copypicture, như vậy dán vào email sẽ là dạng ảnh
Em để .copy mà không copy được vào outlook
Ý em là muốn có table trong oullook mà không phải dạng ảnh. Bác giúp em với
Bạn ơi đoạn code ấy ở đâu nhỉ mình đang không thấy. Í bạn là email dạng ảnh là file ảnh chứ không phải là ảnh trong file excel?
 
Upvote 0
BẠn thử code sau thử:

Mã:
Sub SendMail2()

    Dim OutApp As Object
    Dim OutMail As Object
    Dim cell As Range
    Dim i As Integer
    Application.ScreenUpdating = False
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    With Sheet2
        For Each cell In Sheet3.[C1:C1000]
            i = i + 1
            If Len(cell) > 0 Then
                .[A1:K1000].AutoFilter Field:=11, Criteria1:=cell
                .[A1:K1000].AutoFilter Field:=7, Criteria1:="Incomplete"
                 If .Cells(Rows.Count, 7).End(xlUp).Row > 1 Then
                    .[A1].CurrentRegion.CopyPicture
                    Set OutMail = OutApp.CreateItem(0)
                    With OutMail
                       .To = cell.Value
                       .Subject = "PRODUCTS: " & Cells(cell.Row, "C").Value
                       .HTMLBody = " <B>Xin chao " & cell.Offset(, -1) & "</B>" & _
                                        "<BR><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 "^({v})", True
                End If
            End If
        Next
        .ShowAllData
    End With
    Application.ScreenUpdating = True
  
End Sub

Lưu ý chuyển Table về range nhé.
Đúng cái em cần. Nhưng nếu thay Display bằng Send thì khi gửi không có ảnh anh ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
Mã:
Sub SendMail2()
    Dim OutApp As Object
    Dim OutMail 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("AG2")
        Den = .Range("AH2")
        For i = Tu To Den Step 2
            .Range("AH5") = i
            .Range("A1:AB68").CopyPicture
            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
                .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><B>Phòng Nhân s" & ChrW(7921) & "!</B>"
                .display
            End With
            SendKeys "({DOWN})", True
            SendKeys "({DOWN})", True
            SendKeys "({DOWN})", True
            SendKeys "^({v})", True
        Next i
    End With
    Set OutMail = Nothing
End Sub

Cho em hỏi em thay display bằng send thì không có picture add vào mail. Em thử cho đoạn code
Mã:
SendKeys "({DOWN})", True
            SendKeys "({DOWN})", True
            SendKeys "({DOWN})", True
            SendKeys "^({v})", True
lên trên phần .Send cũng không được.
 
Upvote 0
Có ai giúp được vấn đề của em không? Send luôn thì không có ảnh đính kèm mà để chế độ display thì phải bấm thủ công nút send nhiều lần. Em cũng đã thử cho cả lệnh display và send thì vẫn mất hình.
 
Upvote 0
Có ai giúp được vấn đề của em không? Send luôn thì không có ảnh đính kèm mà để chế độ display thì phải bấm thủ công nút send nhiều lần. Em cũng đã thử cho cả lệnh display và send thì vẫn mất hình.
Bạn gửi file mẫu tôi xem thử nhé. Bởi vì bạn đã gửi trước khi dán thì làm sao có hình được.
 
Upvote 0

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

Back
Top Bottom