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加载插件

相关推荐
小妖66616 小时前
excel 怎么在单元格内容自动加上一段文字不能用公式
excel·vba
VBA63372 天前
VBA之Word应用第五章第五节 Range对象的属性(四)
vba
VBA63372 天前
VBA信息获取与处理专题七第一节 网络通信基础
vba
yivifu3 天前
怎样将Word文档中脚注引用后面的空格轻松删除
word·vba
VBA63374 天前
VBA之Excel应用第五章第四节 变量的生命周期
vba
VBA63379 天前
VBA中类的解读及应用第三十五讲 类对象的生死轮回----“二师兄”的成长历程之七
vba
SunnyDays10119 天前
使用 C# 添加、修改和删除 Excel VBA 宏 (无需 Microsoft Office Interop)
c#·excel··vba
VBA633711 天前
VBA 64位API声明语句第021讲
vba
YJlio12 天前
OpenClaw v2026.5.26-beta.1 / beta.2 预发布解读:Gateway 加速、transcript 路径统一、多通道修复、语音增强与安装更新链路加固
人工智能·windows·python·ui·缓存·gateway·outlook
VBA633714 天前
VBA数据库解决方案第三十一讲 DELETE+ADDNEW实现类似于UPDATA功能
vba