ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: temp11111

[已解决] 將EXCEL內指定範圍的內容複製至郵件並發信給指定欄位的使用者

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-1 23:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 temp11111 于 2012-2-2 09:48 编辑

再請問老師 若要加上兩個功能
1.測試信.就是只發第一筆資料給自己以確認內容是否正確
2.發信前出現 "確認"或"取消"的對話框 該如何追加

第1點.是有想到旁門左道
先修改讓他只讀一行 不過改了之後完全不會動作了{:soso_e109:}

  1. For i = 3 To S2.[A4].End(xlUp).Row
复制代码


再把TO改成自己

  1. .To = "my@test.com   '聯絡人E-Mail
复制代码

不過這樣子就要將相同的語法複製兩份修改上會很麻煩{:soso_e101:}

第2點
還在再爬文

老師若是有空抽幫幫我吧
謝謝!


語法目前還在努力中..閱讀ing
慢慢補上來 註解有錯誤的話再請老師 幫我訂正
再次謝謝

    Set S1 = Sheets("問題") '設定S1 代表"問題"這個sheet
    Set S2 = Sheets("公務用") '設定S2 代表"公務用"這個sheet
    '-------------標題-------------------------------------
    j = 1
    For i = 1 To 19 '第一列到第19列
        If i <> 5 Then 'And i <> 16 And i <> 17 And i <> 18 Then
        '哪幾列不要列入
            j = j + 1
            Debug.Print S2.Cells(2, i)
            S1.Cells(j, 1) = S2.Cells(2, i)
        End If
    Next i
    '------------------------------------------------------
    For i = 3 To S2.[A65536].End(xlUp).Row '第三行到最後一行
        '內容
        j = 1
        With S2
            For k = 1 To 19 '第一列到第19列
                If k <> 5 Then 'And k <> 16 And k <> 17 And k <> 18 Then
                '哪幾列不要列入
                    j = j + 1
                    Debug.Print S2.Cells(i, k)
                    S1.Cells(j, 2) = S2.Cells(i, k)
                End If
            Next k
        End With
   
        Set rng = Nothing '還在查
        'Set rng = ActiveSheet.UsedRange
        'You can also use a sheet name
        Set rng = S1.Range("A2:B19") '問題sheet的A2到B19欄
        Set NewWB = Workbooks.Add(xlWBATWorksheet) '還在查

        rng.Copy '複製範圍?
        With NewWB.Sheets(1) '以下應該是全部貼上包然格式
            .Cells(1).PasteSpecial Paste:=8
            .Cells(1).PasteSpecial Paste:=xlPasteValues
            .Cells(1).PasteSpecial Paste:=xlPasteFormats
            .Cells(1).Select
            Application.CutCopyMode = False
        End With

        'Create a file name
        TempFilePath = Environ$("temp") & "\"
        TempFileName = "Your data of " & S1.Parent.Name _
                     & " " & Format(Now, "dd-mmm-yy h-mm-ss") '不懂為什麼又用到S1

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-2 09:37 | 显示全部楼层
自問自答一
參考:msgbox做为判断条件时的使用
在最前面加上即可發出前詢問

  1. Dim text, text1, text2 As String
  2. text1 = "您確定要發信給使用者嗎?"
  3. text2 = ""
  4. text = MsgBox(text1 & text2, vbOKCancel + vbInformation, "通知信寄發前確認")
  5. If text = vbCancel Then Exit Sub
复制代码


測試信的部分好像有點難度= ="

TA的精华主题

TA的得分主题

发表于 2012-2-2 12:09 | 显示全部楼层
本帖最后由 mineshine 于 2012-2-2 12:17 编辑
temp11111 发表于 2012-2-2 09:37
自問自答一
參考:msgbox做为判断条件时的使用
在最前面加上即可發出前詢問


你可以發副本或密件副本給自己
用display可以先看信件內容再send出去
如果不發出,就在outlook顯示提示訊息時按"取消"就可以不發,程式再往下繼續執行。
程式我做了修改,可以在信件尾加上簽名檔,
簽名檔位置、檔名你再自行修正。

