ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

vba怎样批量为多个word文档用文件名作为页眉文字

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-8-3 09:10 | 显示全部楼层 |阅读模式
本帖最后由 ynlxyzr00 于 2020-8-3 09:12 编辑

vba怎样批量为多个word文档用文件名作为页眉文字

如:245.doc文件名设为页眉文字:245
       246.doc文件名设为页眉文字:246
       247.doc文件名设为页眉文字:247

       248.doc文件名设为页眉文字:248

       249.doc文件名设为页眉文字:249

       250.doc文件名设为页眉文字:250

       251.doc文件名设为页眉文字:251

       252.doc文件名设为页眉文字:252
......................等等

         用VBA代码处理,请大家帮忙处理一下谢谢
















QQ图片20200803085126.png

文件.rar

471.9 KB, 下载次数: 25

TA的精华主题

TA的得分主题

发表于 2020-8-3 09:57 | 显示全部楼层
本帖最后由 cuanju 于 2020-8-3 14:59 编辑

Option Explicit
Sub d7()
Dim oD As Document
Dim s As String
Dim oItem As Variant
Rem 此代码遍历多个word文件,不是遍历子文件夹
Rem 代码会弹出一个对话框,需要事先手工选择所需的一个或多个word文件,然后代码会批量给这些文件添加页眉
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    With Application.FileDialog(msoFileDialogFilePicker)
        .Filters.Clear
        .Filters.Add "Word Files", "*.do*"
        If .Show = -1 Then
            For Each oItem In .SelectedItems
            Set oD = Documents.Open(oItem)
                With oD
                    '此处放置代码内容
                    s = Left(.Name, InStrRev(.Name, ".") - 1)
                    .Sections(1).Headers(wdHeaderFooterPrimary).Range = s
                    .Save
                    .Close
                End With
            Next '继续下一个文件
        Else
            Exit Sub
        End If
    End With
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    MsgBox "操作完毕!"
End Sub



评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-8-3 10:14 | 显示全部楼层
cuanju 发表于 2020-8-3 09:57
Sub d1()
Rem 选择所需的word文件添加页眉
    Application.ScreenUpdating = False

谢谢你,非常感谢!!!!!!!!!!

TA的精华主题

TA的得分主题

发表于 2020-8-3 10:17 | 显示全部楼层
cuanju 发表于 2020-8-3 09:57
Sub d1()
Rem 选择所需的word文件添加页眉
    Application.ScreenUpdating = False

朋友
如何批量操作

TA的精华主题

TA的得分主题

发表于 2020-8-3 12:26 | 显示全部楼层
cuanju 老师:太厉害了!——但你 2 楼代码,未声明变量,我试了半天,也不知道是啥,请问:
oItem 应该声明为哪个变量?(object/document都出错),s 是 $ 我知道。最后我灵机一动,声明为变体,就是只声明,不写 as ,结果运行结果正确!——另外,这样是很简单的处理文件夹中的文件,但此宏,是不是不能处理子文件夹中的文件?

TA的精华主题

TA的得分主题

发表于 2020-8-3 12:51 | 显示全部楼层
本帖最后由 cuanju 于 2020-8-3 15:14 编辑
413191246se 发表于 2020-8-3 12:26
cuanju 老师:太厉害了!——但你 2 楼代码,未声明变量,我试了半天,也不知道是啥,请问:
oItem 应该声 ...

俺不爱声明变量,所写代码较为随意^_^追求只要能达到效果就行,(第一版代码修改后,已声明变量,并加上Option Explicit,太累了,但达到了一种更加完善的代码)
如果要遍历子文件夹,难度加大很多,可使用如下代码。

==================================
Option Explicit
Sub dm8()
    Dim strFileFilter As String
    Dim strFileName As String, strType As String
    Dim startFolder As String
    Dim folderList As Object, fileList As Object
    Dim FolderName, arr1
    Dim i As Integer
    Dim oD As Document
    Dim s As String

    Rem 如果遍历子文件夹
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    strFileFilter = "do*"        '在此修改文件类型,注意不要有.,可以使用通配符
    Set folderList = CreateObject("scripting.dictionary")
    Set fileList = CreateObject("scripting.dictionary")
    'On Error Resume Next
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show Then startFolder = .SelectedItems(1) & "\" Else Exit Sub
    End With
    folderList.Add startFolder, ""
    Do While folderList.Count > 0
        For Each FolderName In folderList.keys
            strFileName = Dir(FolderName, vbDirectory)
            Do While strFileName <> ""
                If strFileName <> ".." And strFileName <> "." Then
                    If GetAttr(FolderName & strFileName) And vbDirectory Then
                        folderList.Add FolderName & strFileName & "\", ""
                    Else
                        i = InStrRev(strFileName, ".")
                        strType = Right(strFileName, Len(strFileName) - i)
                        If strType Like strFileFilter Then
                            fileList.Add FolderName & strFileName, ""
                        End If
                    End If
                End If
                strFileName = Dir
            Loop
            folderList.Remove (FolderName)
        Next
    Loop
    For Each arr1 In fileList.keys
        Set oD = Documents.Open(arr1)  '依次打开各个文件
        s = Left(ActiveDocument.Name, InStrRev(ActiveDocument.Name, ".") - 1)
        ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range = s
        oD.Close True
    Next
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    MsgBox "操作完毕!"
End Sub


TA的精华主题

TA的得分主题

发表于 2020-8-3 12:59 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
这习惯要改

TA的精华主题

TA的得分主题

发表于 2020-8-3 14:52 | 显示全部楼层
本帖最后由 cuanju 于 2020-8-3 15:17 编辑

好的  已用Option Explicit 规范代码,并加上Dim

TA的精华主题

TA的得分主题

发表于 2020-8-3 19:06 | 显示全部楼层
谢谢 cuanju 老师!辛苦了!代码已经保存,有空时测试一下。以前,杜老师也写过一个循环遍历文件夹代码,在我的《Word2007-2019自动排版宏(通用)(金秋版)2020-7-19》,宏名叫《FSO_循环遍历文件夹》。
cuanju 老师 虽然来得较晚,但啥都会啊!我深表敬佩!多谢!(我只会一点段落格式设置。)

TA的精华主题

TA的得分主题

发表于 2020-8-3 20:23 | 显示全部楼层
Sub xiaohualu()
Dim n1 As String, n2 As String, pt As String, mydoc As Document
n1 = ThisDocument.Name
pt = ThisDocument.Path & "\"
n2 = Dir(pt & "*.doc")
Do While n2 <> ""
    If n2 <> n1 Then
        Set mydoc = Documents.Open(pt & n2)
        mydoc.Sections(1).Headers(1).Range = n2
        mydoc.Close -1
    End If
    n2 = Dir
Loop
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-26 14:37 , Processed in 0.036852 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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