ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求教邮件合并后 分页保存并重命名问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-8-27 18:12 | 显示全部楼层 |阅读模式
查了好多分页保存的宏 但是不知道怎么按照自己的要求重命名比如附件文档是邮件合并后形成的  我希望能以第一行的G100-1+公司名称作为分页保存的文件名
以第一页为例 最后的文件名为G100-1ABC,保存在当前文件夹,以此类推 第二页保存为G100-2DEF


求教各位大神 这个应该怎么写???


123.rar

22.22 KB, 下载次数: 61

TA的精华主题

TA的得分主题

发表于 2016-8-27 18:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
参考
Sub 分页保存为新文档()
    '分页保存,适用于WORD97及其以上版本
    Dim objShell As Object, objFolder As Object, strNameLenth As Integer
    Dim mySelection As Selection, myfolder As String, myArray() As String
    Dim ThisDoc As Document, myDoc As Document, strName As String, n As Integer
    Dim myRange As Range, PageString As String, pgOrientation As WdOrientation
    Dim sinLeft As Single, sinRight As Single, sinTop As Single, sinBottom As Single
    Dim ErrChar() As Variant, ochar As Variant, sinStart As Single, sinEnd As Single
    Const myMsgTitle As String = "ExcelHome_ShouRou"
    Dim vbYN As VbMsgBoxResult
    sinStart = Timer
    On Error GoTo errhandle    '设置错误处理
    '创建一个Shell.Application对象
    Set objShell = CreateObject("Shell.Application")
    '取得文件夹浏览器
    Set objFolder = objShell.BrowseForFolder(0, "请选择一个文件夹", 0, 0)
    If objFolder Is Nothing Then Exit Sub
    myfolder = objFolder.Self.Path & "\"
    Set objFolder = Nothing: Set objShell = Nothing
    Set ThisDoc = ActiveDocument    '定义一个Document对象,以利用本程序作为加载宏
    Set mySelection = ThisDoc.ActiveWindow.Selection
    '文件自动命名时必须规避的字符
    ErrChar = Array("\", "/", ":", "*", "?", """", "<", ">", "|")
    '一些特列字符
    For n = 0 To 31
        ReDim Preserve ErrChar(UBound(ErrChar) + 1)
        ErrChar(UBound(ErrChar)) = Chr(n)
    Next
    strNameLenth = Val(VBA.InputBox(Prompt:="请输入您需要设置的文件名长度,0或者取消将自动命名!", Title:=myMsgTitle, Default:=10))
    If strNameLenth > 255 Then strNameLenth = 0
    vbYN = MsgBox("是否需要处理页尾的分隔符(分页符/分节符)?它可能会影响文档结构.", vbYesNo + vbInformation + vbDefaultButton2, myMsgTitle)
    Application.ScreenUpdating = False    '关闭屏幕更新
    '在文档的每页中循环
    For n = 1 To mySelection.Information(wdNumberOfPagesInDocument)
        mySelection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Name:=n
        Set myRange = ThisDoc.Bookmarks("\PAGE").Range
        If vbYN = vbYes And VBA.Asc(myRange.Characters.Last.Text) = 12 Then _
           myRange.SetRange myRange.Start, myRange.End - 1
        '取得一个以段落标记为分隔符的一维数组
        myArray = VBA.Split(myRange.Text, Chr(13))
        '将所有文本合并为一个字符串
        PageString = VBA.Join(myArray, "")
        '取得文档中每节的页面设置
        With myRange.Sections(1).PageSetup
            sinLeft = .LeftMargin    '左页边距
            sinRight = .RightMargin    '右页边距
            sinTop = .TopMargin    '上边距
            sinBottom = .BottomMargin    '下边距
            pgOrientation = .Orientation    '纸张方向
        End With
        For Each ochar In ErrChar    '进行一系列替换,即删除无效字符
            PageString = VBA.Replace(PageString, ochar, "")
        Next
        If strNameLenth = 0 Then
            strName = ThisDoc.Name
            strName = VBA.Replace(LCase(strName), ".doc", "")
            strName = strName & "_" & n
        Else
            strName = VBA.Left(PageString, strNameLenth)    '取得文件名
            If strName = "" Then
                strName = ThisDoc.Name
                strName = VBA.Replace(LCase(strName), ".doc", "")
                strName = strName & "_" & n
            End If
        End If
        strName = strName & ".doc"
        myRange.Copy    '复制
        Set myDoc = Documents.Add(Visible:=True)    '新建一个隐藏的空白文档
        With myDoc
            With .Content
                .Paste    '粘贴
                .Paragraphs.Last.Range.Delete    '删除最后一个段落标记
                With .Find
                    .ClearFormatting
                    .Text = "^b"
                    .Replacement.ClearFormatting
                    .Replacement.Text = ""
                    .Execute Replace:=2
                End With
            End With
            With .PageSetup    '进行页面设置
                .Orientation = pgOrientation
                .LeftMargin = sinLeft
                .RightMargin = sinRight
                .TopMargin = sinTop
                .BottomMargin = sinBottom
            End With
            '如果有相同的文档,则自动命名
            If VBA.Dir(myfolder & strName, vbDirectory) <> "" Then strName = "Page_" & n & ".doc"
            .SaveAs myfolder & strName    '另存为
            .Close    '关闭文档
        End With
    Next
    ThisDoc.Characters(1).Copy    '变相清空剪贴板
    Application.ScreenUpdating = True    '恢复屏幕更新
    sinEnd = Timer    '取得代码运行结束的时间
    If MsgBox("分页保存结束,用时:" & sinEnd - sinStart & _
              "秒,是否打开指定文件夹查看分页保存后的文档情况?", vbYesNo, myMsgTitle) = vbYes Then _
       ThisDoc.FollowHyperlink myfolder
    Exit Sub
errhandle:
    MsgBox "错误号:" & Err.Number & vbLf & "出错原因:" & Err.Description, myMsgTitle
    Err.Clear
    Application.ScreenUpdating = True    '恢复屏幕更新
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-8-28 10:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
LMY123 发表于 2016-8-27 18:30
参考
Sub 分页保存为新文档()
    '分页保存,适用于WORD97及其以上版本

strName = VBA.Left(PageString, strNameLenth)    '取得文件名

但是这个要怎么改成第一行的文字+第二行第二列的单元格作为重命名啊??

而且用这个之后不知道为什么每个新保存的文档后面都会多一页空白页..不知道是为什么
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-13 19:45 , Processed in 0.019565 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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