Gửi email tự động trong excel (1 người xem)

Liên hệ QC

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

NguyenVietThinh08

Thành viên chính thức
Tham gia
12/5/20
Bài viết
86
Được thích
4
Xin chào cả nhà, mình lên mạng và có hướng dẫn gửi mail tự động bằng excel thông qua outlook.
Phương pháp rất hay nhưng mình muốn mở rộng tính năng 1 chút nhưng chưa biết cách làm mong các anh em bớt chút thời gian chỉ giáo
Mình muốn nhấn vào nút gửi email thì trong emal gửi đi đính kèm 1 ảnh là phần mình đã tô vuông đó hoặc 1 sheet mới chỉ có dữ liệu phần mình đã đóng khung
Không biết có cao nhân nào làm được không ạ, giúp mình với
 

File đính kèm

  • ảnh.PNG
    ảnh.PNG
    228.1 KB · Đọc: 61
Xin chào cả nhà, mình lên mạng và có hướng dẫn gửi mail tự động bằng excel thông qua outlook.
Phương pháp rất hay nhưng mình muốn mở rộng tính năng 1 chút nhưng chưa biết cách làm mong các anh em bớt chút thời gian chỉ giáo
Mình muốn nhấn vào nút gửi email thì trong emal gửi đi đính kèm 1 ảnh là phần mình đã tô vuông đó hoặc 1 sheet mới chỉ có dữ liệu phần mình đã đóng khung
Không biết có cao nhân nào làm được không ạ, giúp mình với
Bạn đã có code gửi mail kèm file bằng Outlook rồi đúng không?
Vậy bạn dùng code này để tạo cái ảnh vùng mà bạn đã tô vuông đó, có tên là Screenshot.jpg cùng đường dẫn với file chứa code. Đính kèm file ảnh này vào mail
PHP:
Sub Screenshot2JPG()

Dim FPath As String, FName As String
Dim pic_rng As Range
Dim ShTemp As Worksheet
Dim ChTemp As Chart
Dim PicTemp As Picture

    FPath = ThisWorkbook.path & "\"
    FName = "Screenshot.jpg"
    
    Application.ScreenUpdating = False
    Set pic_rng = Worksheets("Main").Range("A1:D7")  'Thay doi vung neu can
    Set ShTemp = Worksheets.Add
    Charts.Add
    ActiveChart.Location Where:=xlLocationAsObject, Name:=ShTemp.Name
    Set ChTemp = ActiveChart
    pic_rng.CopyPicture Appearance:=xlScreen, Format:=xlPicture
    ChTemp.Paste
    Set PicTemp = Selection
    With PicTemp
        .Width = ChTemp.Parent.Width - 1
        .Height = ChTemp.Parent.Height - 1
    End With
    
    ChTemp.Export FileName:=FPath & FName, FilterName:="jpg"
    Application.DisplayAlerts = False
    ShTemp.Delete
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    
End Sub
 
Upvote 0
Bạn đã có code gửi mail kèm file bằng Outlook rồi đúng không?
Vậy bạn dùng code này để tạo cái ảnh vùng mà bạn đã tô vuông đó, có tên là Screenshot.jpg cùng đường dẫn với file chứa code. Đính kèm file ảnh này vào mail
PHP:
Sub Screenshot2JPG()

Dim FPath As String, FName As String
Dim pic_rng As Range
Dim ShTemp As Worksheet
Dim ChTemp As Chart
Dim PicTemp As Picture

    FPath = ThisWorkbook.path & "\"
    FName = "Screenshot.jpg"
   
    Application.ScreenUpdating = False
    Set pic_rng = Worksheets("Main").Range("A1:D7")  'Thay doi vung neu can
    Set ShTemp = Worksheets.Add
    Charts.Add
    ActiveChart.Location Where:=xlLocationAsObject, Name:=ShTemp.Name
    Set ChTemp = ActiveChart
    pic_rng.CopyPicture Appearance:=xlScreen, Format:=xlPicture
    ChTemp.Paste
    Set PicTemp = Selection
    With PicTemp
        .Width = ChTemp.Parent.Width - 1
        .Height = ChTemp.Parent.Height - 1
    End With
   
    ChTemp.Export FileName:=FPath & FName, FilterName:="jpg"
    Application.DisplayAlerts = False
    ShTemp.Delete
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
   
