ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 路人,甲。

[求助] 求助大神--根据excel表格内容和word模板,填充生成学员手册

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-4-3 22:25 来自手机 | 显示全部楼层
·遁去的一· 发表于 2024-4-3 22:19
大佬是来打广告的吧,文件用不了

我能用得了,你用不了就不知道什么回事了,我发这种文件也不少了,只听说过不懂用的,没听说过用不了的。

TA的精华主题

TA的得分主题

发表于 2024-4-6 10:34 | 显示全部楼层
Sub 生成word()
Application.ScreenUpdating = False
Dim ar As Variant
Dim d As Object, dc As Object
Set d = CreateObject("scripting.dictionary")
Set dc = CreateObject("scripting.dictionary")
Dim wdWORD, wdD
Set wdWORD = CreateObject("Word.Application") '定义- -个Word对象变量
wdWORD.Visible = True
With Sheets("联络员、教室、餐厅安排")
    rs = .Cells(Rows.Count, 1).End(xlUp).Row
    If rs < 2 Then MsgBox "联络员、教室、餐厅安排为空!": End
    brr = .Range("a1:f" & rs)
End With
For i = 2 To UBound(brr)
    If brr(i, 1) <> "" Then
        dc(brr(i, 1)) = i
    End If
Next i

With Sheets("分组")
    r = .Cells(Rows.Count, 1).End(xlUp).Row
    If r < 2 Then MsgBox "分组为空!": End
    ar = .Range("a1:f" & r)
End With
For i = 2 To UBound(ar)
    If ar(i, 2) <> "" Then
        If d(ar(i, 2)) = "" Then
            d(ar(i, 2)) = i
        Else
            d(ar(i, 2)) = d(ar(i, 2)) & "|" & i
        End If
    End If
