ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 用VBA实现将Excel表格粘贴到Word

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-8-26 17:04 | 显示全部楼层 |阅读模式
本帖最后由 mayejuejiang 于 2016-8-26 17:07 编辑

各位老师好:        小弟现在有个问题,想将Excel中的一个表格(已做好)粘贴到Word中的指定位置,
    由于不知道怎么用Excel VBA实现对Word的操作,特此请教大家,
    具体需求说明:
    利用Excel宏程序将Word文件打开,并将附件中Excel的表格粘贴到附件中Word的第7行。    还望各位大神指点,多谢!




用VBA实现将Excel表格粘贴到Word.zip

16.43 KB, 下载次数: 292

TA的精华主题

TA的得分主题

发表于 2016-8-26 19:30 | 显示全部楼层
楼主用到行这个概念,但word中的行很复杂,引用守柔版主的原话:“Word 2003及其以后版本中,是有“页”和“行”对象的,即“Page"和“Line“,它们也可以与Range对象关联起来,但尽量不要使用这些对象,如果程序要通过页和行来解决问题时,应该检讨一下程序的设计思路是否存在问题,在使用“页”特别是“行”对象时,请慎用。
3楼复制到文末(文件共6段),估计也是避免用行以免造成麻烦。
但如果不是为了实用,为了研究学习,用行其实也未尝不可,我下面提供的代码最终按楼主要求粘贴到第7行,但也准备了按段粘贴的一个代码备楼主参考学习(第3段在文即第7行),楼主要用,把前边单引号去掉可以直接使用。
以上纯属个人见解,如果不对,请原谅,如果对了,请赏花。
Dim dpath, Filename As String
    Dim wdapp As Word.Application
    Dim wddocument As Word.Document
    dpath = ThisWorkbook.Path
    Set wdapp = New Word.Application
    Application.ScreenUpdating = False
    Filename = Dir(dpath & "\Q-Word.docx")
    Set wddocument = wdapp.Documents.Open(dpath & "\" & Filename)
       Sheet1.Range("B2:E7").Copy
       With wdapp.Application
            .Selection.MoveDown Unit:=wdLine, Count:=6 '从头下移6行,实际上就是第7 行
            .Selection.Paste
       End With
        'wddocument.Paragraphs(3).Range.Paste'复制到word文件的第3段
    Application.ScreenUpdating = True

评分

4

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-8-26 17:05 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
还需补充一点:开始的时候只打开Excel,在宏程序中打开Word,谢谢!

TA的精华主题

TA的得分主题

发表于 2016-8-26 17:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Sub 生成()

Dim appWD, doc As Object



Set appWD = CreateObject("Word.Application")
appWD.Visible = True
Set appWD = GetObject(, "Word.Application")
Set doc = GetObject(ThisWorkbook.Path & "\模板.docx")
appWD.Visible = True


Application.CutCopyMode = False
ThisWorkbook.Activate
Range("e5:j20").Select
Selection.Copy
appWD.Visible = True


appWD.Selection.Paste




MsgBox "OK"
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2016-8-26 19:35 | 显示全部楼层
附件。楼主可能需要打开引用,即先在VBE中:工具----引用--Microsoft Word 11.0 Object Library (就是引用word 对象,不同的版本,Word 11.0会不同,有的是Word 9.0,我现在用的是2003版本)或Microsoft Word 14.0 Object Library

用VBA实现将Excel表格粘贴到Word.rar

34.57 KB, 下载次数: 663

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2016-8-26 20:43 | 显示全部楼层
dongfgdwdjg 发表于 2016-8-26 19:35
附件。楼主可能需要打开引用,即先在VBE中:工具----引用--Microsoft Word 11.0 Object Library (就是引用wo ...

我倒是觉得,先在WORD中做好表格,EXCEL中的数据写入,这样无论是表格的格式还是定位都好控制些。。。。

TA的精华主题

TA的得分主题

发表于 2016-8-27 07:38 | 显示全部楼层
jiminyanyan 发表于 2016-8-26 20:43
我倒是觉得,先在WORD中做好表格,EXCEL中的数据写入,这样无论是表格的格式还是定位都好控制些。。。。

严重同意,那样速度也快。但前提是表格样式要提前知道。如果行和列动态变化,大约提前做好表格有难度。

TA的精华主题

TA的得分主题

发表于 2016-8-27 07:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
jiminyanyan 发表于 2016-8-26 20:43
我倒是觉得,先在WORD中做好表格,EXCEL中的数据写入,这样无论是表格的格式还是定位都好控制些。。。。

我其实也不懂,接触VBA太晚。
有个问题想请教一下:我想把WORD文档中每段末的非文字内容删除(包括标点符号、空格、其他符号等),在excel中能做到吗?我本意是想把每段末都统一为句号,需要先删除其他非文字内容。

TA的精华主题

TA的得分主题

发表于 2016-8-27 09:23 | 显示全部楼层
我5楼代码中With ……End With部分是指定位置粘贴,这四行代码实质上与下面一行代码wddocument.Paragraphs(3).Range.Paste作用相同。
其中.Selection.MoveDown Unit:=wdLine, Count:=6 是指定粘贴位置的,我把这句替换为其他代码,得到不同效果。因为我也是初学,理论很肤浅,主要靠反复调试代码学一点东西,知其然不知其所以然,如果说的不对,请老师们斧正,要是凑巧说对了,希望能给大家一点帮助,当然,大家能赏花更好,呵呵。替换代码及说明如下:
①.Selection.Sections.Item (1)
复制到word文件的第1节开始位置,如果文件有多节,括号里的1可以换为其他节数,但超过节数就报错。如本例中只有一节,填写任何大于1的数值都报错;
②.Selection.HomeKey Unit:=wdLine
复制到文件开始位置,代码中没有行数(Count:=);
③.Selection.MoveUp Unit:=wdLine, Count:=10
复制到文件开始位置,与上边那句代码效果相同,不知道具体区别何在,希望明白的人指教。代码中有行数(Count:=),但行数似乎不影响效果,我测试时把10换成1或2或5均没有区别;
④.Selection.MoveEnd Unit:=wdLine, Count:=10'复制并替换前10行
感到这一句很奇葩,居然有替换(覆盖)功能,我测试时,用Count:=1时仅替换第一行,用Count:=2时替换前2行,用Count:=5时替换前5行,不是插入是覆盖,实际上不好玩;
⑤ .Selection.EndKey Unit:=wdLine
这一句更奇葩,当初我的想法是复制到文档最后,但经反复测试,不能复制到文档末尾,而是复制到文件第一行和第二行之间,并把第一行变为第一段,即在第一行后增加一个段落标记后插入复制,什么原理不太明白。

TA的精华主题

TA的得分主题

发表于 2016-8-27 09:53 | 显示全部楼层
本帖最后由 dongfgdwdjg 于 2016-8-27 11:29 编辑

。。。。。。。。。。。。。。。。。与楼上重了,怎么删除?呵呵呵

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-29 22:15 , Processed in 0.045413 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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