End Sub
Thank bạn nhé, mình cũng mới tập tành VBA, mình sẽ chạy thử code xem sao, có gì xin chỉ giáo, Cảm ơn bạn nhiều
Bài đã được tự động gộp:

Thank bạn nhé, mình cũng mới tập tành VBA, mình sẽ chạy thử code xem sao, có gì xin chỉ giáo, Cảm ơn bạn nhiều
Mình chạy đến đoạn này thì lỗi, bạn có thể chỉ giáo giùm thêm phần này không,
Với mình muốn hỏi thêm nếu muốn đính kèm file ảnh vừa chụp vào thì làm thế nào ạ,
Phần '???????????????????????? trong đoạn code trên là đường link theo mình tìm hiểu, bạn có thể chỉ giáo hoặc hoàn thiện giúp mình được không ạ


Sub gui_thu()
Dim olApp As Outlook.Application
Set olApp = CreateObject("Outlook.Application")

Dim i As Integer


For i = 1 To 3
ThisWorkbook.Sheets(2).Range("D1") = i
Dim olmail As Outlook.MailItem
Set olmail = olApp.CreateItem(olMailItem)

olmail.To = ThisWorkbook.Sheets(2).Range("D3")
olmail.Subject = ThisWorkbook.Sheets(2).Range("h1")
olmail.Body = ThisWorkbook.Sheets(2).Range("H2")
olmail.Attachments.Add '???????????????????????????
olmail.Send
Next

End Sub
 

File đính kèm

  • Capture 2.PNG
    Capture 2.PNG
    283.2 KB · Đọc: 51
Lần chỉnh sửa cuối:
Upvote 0
Xin chào cả nhà, mình lên mạng và có hướng dẫn gửi mail tự động bằng excel thông qua outlook.
Phương pháp rất hay nhưng mình muốn mở rộng tính năng 1 chút nhưng chưa biết cách làm mong các anh em bớt chút thời gian chỉ giáo
Mình muốn nhấn vào nút gửi email thì trong emal gửi đi đính kèm 1 ảnh là phần mình đã tô vuông đó hoặc 1 sheet mới chỉ có dữ liệu phần mình đã đóng khung
Không biết có cao nhân nào làm được không ạ, giúp mình với
Hoặc bạn dùng code này
PHP:
Sub ActionExport()

    ExportRange Range("G174:K191"), ThisWorkbook.path & "\" & "Screenshot.jpg"

End Sub


Sub ExportRange(rng As Range, sPath As String)

    Dim cob, sc

    rng.CopyPicture Appearance:=xlScreen, Format:=xlPicture

    Set cob = rng.Parent.ChartObjects.Add(10, 10, 200, 200)
    'remove any series which may have been auto-added...
    Set sc = cob.Chart.SeriesCollection
    Do While sc.Count > 0
        sc(1).Delete
    Loop

    With cob
        .Height = rng.Height
        .Width = rng.Width
        .Chart.Paste
        .Chart.Export FileName:=sPath, Filtername:="JPG"
        .Delete
    End With

End Sub
Bài đã được tự động gộp:

Thank bạn nhé, mình cũng mới tập tành VBA, mình sẽ chạy thử code xem sao, có gì xin chỉ giáo, Cảm ơn bạn nhiều
Bài đã được tự động gộp:


Mình chạy đến đoạn này thì lỗi, bạn có thể chỉ giáo giùm thêm phần này không,
Với mình muốn hỏi thêm nếu muốn đính kèm file ảnh vừa chụp vào thì làm thế nào ạ,
Phần '???????????????????????? trong đoạn code trên là đường link theo mình tìm hiểu, bạn có thể chỉ giáo hoặc hoàn thiện giúp mình được không ạ


Sub gui_thu()
Dim olApp As Outlook.Application
Set olApp = CreateObject("Outlook.Application")

Dim i As Integer


For i = 1 To 3
ThisWorkbook.Sheets(2).Range("D1") = i
Dim olmail As Outlook.MailItem
Set olmail = olApp.CreateItem(olMailItem)

