Xin chỉnh sửa code gửi email có dấu từ excel

Liên hệ QC

ngondensang2007

Thành viên mới
Tham gia
22/8/08
Bài viết
10
Được thích
2
Dear All !

Mình có xin được đoạn code nhưng mình chưa biết làm cách làm thể nào để subject và nội dung chữ mặc định khi gửi email sử dụng được tiếng việt

Đoạn code cần hiện thị nội dung tiếng việt :

With OutMail
.to = cell.Value
.Subject = "LỆNH GỬI TRẢ HÀNG"
.Body = "Em gửi anh lệnh gửi trả hàng cụ thể nha sau : " & cell.Offset(0, -1).Value
Thank !
 
Lần chỉnh sửa cuối:
Dear All !

Mình có xin được đoạn code nhưng mình chưa biết làm cách làm thể nào để subject và nội dung chữ mặc định khi gửi email sử dụng được tiếng việt

Đoạn code cần hiện thị nội dung tiếng việt :

With OutMail
.to = cell.Value
.Subject = "LỆNH GỬI TRẢ HÀNG"
.Body = "Em gửi anh lệnh gửi trả hàng cụ thể nha sau : " & cell.Offset(0, -1).Value
Thank !
Thì bạn cứ gõ tiếng Việt vào cell nào đó rồi liên kết vào code. Chứ trong VBA thì không gõ được tiếng Việt có dấu rồi đó
 
Upvote 0
Dear All
Thì bạn cứ gõ tiếng Việt vào cell nào đó rồi liên kết vào code. Chứ trong VBA thì không gõ được tiếng Việt có dấu rồi đó

Em muốn có nội dung trong email từ cột A đến cột E thì sẽ sửa code như thế nào anh chỉ giúp em với.

ở đây dòng code em chỉ hiểu là chỉ định cột F là cột để email và từ cột G1 ~ K1 là link file đính kèm có sẵn trong máy.
Giờ em muốn trong email sẽ hiện thị toàn bộ nội dung từ cột A ~ cột E thì sẽ thêm dòng code ở đâu. Vì hiện tại nếu em để dòng code dưới đây thì trong nội dung email chỉ hiện thị ở cột E. Em có gửi file đính kèm để anh tiện check kiểm tra.

Sub Send_Files()

Dim OutApp As Object
Dim OutMail As Object
Dim sh As Worksheet
Dim cell As Range
Dim FileCell As Range
Dim rng As Range

With Application
.EnableEvents = False
.ScreenUpdating = False
End With

Set sh = Sheets("Sheet1")

Set OutApp = CreateObject("Outlook.Application")

' LENH LOC COT EMAIL

For Each cell In sh.Columns("F").Cells.SpecialCells(xlCellTypeConstants)

'LENH DINH KEM FILE VA CHI DINH GUI

Set rng = sh.Cells(cell.Row, 1).Range("G1:K1")

If cell.Value Like "?*@?*.?*" And _
Application.WorksheetFunction.CountA(rng) > 0 Then
Set OutMail = OutApp.CreateItem(0)

With OutMail
.to = cell.Value
.Subject = "LENH DIEU DONG"
.Body = "" & cell.Offset(0, -1).Value

For Each FileCell In rng.SpecialCells(xlCellTypeConstants)
If Trim(FileCell) <> "" Then
If Dir(FileCell.Value) <> "" Then
.Attachments.Add FileCell.Value
End If
End If
Next FileCell

.Send 'Or use .Display
End With

Set OutMail = Nothing
End If
Next cell

Set OutApp = Nothing
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
 

File đính kèm

Upvote 0
Dear All


Em muốn có nội dung trong email từ cột A đến cột E thì sẽ sửa code như thế nào anh chỉ giúp em với.

ở đây dòng code em chỉ hiểu là chỉ định cột F là cột để email và từ cột G1 ~ K1 là link file đính kèm có sẵn trong máy.
Giờ em muốn trong email sẽ hiện thị toàn bộ nội dung từ cột A ~ cột E thì sẽ thêm dòng code ở đâu. Vì hiện tại nếu em để dòng code dưới đây thì trong nội dung email chỉ hiện thị ở cột E. Em có gửi file đính kèm để anh tiện check kiểm tra.

Sub Send_Files()

Dim OutApp As Object
Dim OutMail As Object
Dim sh As Worksheet
Dim cell As Range
Dim FileCell As Range
Dim rng As Range

With Application
.EnableEvents = False
.ScreenUpdating = False
End With

Set sh = Sheets("Sheet1")

Set OutApp = CreateObject("Outlook.Application")

' LENH LOC COT EMAIL

