VBA Outlook中定长邮件内容

1. 定长内容编码

1-1. 在Outlook应用中按下Alt+F11,打开VBE编辑器,如下图:

1-2. 在ThisOutlookSession模块中添加如下代码:

vbscript 复制代码
Const TOOLBAR_NAME As String = "Daliy Report"

'-----------------------------------------
' 当Outlook启动时会自动运行此宏
'-----------------------------------------
Private Sub Application_Startup()
    ' 调用添加按钮的函数
    AddCustomButton
End Sub

'-----------------------------------------
' 当 Outlook 关闭时会自动运行此宏,用于清理
'-----------------------------------------
Private Sub Application_Quit()
    '调用移除按钮的函数
    RemoveCustomButton
End Sub

'-----------------------------------------
' 移除自定义按钮的函数
'-----------------------------------------
Sub RemoveCustomButton()
    On Error Resume Next
    '删除我们创建的工具栏
    Application.ActiveExplorer.CommandBars(TOOLBAR_NAME).Delete
    On Error GoTo 0
End Sub

'-----------------------------------------
' 添加自定义按钮的函数
'-----------------------------------------
Sub AddCustomButton()
    Dim cb As Office.CommandBar
    Dim btn As Office.CommandBarButton
    Dim customToolbarName As String

    '自定义的工具栏名称
    customToolbarName = TOOLBAR_NAME

    On Error Resume Next
    '先尝试删除旧的,防止重复添加
    Application.ActiveExplorer.CommandBars(customToolbarName).Delete
    On Error GoTo 0

    '在主窗口(Explorer)的 CommandBars 集合中添加一个新的工具栏
    Set cb = Application.ActiveExplorer.CommandBars.Add(Name:=customToolbarName, Position:=msoBarBottom, Temporary:=True)
    '在新的工具栏上添加一个按钮
    Set btn = cb.Controls.Add(Type:=msoControlButton)
    With btn
        '设置按钮上显示的文字
        .Caption = "業務開始"
        '设置按钮图标
        .FaceId = 351 '71
        '显示图标和文字
        .Style = msoButtonIconAndCaption
        '指定点击按钮时要运行的宏的名称
        .OnAction = "OnBench.DailyReport.StartWorkAction"
    End With
    Set btn = cb.Controls.Add(Type:=msoControlButton)
    With btn
        .Caption = "休憩開始"
        .FaceId = 352 '72
        .Style = msoButtonIconAndCaption
        .OnAction = "OnBench.DailyReport.StartBreakAction"
    End With
    Set btn = cb.Controls.Add(Type:=msoControlButton)
    With btn
        .Caption = "休憩終了"
        .FaceId = 341 '73
        .Style = msoButtonIconAndCaption
        .OnAction = "OnBench.DailyReport.EndBreakAction"
    End With
    Set btn = cb.Controls.Add(Type:=msoControlButton)
    With btn
        .Caption = "業務終了"
        .FaceId = 342 '74
        .Style = msoButtonIconAndCaption
        .OnAction = "OnBench.DailyReport.EndWorkAction"
    End With

    '使工具栏可见
    cb.Visible = True
    '释放对象变量
    Set btn = Nothing
    Set cb = Nothing
End Sub

1-3. 在DailyReport模块中添加如下代码:

vbscript 复制代码
Const MAIL_SALUTATION As String = "○○さん"                             '宛名
Const MAIL_GREETING As String = "お疲れ様です。○○○です。"               '挨拶
Const MAIL_SIGNOFF As String = "以上です、よろしくお願いいたします。"  '結び
Const MAIL_FONT_NAME As String = "Meiryo UI"
Const MAIL_FONT_SIZE As Integer = 10

'---------------------------------------
'①業務開始
'---------------------------------------
Public Sub StartWorkAction()
    Dim mail As Outlook.MailItem
    Dim mailBody As String
    
    mailBody = MAIL_SALUTATION & "<br><br>"
    mailBody = mailBody & MAIL_GREETING & "<br><br>"
    mailBody = mailBody & "業務開始" & "<br>"
    mailBody = mailBody & MAIL_SIGNOFF & "<br>"
    
    Set mail = Application.CreateItem(olMailItem)
    With mail
       .Subject = "【勤怠報告】○○○_" & Format(Now(), "MM/DD")
       .To = "abc@test.com"
       .HTMLBody = "<html lang='ja'><body>" & _
                   "<p style='font-family:" & MAIL_FONT_NAME & "; font-size:" & MAIL_FONT_SIZE & "pt;'>" & _
                   mailBody & _
                   "</p>" & _
                   "</body></html>"
       .Display
    End With
    
    Set mail = Nothing