olmail.To = ThisWorkbook.Sheets(2).Range("D3")
olmail.Subject = ThisWorkbook.Sheets(2).Range("h1")
olmail.Body = ThisWorkbook.Sheets(2).Range("H2")
olmail.Attachments.Add '???????????????????????????
olmail.Send
Next

End Sub
Tôi chạy rồi mới gửi, máy tôi không lỗi chỗ đó. Bạn xem mã lỗi là gì? và trong Tools/References có bị thiếu thư viện gì không?

Với câu hỏi thứ hai: tôi chưa dùng code gửi mail bằng Outlook nhưng đã dùng với Gmail. Code với Gmail chỗ đó là .AddAttachment FPath & "Screenshot.jpg"
 
Lần chỉnh sửa cuối:
Upvote 0
Hoặc bạn dùng code này
PHP:
Sub ActionExport()

    ExportRange Range("G174:K191"), ThisWorkbook.path & "\" & "Screenshot.jpg"

End Sub


Sub ExportRange(rng As Range, sPath As String)

    Dim cob, sc

    rng.CopyPicture Appearance:=xlScreen, Format:=xlPicture

    Set cob = rng.Parent.ChartObjects.Add(10, 10, 200, 200)
    'remove any series which may have been auto-added...
    Set sc = cob.Chart.SeriesCollection
    Do While sc.Count > 0
        sc(1).Delete
    Loop

    With cob
        .Height = rng.Height
        .Width = rng.Width
        .Chart.Paste
        .Chart.Export FileName:=sPath, Filtername:="JPG"
        .Delete
    End With

End Sub
Bài đã được tự động gộp:


Tôi chạy rồi mới gửi, máy tôi không lỗi chỗ đó. Bạn xem mã lỗi là gì? và trong Tools/References có bị thiếu thư viện gì không?

Với câu hỏi thứ hai: tôi chưa dùng code gửi mail bằng Outlook nhưng đã dùng với Gmail. Code với Gmail chỗ đó là .AddAttachment FPath & "Screenshot.jpg"
Vẫn thấy lỗi bạn ạ, mình cũng mới tập tành excel nên nhìn vào cũng quá sức với mình,
 
Upvote 0
Vẫn thấy lỗi bạn ạ, mình cũng mới tập tành excel nên nhìn vào cũng quá sức với mình,
Vẫn thấy lỗi bạn ạ, mình cũng mới tập tành excel nên nhìn vào cũng quá sức với mình,
Bạn chụp cái hộp thoại popup báo lỗi gửi lên đây xem
Bài đã được tự động gộp:

Bạn chụp cái hộp thoại popup báo lỗi gửi lên đây xem
Bạn xem có tích mấy cái thư viện này không (nếu chưa thì kéo xuống tìm tích chọn vào thử): OLE Automation, Microsoft Form 2.0 Object Library và Microsoft Scripting R1593947668001.pnguntime
1593947668001.png
 
Lần chỉnh sửa cuối:
Upvote 0
Hoặc bạn dùng code này
PHP:
Sub ActionExport()

    ExportRange Range("G174:K191"), ThisWorkbook.path & "\" & "Screenshot.jpg"

End Sub


Sub ExportRange(rng As Range, sPath As String)

    Dim cob, sc

    rng.CopyPicture Appearance:=xlScreen, Format:=xlPicture

    Set cob = rng.Parent.ChartObjects.Add(10, 10, 200, 200)
    'remove any series which may have been auto-added...
    Set sc = cob.Chart.SeriesCollection
    Do While sc.Count > 0
        sc(1).Delete
    Loop

    With cob
        .Height = rng.Height
        .Width = rng.Width
        .Chart.Paste
        .Chart.Export FileName:=sPath, Filtername:="JPG"
        .Delete
    End With

End Sub
Bài đã được tự động gộp:


Tôi chạy rồi mới gửi, máy tôi không lỗi chỗ đó. Bạn xem mã lỗi là gì? và trong Tools/References có bị thiếu thư viện gì không?

Với câu hỏi thứ hai: tôi chưa dùng code gửi mail bằng Outlook nhưng đã dùng với Gmail. Code với Gmail chỗ đó là .AddAttachment FPath & "Screenshot.jpg"
Ý tưởng của mình là gửi mail cho nhiều người trong 1 danh sách email có sẵn, với mỗi mail sẽ là đính kèm 1 ảnh chụp, vì mỗi người là l=khác nhau nên ảnh chụp cũng khác nhau
Bài đã được tự động gộp:

Bạn chụp cái hộp thoại popup báo lỗi gửi lên đây xem
Bài đã được tự động gộp:


Bạn xem có tích mấy cái thư viện này không (nếu chưa thì kéo xuống tìm tích chọn vào thử): OLE Automation, Microsoft Form 2.0 Object Library và Microsoft Scripting RView attachment 240511untime
View attachment 240511
Đây ạ, anh em nghiên cứu giúp mình, mình đã lần mò các trang web 2 tuần nay rồi, anh em giúp mình nhé
Bài đã được tự động gộp:

Ý tưởng của mình là gửi mail cho nhiều người trong 1 danh sách email có sẵn, với mỗi mail sẽ là đính kèm 1 ảnh chụp, vì mỗi người là l=khác nhau nên ảnh chụp cũng khác nhau
Bài đã được tự động gộp:


Đây ạ, anh em nghiên cứu giúp mình, mình đã lần mò các trang web 2 tuần nay rồi, anh em giúp mình nhé
mã khóa là 1508 nhé
 

File đính kèm

Upvote 0
Ý tưởng của mình là gửi mail cho nhiều người trong 1 danh sách email có sẵn, với mỗi mail sẽ là đính kèm 1 ảnh chụp, vì mỗi người là l=khác nhau nên ảnh chụp cũng khác nhau
Bài đã được tự động gộp:


Đây ạ, anh em nghiên cứu giúp mình, mình đã lần mò các trang web 2 tuần nay rồi, anh em giúp mình nhé
Để tôi xem rồi trả lời. Tuy nhiên nếu biết không nhiều về VBA thì mệt lắm, không tùy biến được nên cứ mỗi tí mỗi hỏi
 
Upvote 0
Để tôi xem rồi trả lời. Tuy nhiên nếu biết không nhiều về VBA thì mệt lắm, không tùy biến được nên cứ mỗi tí mỗi hỏi
Vâng, có gì giúp mình nhé, mình cũng mới tập tành, mỗi lần ghép công thức rồi chạy thử lại sai thì mệt quá
Thank bạn nhé!
 
Upvote 0
Ý tưởng của mình là gửi mail cho nhiều người trong 1 danh sách email có sẵn, với mỗi mail sẽ là đính kèm 1 ảnh chụp, vì mỗi người là l=khác nhau nên ảnh chụp cũng khác nhau
Bài đã được tự động gộp:


Đây ạ, anh em nghiên cứu giúp mình, mình đã lần mò các trang web 2 tuần nay rồi, anh em giúp mình nhé
Bài đã được tự động gộp:


mã khóa là 1508 nhé
1805 mà bảo là 1508, hehe, bạn tếu thiệt. Tôi nhạy với mấy con số lắm gõ lần thứ 2 là trúng y
 
Upvote 0
Lấy ở bài #5 về làm dùng.

 
Upvote 0
Xem đã có thư viện OLE Automation chưa? Tôi lấy file bạn dùng vẫn OK.
1594005942479.png
 
Upvote 0
Dán cái hộp thoại References lên xem thử bạn
Đây ạ, Những dòng khác chưa được tick ạ
Bài đã được tự động gộp:

Dán cái hộp thoại References lên xem thử bạn
Đây ạ,, những ô khác chưa được tick ạ
Bài đã được tự động gộp:

Dán cái hộp thoại References lên xem thử bạn
Đay ạ
 

File đính kèm

  • Capture4.JPG
    Capture4.JPG
    91.4 KB · Đọc: 15
  • Capture4.JPG
    Capture4.JPG
    91.4 KB · Đọc: 15
  • Capture4.JPG
    Capture4.JPG
    91.4 KB · Đọc: 13
Upvote 0
Đây ạ, Những dòng khác chưa được tick ạ
Vậy bạn thử debug dòng .Chart.Paste trong sub này thử, xem nó có dán được vùng kết quả vào không?
Sub ExportRange(rng As Range, sPath As String)

Dim cob, sc

