ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

VBA操作word问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-11-12 22:05 | 显示全部楼层 |阅读模式
本帖最后由 yuanmeng7848 于 2023-11-13 09:24 编辑

Sub ExcelToWordAndPrint()
   Dim WordObject As Object
   Dim MyWord As Object
   Dim MyWordRange As Object
   On Error Resume Next
   Set WordObject = CreateObject("Word.Application")
   WordObject.Visible = 0
   Set MyWord = WordObject.Documents.Add 'DocumentType:=wdNewBlankDocument
   'WordObject.Application.Activate
   With MyWord.ActiveDocument.PageSetup
      .LineNumbering.Active = False
      .Orientation = wdOrientLandscape
      .PageWidth = WordObject.CentimetersToPoints(21)
      .PageHeight = WordObject.CentimetersToPoints(29.7)
      .TopMargin = WordObject.CentimetersToPoints(6)
      .BottomMargin = WordObject.CentimetersToPoints(2)
      .LeftMargin = WordObject.CentimetersToPoints(1.5)
      .RightMargin = WordObject.CentimetersToPoints(1.5)
      .HeaderDistance = WordObject.CentimetersToPoints(0.5)
      .FooterDistance = WordObject.CentimetersToPoints(0.5)
   End With
   For Each Sh In Worksheets
      If Sh.Name = "甲组" Or Sh.Name = "乙组" Or Sh.Name = "丙组" Then
         For i = 3 To Sh.Cells(Rows.Count, 6).End(xlUp).Row
            MyWord.Range(0, MyWord.Range.End) = ""
            If Sh.Cells(i, 9) = "" Then
               MyWord.Content.InsertAfter Sh.Cells(i, 2) & "班" & Sh.Cells(i, 1) & "同学在*****"
               MyWord.Content.InsertAfter Mid(Sheets("运动员信息汇总").Cells(1, 1), 5, 9) & Sh.Cells(i, 3)
               MyWord.Content.InsertAfter "子" & Sh.Name & Sh.Cells(i, 5) & "比赛中以" & Sh.Cells(i, 6) & "的成绩荣获"
               MyWord.Content.InsertAfter vbCrLf & Sh.Cells(i, 7) & vbCrLf & "特发此奖,以资鼓励!" & vbCrLf
               MyWord.Content.InsertAfter "********" & vbCrLf & Format(Date, "yyyy年mm月dd日")
               Set MyWordRange = MyWord.Range
               With MyWordRange
                  .Paragraphs(1).Range.ParagraphFormat.CharacterUnitFirstLineIndent = 2
                  .Paragraphs(1).Range.ParagraphFormat.Alignment = wdAlignParagraphLeft
                  .Paragraphs(1).Range.Font.Size = 24
                  .Paragraphs(1).Range.Font.Name = "华文行楷"
                  .Paragraphs(1).Range.Font.Bold = True
                  .Paragraphs(2).Range.ParagraphFormat.CharacterUnitFirstLineIndent = 0
                  .Paragraphs(2).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
                  .Paragraphs(2).Range.Font.Size = 36
                  .Paragraphs(2).Range.Font.Name = "华文行楷"
                  .Paragraphs(2).Range.Font.Bold = True
                  '.Paragraphs(3).Range.ParagraphFormat.CharacterUnitFirstLineIndent = 0
                  .Paragraphs(3).Range.ParagraphFormat.Alignment = wdAlignParagraphLeft
                  .Paragraphs(3).Range.Font.Size = 24
                  .Paragraphs(3).Range.Font.Name = "华文行楷"
                  .Paragraphs(3).Range.Font.Bold = True
                  .Paragraphs(4).Range.ParagraphFormat.CharacterUnitFirstLineIndent = 19
                  .Paragraphs(4).Range.ParagraphFormat.Alignment = wdAlignParagraphLeft
                  .Paragraphs(4).Range.Font.Size = 24
                  .Paragraphs(4).Range.Font.Name = "华文行楷"
                  .Paragraphs(4).Range.Font.Bold = True
                  .Paragraphs(5).Range.ParagraphFormat.CharacterUnitFirstLineIndent = 19
                  .Paragraphs(5).Range.ParagraphFormat.Alignment = wdAlignParagraphLeft
                  .Paragraphs(5).Range.Font.Size = 24
                  .Paragraphs(5).Range.Font.Name = "华文行楷"
                  .Paragraphs(5).Range.Font.Bold = True
               End With
               WordObject.PrintOut
               Sh.Cells(i, 9) = "已打印"
               Exit For
            End If
         Next
      End If
      'Exit For
   Next
   WordObject.Saved = True
   WordObject.ActiveDocument.SaveAs ThisWorkbook.Path & "\打印奖状.docx"
   WordObject.Application.Quit
   Set WordObject = Nothing
End Sub
关于上面这段代码向各位大师请教两个问题:
1、设置页面部分未能启用(本想设置页面为横向,上边距为6cm)
2、段落设置部分:第一段设置正常,第二段本想设置成居中,第三段左对齐,第四、五段缩进19个字符。
结果二、三、四、五段完全一样。怎么回事?但第二段字号没问题!
请高手指点,谢谢!

TA的精华主题

TA的得分主题

发表于 2023-11-14 16:25 | 显示全部楼层
1.代码没有完全调试成功之前,请不要使用resume next,还有关闭可见性的代码,这样你根本就发现不了问题
2.了解在EXCEL写WORD代码和在WORD中写EXCEL代码的注意事项,并不是所有代码拿过来就可以用的,特别是一些常量
3.如果想求助,最好上传样本和预想结果,你让别人去猜你的代码吗???

PS:.第四、第五段测试没有问题
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-4 15:51 , Processed in 0.046105 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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