將全部程式覆蓋


  1. '將工作表內容作為信件內文參考下面網址
  2. 'Mail worksheet in the body of the mail http://www.rondebruin.nl/mail/folder3/mail2.htm
  3. Sub Mail_Sheet_Outlook_Body()
  4. ' Don't forget to copy the function RangetoHTML in the module. 將內容轉成HTML
  5. ' Working in Office 2000-2007
  6.     Dim Rng As Range, Sh As Worksheet, NewSh As Worksheet, i&, j%, k%
  7.     Dim OutApp As Object, OutMail As Object, NewWB As Workbook
  8.     Dim SigString As String
  9.     Dim Signature As String
  10.     With Application
  11.         .EnableEvents = False   '關閉Excel觸發事件功能
  12.         .ScreenUpdating = False '關閉Excel螢幕更新功能
  13.     End With
  14.     'WinXP簽名檔位置
  15.     'C:\Documents and Settings\你的電腦名稱\Application Data\Microsoft\Signatures\簽名檔名稱.htm
  16.     SigString = "C:\Documents and Settings" & Environ("username") & _
  17.                 "\Application Data\Microsoft\Signatures\Mysing.htm"
  18.    
  19.     'SigString = "C:\Users" & Environ("username") & _
  20.      "\AppData\Roaming\Microsoft\Signatures\Mysig.htm"   '使用Vista 或 Win7 作業系統 簽名檔位置
  21.    
  22.     If Dir(SigString) <> "" Then
  23.         Signature = GetBoiler(SigString)    '有簽名檔
  24.     Else
  25.         Signature = ""  '無簽名檔
  26.     End If
  27.     On Error Resume Next
  28.    
  29.     Set Sh = Sheets("公務用")
  30.     For i = 3 To Sh.[A65536].End(xlUp).Row
  31.         Set NewWB = Workbooks.Add(xlWBATWorksheet)  '指定新增工作簿參數NewWB
  32.         Set NewSh = NewWB.Sheets(1)
  33.         j = 1
  34.         For k = 1 To 19
  35.             If k <> 5 Then 'And k <> 16 And k <> 17 And k <> 18 Then
  36.                 j = j + 1
  37.                 NewSh.Cells(j, 1) = Sh.Cells(2, k) 'A欄標題
  38.                 NewSh.Cells(j, 2) = Sh.Cells(i, k) 'B欄內容
  39.                 If j > 15 And j < 19 Then NewSh.Cells(j, 2) = Format(NewSh.Cells(j, 2), "yyyy/m/d") '儲存格日期格式
  40.             End If
  41.         Next k
  42.         Set Rng = Nothing
  43.         'Set rng = ActiveSheet.UsedRange
  44.         'You can also use a sheet name
  45.         Set Rng = NewSh.UsedRange
  46.         With Rng
  47.             .Borders.LineStyle = xlContinuous   '框線線型連續
  48.             .Borders.Weight = xlThin            '框線細
  49.             .Columns.AutoFit                    '自動調整欄寬
  50.             .Columns(2).HorizontalAlignment = xlCenter  'B欄文字置中
  51.         End With
  52.         'Create a file name
  53.         TempFilePath = Environ$("temp") & ""   '暫存檔路徑
  54.         TempFileName = "Your data of " & Sh.Cells(i, 4) _
  55.                      & " " & Format(Now, "dd-mmm-yy h-mm-ss")   '暫存檔檔名
  56.    
  57.         If Val(Application.Version) < 12 Then
  58.             'You use Excel 2000-2003
  59.             FileExtStr = ".xls": FileFormatNum = -4143
  60.         Else
  61.             'You use Excel 2007-2010
  62.             FileExtStr = ".xlsx": FileFormatNum = 51
  63.         End If
  64.    
  65.         'Save, Mail, Close and Delete the file
  66.         Set OutApp = CreateObject("Outlook.Application")
  67.         Set OutMail = OutApp.CreateItem(0)
  68.         With NewWB
  69.             .SaveAs TempFilePath & TempFileName _
  70.                   & FileExtStr, FileFormat:=FileFormatNum   '儲存暫存檔
  71.             On Error Resume Next
  72.             With OutMail
  73.                 .To = Sh.Cells(i, 11)   '聯絡人E-Mail
  74.                 .CC = "my@test.com"        '副本
  75.                 .BCC = ""       '密件副本
  76.                 .Subject = Sh.Cells(i, 4) & "進度"
  77.                 .Attachments.Add NewWB.FullName
  78.                 '.Body = "THi there"    '文字內容寫法
  79.                 .HTMLBody = "<Font Face=Times Roman Size=3.5>" & Sh.Cells(i, 6) & "您好:<P>" & _
  80.                 "附件是單位 " & Sh.Cells(i, 2) & " " & Sh.Cells(i, 4) & " 進度相關資料<BR>" & _
  81.                 RangetoHTML(Rng) & "<P>" & Signature   'HTML內容寫法+簽名檔
  82.                 .Display    '預覽
  83.                 .Send       '寄出
  84.             End With
  85.             On Error GoTo 0
  86.             .Close savechanges:=False
  87.         End With
  88.    
  89.         Set OutMail = Nothing
  90.         Set OutApp = Nothing
  91.         Kill TempFilePath & TempFileName & FileExtStr   '剛除暫存檔
  92.    
  93.     Next i
  94.     With Application
  95.         .EnableEvents = True    '開啟Excel觸發事件功能
  96.         .ScreenUpdating = True  '開啟Excel螢幕更新功能
  97.     End With
  98. End Sub
  99. Function RangetoHTML(Rng As Range)  '信件HTML內容型式轉換
  100. ' Changed by Ron de Bruin 28-Oct-2006
  101. ' Working in Office 2000-2007
  102.     Dim fso As Object
  103.     Dim ts As Object
  104.     Dim TempFile As String
  105.     Dim TempWB As Workbook

  106.     TempFile = Environ$("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"    '暫存檔

  107.     'Copy the range and create a new workbook to past the data in
  108.     Rng.Copy
  109.     Set TempWB = Workbooks.Add(1)
  110.     With TempWB.Sheets(1)
  111.         .Cells(1).PasteSpecial Paste:=8
  112.         .Cells(1).PasteSpecial xlPasteValues, , False, False
  113.         .Cells(1).PasteSpecial xlPasteFormats, , False, False
  114.         .Cells(1).Select
  115.         Application.CutCopyMode = False
  116.         On Error Resume Next
  117.         .DrawingObjects.Visible = True
  118.         .DrawingObjects.Delete
  119.         On Error GoTo 0
  120.     End With

  121.     'Publish the sheet to a htm file 將複製內容轉成HTML檔
  122.     With TempWB.PublishObjects.Add( _
  123.          SourceType:=xlSourceRange, _
  124.          Filename:=TempFile, _
  125.          Sheet:=TempWB.Sheets(1).Name, _
  126.          Source:=TempWB.Sheets(1).UsedRange.Address, _
  127.          HtmlType:=xlHtmlStatic)
  128.         .Publish (True)
  129.     End With

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

  137.     'Close TempWB
  138.     TempWB.Close savechanges:=False

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

  141.     Set ts = Nothing
  142.     Set fso = Nothing
  143.     Set TempWB = Nothing
  144. End Function
  145. Function GetBoiler(ByVal sFile As String) As String '簽名檔
  146. 'Dick Kusleika
  147.     Dim fso As Object
  148.     Dim ts As Object
  149.     Set fso = CreateObject("Scripting.FileSystemObject")
  150.     Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2)
  151.     GetBoiler = ts.readall
  152.     ts.Close
  153. End Function
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-2 13:39 | 显示全部楼层
mineshine 发表于 2012-2-2 12:09
你可以發副本或密件副本給自己
用display可以先看信件內容再send出去
如果不發出,就在outlook顯示提 ...

老師謝謝
感謝您 想得如此週到!
連簽名檔都附上了

測試信的方面就先不用了 反正好少用到
自己複製一份將MAIL改成自己其他通通刪掉就可了

再次謝謝您 特地抽空幫忙

TA的精华主题

TA的得分主题

发表于 2012-2-3 00:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
这个应该学      

TA的精华主题

TA的得分主题

发表于 2016-11-24 16:38 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-7-12 17:55 | 显示全部楼层
mineshine 发表于 2012-2-2 12:09
你可以發副本或密件副本給自己
用display可以先看信件內容再send出去
如果不發出,就在outlook顯示提 ...

大师,如果签名是图片怎么办啊

TA的精华主题

TA的得分主题

发表于 2019-9-13 11:43 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-18 14:56 , Processed in 0.041880 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表