Next i
wdWORD.Documents.Add ''新建一个word文档
For Each k In d.keys
    tt = tt + 1
    n = 0
    rr = Split(d(k), "|")
    ReDim br(1 To UBound(rr) + 1, 1 To 4)
    For i = 0 To UBound(rr)
        xh = rr(i)
        n = n + 1
        For j = 3 To 6
            br(n, j - 2) = ar(xh, j)
        Next j
    Next i
   
    With wdWORD.Selection
        .Font.Size = 16 '''设置字号
        .ParagraphFormat.Alignment = 0 'wdAlignParagraphCenter '''居中显示
        .Font.Bold = True ''字型加粗
        If ww = 1 Then
            .HomeKey unit:=6 '光标置于文件首
            .TypeText Text:="                 第" & tt & "组(" & n & "人)"
        Else
            .TypeParagraph '''光标下移一行
            .endkey unit:=6 '''光标定位文件末尾
            .TypeText Text:="                 第" & tt & "组(" & n & "人)" ''"初二年级
        End If
    End With
    With wdWORD
        .Selection.TypeParagraph '''光标下移一行
        .ActiveDocument.Tables.Add Range:=.Selection.Range, NumRows:=n + 1, NumColumns:=4 '插入n + 1x4表格
    End With '''新建一个word表格
    Set wdBG = wdWORD.ActiveDocument.Tables(tt) '创建表格对象
    With wdBG '表格写入文本
        If .Style <> "网格型" Then
            .Style = "网格型"
        End If
        .Cell(1, 1) = "姓名"
        .Cell(1, 2) = "工作单位及职务"
        .Cell(1, 3) = "联系方式"
       .Cell(1, 4) = "房间号"
        With .Range '表格
            .Font.Bold = True字型加粗
            .Font.Size = 12 '字号
            .Font.Name = "宋体" '字体
            .ParagraphFormat.Alignment = 1 '"'0左对齐1居中
        End With
        For i = 1 To n
            For j = 1 To 4
                .Cell(i + 1, j).Range.Text = br(i, j) ''wdWORD.ActiveDocument.Tables(tt)
            Next j
        Next i
    End With
    xh = dc(k)
    zf = brr(xh, 2) & "  " & brr(xh, 3) & "  " & brr(xh, 4)
    With wdWORD.Selection
        .ParagraphFormat.Alignment = 0 ' wdAlignParagraphLeft
        .endkey unit:=6 '''光标定位文件末尾
        .TypeText Text:="联络员:" & zf
        .TypeParagraph '''光标下移一行
        .endkey unit:=6 '''光标定位文件末尾
        .TypeText Text:="分组学习地点:" & brr(xh, 5)
        .TypeParagraph '''光标下移一行
        .endkey unit:=6 '''光标定位文件末尾
        .TypeText Text:="就餐地点:" & brr(xh, 6)
    End With
Next k
wdWORD.ActiveDocument.SaveAs Filename:=ThisWorkbook.Path & "\分组名单.docx"
wdWORD.Quit ''关闭新建文档窗口
Set dkDOC = Nothing '释放存储空间
Set wdWORD = Nothing ''释放存储空间
Application.ScreenUpdating = True ''关闭屏幕刷新
MsgBox "ok!"
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-6 10:36 | 显示全部楼层
读书班报名(分组名单).rar (28.2 KB, 下载次数: 18)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-6 10:37 | 显示全部楼层
操作word的代码太繁琐,耗时耗力,目前的结果可能还存在一些不完美的地方,仅供参考,实在不行,可以加v沟通

TA的精华主题

TA的得分主题

发表于 2024-4-6 11:54 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-4-6 14:04 | 显示全部楼层
一个公式就解决了,为什么就偏偏执着于VBA?
不过真的不知道召集人在哪里,给你留着,保护密码123

读书班报名(分组名单).rar (21.62 KB, 下载次数: 8)

1712383471715.jpg

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-6 19:41 | 显示全部楼层

Option Explicit
Sub TEST()
    Dim dic(1) As New Dictionary, ar, br, cr, i&, j&, n&, vKey
    Dim wdApp As Word.Application, wdDoc As Word.Document, strFileName$, strPath$
   
   
    strPath = ThisWorkbook.Path & "\"
    strFileName = strPath & "学员手册(模板).docx"
    If Dir(strFileName) = "" Then MsgBox "指定的文件不存在,请检查!", vbExclamation: Exit Sub
   
    Application.ScreenUpdating = False
   
    With Sheets(2).[A1].CurrentRegion
        ar = .Value
        br = .Columns("B:D").Value
        For i = 2 To UBound(ar)
            dic(0)(ar(i, 1)) = Array(Join(Application.Index(br, i)), ar(i, 5), ar(i, 6))
        Next i
    End With
   
    ar = Sheets(1).[A1].CurrentRegion.Value
    For i = 2 To UBound(ar)
        dic(1)(ar(i, 2)) = dic(1)(ar(i, 2)) & " " & i
    Next i
    For Each vKey In dic(1).Keys
        cr = Split(dic(1)(vKey))
        ReDim br(1 To UBound(cr), 1 To 4)
        For i = 1 To UBound(cr)
            For j = 1 To UBound(br, 2)
                br(i, j) = ar(cr(i), j + 2)
            Next j
        Next i
        dic(1)(vKey) = br
    Next
   
    On Error Resume Next
    Set wdApp = GetObject(, "Word.Application")
    If Err <> 0 Then
        Set wdApp = New Word.Application
        'wdApp.Visible = True
    End If
   
    br = Array("第x组(x人)", "联络员:", "分组学习地点:", "就餐地点:")
    With wdApp
        Set wdDoc = .Documents.Add
        For Each vKey In dic(1).Keys
            n = n + 1
            cr = dic(1)(vKey)
            With .Documents.Open(strFileName)
                With .Content.Find
                    .Text = br(0)
                    .Forward = True
                    .Execute
                    If .Found = True Then
                        .Parent.Select
                        With wdApp.Selection
                            .Range.Text = "第" & vKey & "组(" & UBound(cr) & "人)"
                            '.ParagraphFormat.Alignment = wdAlignParagraphCenter
                        End With
                    End If
                End With
               
                For i = 1 To UBound(br)
                    With .Content.Find
                        .Text = br(i)
                        .Forward = True
                        .Execute
                        If .Found = True Then
                            .Parent.Select
                            With wdApp.Selection
                                .EndKey unit:=wdLine, Extend:=wdExtend
                                If i = UBound(br) Then
                                    .Range.Text = br(i) & dic(0)(vKey)(i - 1)
                                Else
                                    .Range.Text = br(i) & dic(0)(vKey)(i - 1) & vbCr
                                End If
                                '.ParagraphFormat.Alignment = wdAlignParagraphLeft
                            End With
                        End If
                    End With
                Next i
                With .Tables(1)
                    For i = 1 To UBound(cr) - 1
                        .Rows.Add
                    Next i
                    For i = 1 To UBound(cr)
                        For j = 1 To UBound(cr, 2)
                            .Cell(i + 1, j).Range.Text = cr(i, j)
                        Next j
                    Next i
                End With
                .Content.Copy
                .Close False
            End With
            With .Selection
                If n = 1 Then
                    .EndKey unit:=wdLine, Extend:=wdExtend
                Else
                    .InsertBreak 7
                    .EndKey unit:=wdLine, Extend:=wdExtend
                End If
                .Paste
            End With
        Next
        With wdDoc
            .SaveAs strPath & "分组名单"
            .Close
        End With
    End With
   
    If Err <> 0 Then wdApp.Quit
    Set wdApp = Nothing
    Application.ScreenUpdating = True
    Beep
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-6 19:44 | 显示全部楼层
请参考附件。。。

读书班手册.rar

58.16 KB, 下载次数: 21

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-24 11:59 | 显示全部楼层
xsy我可以很好 发表于 2024-4-6 14:04
一个公式就解决了,为什么就偏偏执着于VBA?
不过真的不知道召集人在哪里,给你留着,保护密码123

感谢大神出手相助,确实是可以的,但是因为要做手册,不想一个个粘贴复制。没有最懒只有更懒啊。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-24 12:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
3190496160 发表于 2024-4-6 10:37
操作word的代码太繁琐,耗时耗力,目前的结果可能还存在一些不完美的地方,仅供参考,实在不行,可以加v沟 ...

感谢大佬,您的方案几乎就是最完美的,我想要的结果了,但是还有一个问题,就是输出的word,能不能实现每组一页,就是填完第一组后,换到下一页再填第二组
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-6 22:12 , Processed in 0.043116 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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