For Each cell In sh.Columns("F").Cells.SpecialCells(xlCellTypeConstants)

'LENH DINH KEM FILE VA CHI DINH GUI

Set rng = sh.Cells(cell.Row, 1).Range("G1:K1")

If cell.Value Like "?*@?*.?*" And _
Application.WorksheetFunction.CountA(rng) > 0 Then
Set OutMail = OutApp.CreateItem(0)

With OutMail
.to = cell.Value
.Subject = "LENH DIEU DONG"
.Body = "" & cell.Offset(0, -1).Value

For Each FileCell In rng.SpecialCells(xlCellTypeConstants)
If Trim(FileCell) <> "" Then
If Dir(FileCell.Value) <> "" Then
.Attachments.Add FileCell.Value
End If
End If
Next FileCell

.Send 'Or use .Display
End With

Set OutMail = Nothing
End If
Next cell

Set OutApp = Nothing
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
Dạng bài gửi email tự động này có nhiều rồi mà, bạn gửi file đầy đủ nội dụng ( tên cột chứa địa chỉ file đính kèm,.....) lên mình sẽ hướng dẫn chi tiết
 
Upvote 0
Dạng bài gửi email tự động này có nhiều rồi mà, bạn gửi file đầy đủ nội dụng ( tên cột chứa địa chỉ file đính kèm,.....) lên mình sẽ hướng dẫn chi tiết

Mình test thử thì có thể sử dụng tạm thời file này được rồi. Hiện thị được toàn bộ dữ liệu như mình muốn

Hiện tại mình đang test thêm trường chức năng là tạo thành bảng khi gửi email đi để có thêm dấu tiếng việc mấy cái như địa điểm, ngày giờ, thông tin người liên hệ, số điện thoại......

File đính kèm hiện tại mình không sử dụng nhưng mình thấy để code file đính kèm từ cột G ~ K thì mình chỉ cần gõ 1 ký tự bất kỳ ( ở đây mình mặc định là gõ ký tự X ở cột G ) thì sẽ mặc định gửi email tới địa chỉ đó còn lại nếu để trống sẽ không gửi email.

Thank !
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Mình test thử thì có thể sử dụng tạm thời file này được rồi. Hiện thị được toàn bộ dữ liệu như mình muốn

Hiện tại mình đang test thêm trường chức năng là tạo thành bảng khi gửi email đi để có thêm dấu tiếng việc mấy cái như địa điểm, ngày giờ, thông tin người liên hệ, số điện thoại......

File đính kèm hiện tại mình không sử dụng nhưng mình thấy để code file đính kèm từ cột G ~ K thì mình chỉ cần gõ 1 ký tự bất kỳ ( ở đây mình mặc định là gõ ký tự X ở cột G ) thì sẽ mặc định gửi email tới địa chỉ đó còn lại nếu để trống sẽ không gửi email.

Thank !
VIết tiếng việt trong code được, bạn tìm hàm chuyển đổi, không thì sử dụng những nội dung trong excel.
Ví dụ: " DIA DIEM : " bạn thay bằng cells(1,2) & ": "
 
Upvote 0
Mình test thử thì có thể sử dụng tạm thời file này được rồi. Hiện thị được toàn bộ dữ liệu như mình muốn

Hiện tại mình đang test thêm trường chức năng là tạo thành bảng khi gửi email đi để có thêm dấu tiếng việc mấy cái như địa điểm, ngày giờ, thông tin người liên hệ, số điện thoại......

File đính kèm hiện tại mình không sử dụng nhưng mình thấy để code file đính kèm từ cột G ~ K thì mình chỉ cần gõ 1 ký tự bất kỳ ( ở đây mình mặc định là gõ ký tự X ở cột G ) thì sẽ mặc định gửi email tới địa chỉ đó còn lại nếu để trống sẽ không gửi email.

Thank !
Với dạng bài kiểu này nên dùng "Microsoft CDO for window 200" , bạn copy code này vào sheet1; điền đầy đủ các thông tin mình chú thích trong code tại sub SentEmailbyHungnm:
Mã:
Option Explicit
Sub SentEmailbyHungnm()
Dim Flds, strTextbody As String, schema, i, Arr_dat, rng As Range
'Dim iMsg As Object, iConf As Object
Dim iMsg As New CDO.Message
Dim iConf As New CDO.Configuration

