ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4052|回复: 7

[求助] 请各位高手帮帮我,不胜感激!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-3-12 13:45 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我看见有人发了个检查邮件是否添加附件的插件,我觉的太棒了,
由于我门单位邮件群发的时候对附件的大小有限制,附件过大会造成局域网堵塞,
我希望各位高手可以帮我写一个邮件附件大小超出提醒的插件,

就在以下编码中完善就好了,我会万分感激的!
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim lngres As Long
'检查邮件是否添加附件
If InStr(1, Item.Body, "附件") <> 0 Then
If Item.Attachments.Count = 0 Then
Application.Explorers(1).Activate
lngres = MsgBox("邮件内容中包含“附件”,但是没有发现附件!" & Chr(10) & "仍然发送?", _
vbYesNo + vbDefaultButton2 + vbQuestion, "提示")

If lngres = vbNo Then
Cancel = True
Item.Display
Exit Sub
End If


End If
End If

'检查是否写主题
If Item.Subject = "" Then
Application.Explorers(1).Activate
lngres = MsgBox("邮件还没有写主题呢!" & Chr(10) & "仍然发送?", _
vbYesNo + vbDefaultButton2 + vbQuestion, "提示")
If lngres = vbNo Then
Cancel = True
Item.Display
Exit Sub
End If
End If
End Sub

TA的精华主题

TA的得分主题

发表于 2009-3-12 23:42 | 显示全部楼层
大概改了一下,邮件超过50K就会提示。自己根据需要修改大小。

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim lngres As Long
'检查邮件是否添加附件

If InStr(1, Item.Body, "附件") <> 0 Then
    If Item.Attachments.Count = 0 Then
        
        Application.Explorers(1).Activate
        lngres = MsgBox("邮件内容中包含“附件”,但是没有发现附件!" & Chr(10) & "仍然发送?", _
        vbYesNo + vbDefaultButton2 + vbQuestion, "提示")
   
        If lngres = vbNo Then
            Cancel = True
            Item.Display
            Exit Sub
        End If
        
        Item.Save '必须先保存邮件,才能检测到邮件的大小。
        
       If Item.Size > 51200 Then '51200 byte 除以1024 = 50K
            Application.Explorers(1).Activate
            lngres = MsgBox("邮件大于50K!" & Chr(10) & "仍然发送?", _
            vbYesNo + vbDefaultButton2 + vbQuestion, "提示")
                If lngres = vbNo Then
                    Cancel = True
                    Item.Display
                    Exit Sub
                End If
        End If
    End If
   
End If

'检查是否写主题
If Item.Subject = "" Then
    Application.Explorers(1).Activate
    lngres = MsgBox("邮件还没有写主题呢!" & Chr(10) & "仍然发送?", _
    vbYesNo + vbDefaultButton2 + vbQuestion, "提示")

    If lngres = vbNo Then
    Cancel = True
    Item.Display
    Exit Sub
    End If

End If
End Sub

[ 本帖最后由 roof 于 2009-3-12 23:43 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-3-13 09:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 roof 于 2009-3-12 23:42 发表
大概改了一下,邮件超过50K就会提示。自己根据需要修改大小。

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim lngres As Long
'检查邮件是否添加附件

If InStr(1, Item.Bo ...

谢谢你!
不过好象不行,我试发了个2MB,没提示就发了,而且是保存了后发的

TA的精华主题

TA的得分主题

发表于 2009-3-13 10:34 | 显示全部楼层

回复 3楼 dmnzhuch 的帖子

大概改了一下,邮件超过50K就会提示。自己根据需要修改大小。

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim lngres As Long
'检查邮件是否添加附件

If InStr(1, Item.Body, "附件") <> 0 Then
    If Item.Attachments.Count = 0 Then
        
        Application.Explorers(1).Activate
        lngres = MsgBox("邮件内容中包含“附件”,但是没有发现附件!" & Chr(10) & "仍然发送?", _
        vbYesNo + vbDefaultButton2 + vbQuestion, "提示")
   
        If lngres = vbNo Then
            Cancel = True
            Item.Display
            Exit Sub
        End If
        
    End If
   
End If

'检查是否写主题
If Item.Subject = "" Then
    Application.Explorers(1).Activate
    lngres = MsgBox("邮件还没有写主题呢!" & Chr(10) & "仍然发送?", _
    vbYesNo + vbDefaultButton2 + vbQuestion, "提示")

    If lngres = vbNo Then
    Cancel = True
    Item.Display
    Exit Sub
    End If

End If

Item.Save '必须先保存邮件,才能检测到邮件的大小。
        
       If Item.Size > 51200 Then '51200 byte 除以1024 = 50K
            Application.Explorers(1).Activate
            lngres = MsgBox("邮件大于50K!" & Chr(10) & "仍然发送?", _
            vbYesNo + vbDefaultButton2 + vbQuestion, "提示")
                If lngres = vbNo Then
                    Cancel = True
                    Item.Display
                    Exit Sub
                End If
        End If
End Sub

[ 本帖最后由 roof 于 2009-3-13 10:50 编辑 ]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-3-13 11:26 | 显示全部楼层
原帖由 roof 于 2009-3-13 10:34 发表
大概改了一下,邮件超过50K就会提示。自己根据需要修改大小。

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim lngres As Long
'检查邮件是否添加附件

If InStr(1, Item.Bo ...

可以用了,非常感谢你的帮助!!

TA的精华主题

TA的得分主题

发表于 2009-3-17 10:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

回复 5楼 dmnzhuch 的帖子

忽然想起,如果邮件比较大的话(超过1兆?),可以考虑用mailitem的DeferredDeliveryTime属性把发件时间推迟到凌晨非繁忙时段。未经测试,请在单位用outlook的朋友测试一下。我们单位用的是lotus note,有类似功能,但是不知道是否是在服务器端运行代码实现的。

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim lngres As Long
'检查邮件是否添加附件

If InStr(1, Item.Body, "附件") <> 0 Then
    If Item.Attachments.Count = 0 Then
        
        Application.Explorers(1).Activate
        lngres = MsgBox("邮件内容中包含“附件”,但是没有发现附件!" & Chr(10) & "仍然发送?", _
        vbYesNo + vbDefaultButton2 + vbQuestion, "提示")
   
        If lngres = vbNo Then
            Cancel = True
            Item.Display
            Exit Sub
        End If
        
    End If
   
End If

'检查是否写主题
If Item.Subject = "" Then
    Application.Explorers(1).Activate
    lngres = MsgBox("邮件还没有写主题呢!" & Chr(10) & "仍然发送?", _
    vbYesNo + vbDefaultButton2 + vbQuestion, "提示")

    If lngres = vbNo Then
    Cancel = True
    Item.Display
    Exit Sub
    End If

End If

Item.Save '必须先保存邮件,才能检测到邮件的大小。
        
       If Item.Size > 1048576 Then '1兆=1024*1024=1048576byte
            Application.Explorers(1).Activate
            lngres = MsgBox("邮件大于1兆!" & Chr(10) & "单击<是>把发送时间将安排在明天凌晨1点,单击<否>返回修改邮件。", _
            vbYesNo + vbDefaultButton2 + vbQuestion, "提示")
                If lngres = vbNo Then
                    Cancel = True
                    Item.Display
                    Exit Sub
                Else
                Item.DeferredDeliveryTime = DateAdd("h",1, Date +1) '将发送时间定为次日凌晨1点,但愿你没有凌晨1点钟发大邮件的习惯,否则邮件要等20多个小时后才会发出。
                End If
        End If
End Sub

[ 本帖最后由 roof 于 2009-3-17 10:45 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-3-25 23:24 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-1-18 14:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
不错,正好需要赶快下载下来!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-22 19:40 , Processed in 0.031652 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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