rng.CopyPicture Appearance:=xlScreen, Format:=xlPicture

Set cob = rng.Parent.ChartObjects.Add(10, 10, 200, 200)
'remove any series which may have been auto-added...
Set sc = cob.Chart.SeriesCollection
Do While sc.Count > 0
sc(1).Delete
Loop

With cob
.Height = rng.Height
.Width = rng.Width
.Chart.Paste
.Chart.Export Filename:=sPath, Filtername:="JPG"
.Delete
End With

End Sub
 
Upvote 0
Vậy bạn thử debug dòng .Chart.Paste trong sub này thử, xem nó có dán được vùng kết quả vào không?
Sub ExportRange(rng As Range, sPath As String)

Dim cob, sc

rng.CopyPicture Appearance:=xlScreen, Format:=xlPicture

Set cob = rng.Parent.ChartObjects.Add(10, 10, 200, 200)
'remove any series which may have been auto-added...
Set sc = cob.Chart.SeriesCollection
Do While sc.Count > 0
sc(1).Delete
Loop

With cob
.Height = rng.Height
.Width = rng.Width
.Chart.Paste
.Chart.Export Filename:=sPath, Filtername:="JPG"
.Delete
End With

End Sub
:((( vẫn ko được ạ
Bài đã được tự động gộp:

Mình cũng mới tập tành VBA nên nhìn vào dòng lệnh này vẫn quá sức với mình ạ
 
Lần chỉnh sửa cuối:
Upvote 0
Bấm F9 để dừng code ở 1 dòng nào đó rồi sau đó cứ bấm F8 để xem kết quả từng dòng lệnh (lật qua lật lại giữa bảng tính và cửa sổ lệnh để xem). Có gì khó mấy đâu, chỉ là bạn không chịu khó.
 
Upvote 0
Bấm F9 để dừng code ở 1 dòng nào đó rồi sau đó cứ bấm F8 để xem kết quả từng dòng lệnh (lật qua lật lại giữa bảng tính và cửa sổ lệnh để xem). Có gì khó mấy đâu, chỉ là bạn không chịu khó.
Mình mới học VBA được 1 tháng thôi, chủ yếu là đi cóp nhặt ở mấy diễn đàn và video nên mình không biết thật,
 
Upvote 0
Mình mới học VBA được 1 tháng thôi, chủ yếu là đi cóp nhặt ở mấy diễn đàn và video nên mình không biết thật,
Nếu bạn không biết debug là gì thì bạn tìm trên GPE hoặc google ra để học cách debug. Còn nếu đã biết debug thì ở trên bạn hẳn phải trả lời rõ cho tôi biết câu lệnh .Chart.Paste đó nó tác dụng ra sao chứ không thể nói chung chung "vẫn không được ạ" như thế. Đồng thời, nếu Sub trong file không được thì bạn cũng nên dùng cái Sub đầu tiên tôi gửi để thử chứ (thử riêng để biết có tạo được ảnh kết quả không). Tôi nói không chịu khó là như vậy đó.
 
Upvote 0
Bấm F9 để dừng code ở 1 dòng nào đó rồi sau đó cứ bấm F8 để xem kết quả từng dòng lệnh (lật qua lật lại giữa bảng tính và cửa sổ lệnh để xem). Có gì khó mấy đâu, chỉ là bạn không chịu khó.
Bằng 1 cách nào đó mình đã đính kèm được, sau đó mình chỉnh sửa hay sao ấy mình là không làm được như thế nữa
1594012664852.png
 
Upvote 0
Vậy bạn thử debug dòng .Chart.Paste trong sub này thử, xem nó có dán được vùng kết quả vào không?
Sub ExportRange(rng As Range, sPath As String)

Dim cob, sc

rng.CopyPicture Appearance:=xlScreen, Format:=xlPicture

Set cob = rng.Parent.ChartObjects.Add(10, 10, 200, 200)
'remove any series which may have been auto-added...
Set sc = cob.Chart.SeriesCollection
Do While sc.Count > 0
sc(1).Delete
Loop

With cob
.Height = rng.Height
.Width = rng.Width
.Chart.Paste
.Chart.Export Filename:=sPath, Filtername:="JPG"
.Delete
End With

End Sub
Mình cũng từng bị như thế! có nghĩa là hình paste vào trống trơn hổng có gì, và mình thêm cái lệnh active chart trước lệnh .Chart.Paste thì OK
 
Upvote 0
đây ạ, mình không biết mình đã sửa lệnh gì mà nó đã gửi có đính kèm ảnh có nội dung, giờ thì không biết các nào sữa nữa
View attachment 240610
trên dòng With cob thêm thử "cob.Active"
nếu vẫn bị thì thử " cob.Parent.Active "
hoặc " cob.Chart.Parent.Active "
vì mình không biết rõ lắm cái cob của bạn như thế nào.
 
Lần chỉnh sửa cuối:
Upvote 0
Xin chào cả nhà, mình lên mạng và có hướng dẫn gửi mail tự động bằng excel thông qua outlook.
Phương pháp rất hay nhưng mình muốn mở rộng tính năng 1 chút nhưng chưa biết cách làm mong các anh em bớt chút thời gian chỉ giáo
Mình muốn nhấn vào nút gửi email thì trong emal gửi đi đính kèm 1 ảnh là phần mình đã tô vuông đó hoặc 1 sheet mới chỉ có dữ liệu phần mình đã đóng khung
Không biết có cao nhân nào làm được không ạ, giúp mình với
Gửi email của bạn sao không phải gửi nội dung + format như hình được à mà phải gửi kiểu dạng ảnh để làm gì nhỉ?
 
Upvote 0
Tạm ngưng bàn luận cho tới khi có file nhá
 
Upvote 0
Gửi email của bạn sao không phải gửi nội dung + format như hình được à mà phải gửi kiểu dạng ảnh để làm gì nhỉ?
Nguyên nhân là nhiều người khi nhân được file ảnh sẽ dễ dàng hơn là nhận file excel, không phải công nhân viên nào cũng có máy tính để mở ra, việc mở ảnh cũng đơn giản hơn, Nhưng mà thực sự đau đầu quá, mình từ sáng cũng thử hết cách rồi,
 
Upvote 0
Nguyên nhân là nhiều người khi nhân được file ảnh sẽ dễ dàng hơn là nhận file excel, không phải công nhân viên nào cũng có máy tính để mở ra, việc mở ảnh cũng đơn giản hơn, Nhưng mà thực sự đau đầu quá, mình từ sáng cũng thử hết cách rồi,
muốn hết đau đầu không? .... quay về bài #39
 
Upvote 0
Nguyên nhân là nhiều người khi nhân được file ảnh sẽ dễ dàng hơn là nhận file excel, không phải công nhân viên nào cũng có máy tính để mở ra, việc mở ảnh cũng đơn giản hơn, Nhưng mà thực sự đau đầu quá, mình từ sáng cũng thử hết cách rồi,
Không bạn ơi,Ý của mình là gửi cái nội dung đó như 1 phần nội dung của email
Chứ k phải đính kèm ảnh hay file (vì nhiều lúc mạng kém load nội dung email nhanh hơn là load 1 cái ảnh)
 
Upvote 0
Xin chào cả nhà, mình lên mạng và có hướng dẫn gửi mail tự động bằng excel thông qua outlook.
Phương pháp rất hay nhưng mình muốn mở rộng tính năng 1 chút nhưng chưa biết cách làm mong các anh em bớt chút thời gian chỉ giáo
Mình muốn nhấn vào nút gửi email thì trong emal gửi đi đính kèm 1 ảnh là phần mình đã tô vuông đó hoặc 1 sheet mới chỉ có dữ liệu phần mình đã đóng khung
Không biết có cao nhân nào làm được không ạ, giúp mình với
Bài toán cũng đơn giản mà. Thử đơn giản vầy đi. Nếu Ok thì tự edit lại nhé.
Mã:
Sub ExcelRangeToMailBody()
Range("A5:F17").CopyPicture
With CreateObject("Outlook.Application")
   With .CreateItem(0)
      .To = "A"
      .Subject = "B"
      .Display
   End With
   .ActiveInspector.WordEditor.Application.Selection.Paste
End With
End Sub
PS: File của bạn chẳng khoa học tí nào
 
Upvote 0

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

Back
Top Bottom