Set Flds = iConf.Fields
schema = "http://schemas.microsoft.com/cdo/configuration/"
Flds.Item(schema & "sendusing") = cdoSendUsingPort
Flds.Item(schema & "smtpserver") = "smtp.gmail.com"
Flds.Item(schema & "smtpserverport") = 25
Flds.Item(schema & "smtpauthenticate") = 1
Flds.Item(schema & "sendusername") = "Manh.Hung.DHXD@gmail.com"                  'Dia chi that
Flds.Item(schema & "sendpassword") = ".............."                             'Pass that
Flds.Item(schema & "smtpusessl") = 1
Flds.Update
On Error Resume Next
Application.ScreenUpdating = False
'----------------XAC DINH VUNG DU LIEU
Arr_dat = Range("F1", [F65536].End(3)).Resize(, 2)
Set rng = Range("A1", [A65536].End(3)).Resize(, 5)
'=======================================
With iMsg                                        'tuy y
    .CC = ""
    .BCC = ""
    '.AddAttachment ("C:\IP_Address.txt")                'Dia chi file phai ton tai
    .from = "GIAI PHAP EXCEL " & "<" & "Hungnm@pecc1.com.vn" & ">"      'tuy y
    .Subject = " TEN TIEU DE"                                           'tuy y
    '.DataSource
    '.TextBody = strTextbody
    'Set .Configuration = iConf
    For i = 2 To UBound(Arr_dat, 1)
        If InStr(1, Arr_dat(i, 2), "x", vbTextCompare) Then
            .To = Replace(Arr_dat(i, 1), " ", "")  'dia chi nhan mail
            Set .Configuration = iConf
            .HTMLBody = RangetoHTML(rng)
            .Send
        End If
    Next
End With
Handle:
    If Err Then
        MsgBox Err.Description
    Else
        MsgBox "DONE"
    End If
    Application.ScreenUpdating = True
End Sub
Function RangetoHTML(rng As Range)
    ' Changed by Ron de Bruin 28-Oct-2006
    ' Working in Office 2000-2007
    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

Nhớ vào tool -> reference--> chọn tích vào " Microsoft CDO for window 2000 libalary"
 
Upvote 0
Upvote 0
Xin chào tất cả anh em,
Cũng như mọi lập trình viên VBA, mình đang không giải quyết được vấn đề Tiếng Việt khi gửi email tự động từ excel
Mình xin gửi file và code, nhờ các anh em chỉ giáo và hỗ trợ. Xin trân trọng cảm ơn!
Đây là đoạn code chương trình:

Sub GuiThu()
'Tao cac doi tuong thu và thiet lap tat ca cac truong can thiet de gui email.
Dim CDO_Mail As Object
Dim CDO_Config As Object
Dim SMTP_Config As Variant
Dim strSubject As String
Dim strFrom As String
Dim strPassFrom As String
Dim strTo As String
Dim strCc As String
Dim strBcc As String
Dim strBody As String
Dim FileAttachment As String

'Cau hinh ket noi den may chu SMTP de gui email
strFrom = Sheet2.Cells(2, 2)
strPassFrom = Trim(Sheet2.Cells(3, 2))
strTo = Sheet1.Cells(2, 2)
strCc = Sheet1.Cells(2, 3)
strBcc = Sheet1.Cells(2, 4)
strSubject = Sheet2.Cells(7, 2)
strBody = Sheet2.Cells(8, 2)
FileAttachment = Sheet2.Range("B4").Value & Sheet2.Range("B5").Value & Sheet1.Range("A2").Value & "." & Sheet2.Range("B6").Value

'Cau hinh CDO de su dung may chu SMTP GMAIL de gui email.
Set CDO_Mail = CreateObject("CDO.Message")
On Error GoTo Error_Handling

Set CDO_Config = CreateObject("CDO.Configuration")
CDO_Config.Load -1

Set SMTP_Config = CDO_Config.Fields

With SMTP_Config
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = strFrom
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = strPassFrom
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
.Update
End With

With CDO_Mail
Set .Configuration = CDO_Config
End With

'Dien vao cac truong thich hop cho doi tuong CDO_Mail và dua ra lenh GUI
CDO_Mail.Subject = strSubject
CDO_Mail.From = strFrom
CDO_Mail.To = strTo
CDO_Mail.HTMLBody = strBody
CDO_Mail.TextBody = strBody
CDO_Mail.CC = strCc
CDO_Mail.BCC = strBcc
CDO_Mail.AddAttachment FileAttachment
CDO_Mail.Send

Error_Handling:
If Err.Description <> "" Then MsgBox Err.Description
End Sub
 

File đính kèm

Upvote 0
Muốn phục vụ tiếng Việt thì sửa
Mã:
With CDO_Mail
     Set .Configuration = CDO_Config
End With