End Sub

'---------------------------------------
'②休憩開始
'---------------------------------------
Public Sub StartBreakAction()
    Dim mail As Outlook.MailItem
    Dim mailBody As String
    
    mailBody = MAIL_SALUTATION & "<br><br>"
    mailBody = mailBody & MAIL_GREETING & "<br><br>"
    mailBody = mailBody & "休憩開始" & "<br><br>"
    mailBody = mailBody & MAIL_SIGNOFF & "<br>"
    
    Set mail = Application.CreateItem(olMailItem)
    With mail
       .Subject = "【勤怠報告】○○○_" & Format(Now(), "MM/DD")
       .To = "abc@test.com"
       .HTMLBody = "<html lang='ja'><body>" & _
                   "<p style='font-family:" & MAIL_FONT_NAME & "; font-size:" & MAIL_FONT_SIZE & "pt;'>" & _
                   mailBody & _
                   "</p>" & _
                   "</body></html>"
       .Display
    End With
    
    Set mail = Nothing

End Sub

'---------------------------------------
'③休憩終了
'---------------------------------------
Public Sub EndBreakAction()
    Dim mail As Outlook.MailItem
    Dim mailBody As String
    
    mailBody = MAIL_SALUTATION & "<br><br>"
    mailBody = mailBody & MAIL_GREETING & "<br><br>"
    mailBody = mailBody & "休憩終了" & "<br><br>"
    mailBody = mailBody & MAIL_SIGNOFF & "<br>"
    
    Set mail = Application.CreateItem(olMailItem)
    With mail
       .Subject = "【勤怠報告】○○○_" & Format(Now(), "MM/DD")
       .To = "abc@test.com"
       .HTMLBody = "<html lang='ja'><body>" & _
                   "<p style='font-family:" & MAIL_FONT_NAME & "; font-size:" & MAIL_FONT_SIZE & "pt;'>" & _
                   mailBody & _
                   "</p>" & _
                   "</body></html>"
       .Display
    End With
    
    Set mail = Nothing

End Sub

'---------------------------------------
'④業務終了
'---------------------------------------
Public Sub EndWorkAction()
    Dim mail As Outlook.MailItem
    Dim mailBody As String
    
    mailBody = MAIL_SALUTATION & "<br><br>"
    mailBody = mailBody & MAIL_GREETING & "<br><br>"
    mailBody = mailBody & "業務終了" & "<br>"
    mailBody = mailBody & MAIL_SIGNOFF & "<br>"
    
    Set mail = Application.CreateItem(olMailItem)
    With mail
       .Subject = "【勤怠報告】○○○_" & Format(Now(), "MM/DD")
       .To = "abc@test.com"
       .HTMLBody = "<html lang='ja'><body>" & _
                   "<p style='font-family:" & MAIL_FONT_NAME & "; font-size:" & MAIL_FONT_SIZE & "pt;'>" & _
                   mailBody & _
                   "</p>" & _
                   "</body></html>"
       .Display
    End With
    
    Set mail = Nothing

End Sub

2. 重新打开Outlook加载插件

相关推荐
Lilixxs3 天前
Excel VBA离线帮助文档下载和使用
excel·vba·帮助文档·ms help runtime·hxs
裤裤兔9 天前
利用VBA批处理word 文档,使用宏对docx文件内容进行批量替换
c#·word·.net··vba·office·宏操作
专注VB编程开发20年11 天前
Excel软件界面美化-WEBUI-webbrowser内核
css·excel·vba·webui
l***O52017 天前
Testing Outlook
outlook
std8602120 天前
微软 Win11 经典版 Outlook 曝 BUG,加速 SSD 损耗
microsoft·bug·outlook
Access开发易登软件20 天前
Access导出带图表的 HTML 报表:技术实现详解
数据库·后端·html·vba·导出·access
yivifu1 个月前
Word VBA中的Collapse方法详解
word·vba·collapse
专注VB编程开发20年1 个月前
JSA变成类似vba环境给第三方软件集成IDE功能,脚本功能
ide·microsoft·node.js·vba·wps·vb6·jsa
林月明1 个月前
【VBA】自动设置excel目标列的左邻列格式
开发语言·excel·vba·格式