ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 急求好心人帮忙修改一个VBA, (现在的运行不了)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-5-13 06:12 | 显示全部楼层 |阅读模式
本帖最后由 dhsDAS 于 2023-5-15 00:05 编辑

我有一个VBA想实现自定义把一个excel不同tabs以附件形式发送出去
比如一个excel有10个标签页:1, C1000, C2000, C3000, C4000, C5000, C6000, C7000, C8000, C9000
1.        我可以自定义不同标签页和送给谁
           "C1000, C2000", "John.Smith1@abccbacbacba.com"
           "C3000, C4000, C5000", "John.Smith2@abccbacbacba.com"
           "C6000", "John.Smith3@abccbacbacba.com"
           "C7000, C8000, C9000", "John.Smith4@abccbacbacba.com"
2.        我运行以后,
A.        标签页C1000和C2000会从原excel分离出来, 合并成一个单独excel,文件名是John.Smith1, 作为附件发送给John.Smith1@abccbacbacba.com
B.        标签页C300,C4000和C5000会从原excel分离出来, 合并成一个单独excel,文件名是John.Smith3, 作为附件发送给John.Smith1@abccbacbacba.com
C.        标签页C6000从原excel分离出来, 成一个单独excel,文件名是John.Smith3, 作为附件发送给John.Smith3@abccbacbacba.com
D.        标签页C700,C8000和C9000会从原excel分离出来, 合并成一个单独excel,文件名是John.Smith4, 作为附件发送给John.Smith4@abccbacbacba.com
E.        VBA 不处理标签页“1”

我上传了一个附件, 麻烦您帮我修改一下,(现在VBA运行停在 “"outMail.Attachments.Add attachmentPath"”)
----------------------------------

Book1.zip

20.05 KB, 下载次数: 9

TA的精华主题

TA的得分主题

发表于 2023-5-13 12:17 | 显示全部楼层
难度不大,没有附件不好处理,一下仅供参考:

Sub SendEmail()
    '定义变量
    Dim MySheet As Worksheet
    Dim MyRange As Range
    Dim EmailAddress As String
    Dim FileName As String
   
    '设置参数
    Set MySheet = ThisWorkbook.Sheets("Sheet1") '请替换为您的工作表名称
    EmailAddress = "john.smith@abccbacbacba.com" '请替换为您的电子邮件地址
    FileName = "John.Smith" & ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row & ".xlsx" '请替换为您要发送的文件名
   
    '获取标签页范围
    Set MyRange = MySheet.Range("C1:C1000") '请替换为您的标签页范围,例如C1:C1000
   
    '分离每个标签页并保存为单独的Excel文件
    Dim i As Long
    For i = MyRange.Rows.Count To 1 Step -1
        If MyRange.Cells(i, "A").Value <> "" Then
            With Application.FileDialog(msoFileDialogFolderPicker)
                .Title = "选择要保存的工作簿"
                .Show
                If .SelectedItems.Count > 0 Then
                    With Workbooks.Open(.SelectedItems(1))
                        MySheet.Copy After:=Workbooks(.SelectedItems(1)).Sheets(1)
                        .SaveAs Filename:=FileName, FileFormat:=xlOpenXMLWorkbook
                        ActiveSheet.Delete
                        ActiveSheet.Name = "Sheet1"
                        .Close SaveChanges:=False
                    End With
                End If
            End With
        End If
    Next i
   
    '创建邮件对象并设置收件人、主题和正文
    Dim OutApp As Object
    Set OutApp = CreateObject("Outlook.Application")
    Dim OutMail As Object
    Set OutMail = OutApp.CreateItem(0)
    OutMail.To = EmailAddress '请替换为您的电子邮件地址
    OutMail.Subject = "Excel工作表分离为附件" '请替换为您的邮件主题
    MsgBox "附件已发送。",vbInformation,"提示" '显示发送成功的消息框
   
    '删除临时工作表并释放内存
    MySheet.Delete False '删除临时工作表,但保留工作簿中的所有数据和格式
End Sub


TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-13 21:11 | 显示全部楼层
非常感谢你的帮助。

但是这个好像不能自定义把几个标签页合成一个文件发出去? 比如我想自定义: 两个标签页C1000, C2000 合成一个文件发给A, 三个标签页 C3000, C4000, C5000 合成一个文件发给B

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-13 21:12 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
约定的童话 发表于 2023-5-13 12:17
难度不大,没有附件不好处理,一下仅供参考:

Sub SendEmail()


非常感谢你的帮助。

但是这个好像不能自定义把几个标签页合成一个文件发出去? 比如我想自定义: 两个标签页C1000, C2000 合成一个文件发给A, 三个标签页 C3000, C4000, C5000 合成一个文件发给B

TA的精华主题

TA的得分主题

发表于 2023-5-13 22:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我用VBA写过一个完全一样的功能,自动发送邮件这个问题不大。
难点1是对邮件中的多个邮件地址进行有效的拆分---实现了群发多人邮件---搞定了;
难点2,你指的标签页应该是要指定特定的几个worksheet 作为邮件附件进行发送;通过特定单元格对应特定的worksheet进行判断---搞定了
建议你上传附件。可以帮您尝试修改下

TA的精华主题

TA的得分主题

发表于 2023-5-14 02:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
用chatGPT写了一段代码,详见附件,看是否能满足需求。

合并表单并发送邮件.rar

16.62 KB, 下载次数: 6

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-14 05:30 | 显示全部楼层
danielchen1225 发表于 2023-5-13 22:29
我用VBA写过一个完全一样的功能,自动发送邮件这个问题不大。
难点1是对邮件中的多个邮件地址进行有效的拆 ...

我上传了那个excel到主题帖, 谢谢大家帮我看看。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-15 00:04 | 显示全部楼层
wfywc81 发表于 2023-5-14 02:01
用chatGPT写了一段代码,详见附件,看是否能满足需求。

谢谢。 这个似乎是不能发送邮件, chatGPT也没有设置哪几个标签页发送给谁

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-17 07:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
哪位帮忙看看吧, 谢谢了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-23 22:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
哪位帮忙看看吧, 谢谢了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 07:42 , Processed in 0.035352 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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