thành
Mã:
With CDO_Mail
     Set .Configuration = CDO_Config
     .bodypart.Charset = "utf-8"
End With

Tức thêm .bodypart.Charset = "utf-8"
 
Upvote 0
Muốn phục vụ tiếng Việt thì sửa
Mã:
With CDO_Mail
     Set .Configuration = CDO_Config
End With

thành
Mã:
With CDO_Mail
     Set .Configuration = CDO_Config
     .bodypart.Charset = "utf-8"
End With

Tức thêm .bodypart.Charset = "utf-8"
Rất cám ơn batman1. Test thử đã thành công với phần body- thật ngoạn mục! Còn lại phần Subject thì vẫn chưa thay đổi. Tuy rằng phần này ngắn nên có thể viết không dấu vẫn ổn
 
Upvote 0
Rất cám ơn batman1. Test thử đã thành công với phần body- thật ngoạn mục! Còn lại phần Subject thì vẫn chưa thay đổi. Tuy rằng phần này ngắn nên có thể viết không dấu vẫn ổn
Tiêu đề cũng sẽ được.

Nhưng bạn không thành công do subject của bạn không phải là unicode và đang dùng mã TCVN3 (bạn chọn B7 sẽ thấy).

Hãy viết tiêu đề như nội dung, tức dùng unicode, thì sẽ thấy cả tiêu đề cũng có chữ Việt.

Thời nào rồi mà vẫn có người dùng TCVN3 và VNI? Trong Unikey hãy chọn unicode. Thế thôi.
 
Upvote 0
Các bác cho mình hỏi tool gởi gmail mình down về, khi chạy nó báo lỗi là Compile error in hide Module: Module 1...version, flatform...
Outlook thi mình gởi được còn gmail thì chịu thua hix hix. Mình cần cái tool gởi gmail mà khó quá.
Cảm ơn các bác nhiều.
 

File đính kèm

Upvote 0
Các bác cho mình hỏi tool gởi gmail mình down về, khi chạy nó báo lỗi là Compile error in hide Module: Module 1...version, flatform...
Outlook thi mình gởi được còn gmail thì chịu thua hix hix. Mình cần cái tool gởi gmail mà khó quá.
Cảm ơn các bác nhiều.
Chia ra nhiều loại để mà làm gì? Gửi được thư là làm xong việc. Dùng ông A gửi thư hay ông B gửi thư thì có gì khác nhau? Cả 2 ông đều không tính phí, 2 thư đều tới nơi là được.

Chọn hoặc là gửi dùng outlook hoặc không dùng outlook thôi. Nếu là gửi không dùng outlook thì chọn 1 server thôi. Tôi nghĩ nên dùng server gmail. Không có chuyện chọn yahoo, hotmail, ... Để mà làm gì?

Về lỗi thì có thể do dùng kết nối sớm (vd. a As New CDO.xyz) mà không thêm thư viện, hoặc thêm thư viện nào đó mà phiên bản không thích hợp với phiên bản trên máy hiện hành (MISSING trong Tools -> References)

Nếu là tôi thì tôi dùng CDO với server gmail. Tìm trên GPE, trong chủ đề này cũng có.
 
Upvote 0
Chia ra nhiều loại để mà làm gì? Gửi được thư là làm xong việc. Dùng ông A gửi thư hay ông B gửi thư thì có gì khác nhau? Cả 2 ông đều không tính phí, 2 thư đều tới nơi là được.

Chọn hoặc là gửi dùng outlook hoặc không dùng outlook thôi. Nếu là gửi không dùng outlook thì chọn 1 server thôi. Tôi nghĩ nên dùng server gmail. Không có chuyện chọn yahoo, hotmail, ... Để mà làm gì?

Về lỗi thì có thể do dùng kết nối sớm (vd. a As New CDO.xyz) mà không thêm thư viện, hoặc thêm thư viện nào đó mà phiên bản không thích hợp với phiên bản trên máy hiện hành (MISSING trong Tools -> References)

Nếu là tôi thì tôi dùng CDO với server gmail. Tìm trên GPE, trong chủ đề này cũng có.
Cảm ơn bạn vì đã bỏ thời gian reply. Thật ra thì mình cần gởi từ gmail mà không gởi được. Thử outlook thì được thôi.
Do công việc nếu gởi từ outlook thì khách toàn reply lại outlook mình không trả lời ngay được.
Mình đã mở CDO như bạn nhắc nhưng giờ lại đến việc kết nối với smtp của gmail. Lúc send thì báo lỗi kết nối smtp nhưng google có gởi email cảnh báo về việc đăng nhập bất thường này..haizzz.

Thanks bác lần nữa.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom