题外:由于漏掉了勾选Microsoft Word 16.0 Object Library这个关键步骤(不勾选是无法导出的),故修改后再次发出。本期我是从知乎上的郭大牛老师那里学的,非常建议大家去阅读,这里真的拜谢郭大牛老师。

https://zhuanlan.zhihu.com/p/76755973?utm_source=wechat_session&utm_medium=social&utm_oi=842149456383193088郭大牛:根据Excel数据生成Word文档

虽然代码可能有一点难,但由于实在是太便利,觉得还是应该拿出来,哪怕简化后的,也是有作用的,主要还是要尽力尝试。开始正题。先看视频。本次只是针对Excel单行数据的单次Word文档填充,逻辑关系上是比较简单的。如果再往下想,循环填充多行,批量形成多个Word文档也是可以的,这个就以后再说了。这一次由于关联到Word,我们要先按如下顺序操作:Excel开发工具栏→VB编辑器→工具→引用→找到Microsoft Word 16.0 Object Library并打钩→确定。这样我们才能关联到Word,实质相当于一个Excel和Word之间的接口。

思路是这样的:定义变量→变量赋值→窗口选择Word模板文件→打开Word模板文件→替换内容→另存替换后的Word文件一、定义变量

Dim StarGun As ObjectDim WordD As ObjectDim PathW As StringDim Tit, TheDate, SP, AP As StringDim a As Integer

这里先把StarGun和WordD定义为对象,PathW、Tit、TheDate、SP、AP定义为字符串型变量,a定义为整数。二、赋值

            a = ActiveCell.Row          Tit = Cells(a, 2)      TheDate = Format(Cells(a, 1), "mm月dd日")           SP = Format(Cells(a, 5), "#0.00")           AP = Format(Cells(a, 11), "#0.00")        Level = Cells(a, 12) & "级"

ActiveCell.Row即取值当前选择的单元格的行号,然后把想要替换的单元格的内容赋值于剩下的5个变量内。如果想要替换更多的单元格内容,就要赋值更多的变量。Format用于调整对象格式。三、窗口选择Word模板文件

With Application.FileDialog(msoFileDialogFilePicker)          .Filters.Add "word文件", "*.doc*", 1         .InitialFileName = "C:\Users\Dick\Desktop\vba撰写\"         .AllowMultiSelect = False         If .Show Then PathW = .SelectedItems(1) Else Exit Sub    End With

以上可以解读为:在指定路径下(.InitialFileName = "C:\Users\Dick\Desktop\vba撰写\"),选择文件名含有".doc"的Word文档,只能选择一个Word文档;如果没有选择文件则直接退出本次命令执行。四、打开Word模板文件

    Set StarGun = CreateObject("Word.Application")          StarGun.Visible = True    Set WordD = StarGun.Documents.Open(PathW, , False)

这一段三句功能为打开第三步选择的Word模板文件,其中StarGun.Visible意义在于使这个Word文件打开时处于可见状态,如果为False则是不可见,其它句子就不必纠结了。五、替换内容

本例代码中这一部分虽然比较长,但是基本都是一个个点对点的替换动作,这里只取其一做解释。

With StarGun.Application.Selection        .Find.ClearFormatting                .Find.Replacement.ClearFormatting                With .Find             .Text = "{$监测点名称}"             .Replacement.Text = Tit        End With        .Find.Execute Replace:=wdReplaceAll    End With

以此为例,主要意思就是把已打开的Word模板中的{$监测点名称},替换为变量Tit(Tit已经赋值)。.Find.Execute Replace:=wdReplaceAll是Word的VBA命令,意思为替换所有内容,每一个变量替换都要带这一句,缺少了会报错。如果需要增减修改替换的变量,复制With .Find至wdReplaceAll,修改赋给Text的内容即可。六、另存替换后的Word文件

   WordD.SaveAs  ThisWorkbook.Path & "\" & "监测点数据Word" & "(" & Tit & ")" & ".doc"

关于Save as在第二篇宏录制里有解释,这里就不再赘述了。附上完整代码

Sub 按钮8_Click()Dim StarGun As Object 'Word.ApplicationDim WordD As Object 'Word.DocumentDim PathW As String '模板文件路径名Dim Tit, TheDate, SP, AP As StringDim a As Integer         a = ActiveCell.Row       Tit = Cells(a, 2)   TheDate = Format(Cells(a, 1), "mm月dd日")        SP = Format(Cells(a, 5), "#0.00")        AP = Format(Cells(a, 11), "#0.00")     Level = Cells(a, 12) & "级"    With Application.FileDialog(msoFileDialogFilePicker)   '窗口打开Word文件并不选时报错         .Filters.Add "word文件", "*.doc*", 1         .InitialFileName = "C:\Users\Dick\Desktop\vba撰写\"         .AllowMultiSelect = False         If .Show Then PathW = .SelectedItems(1) Else Exit Sub    End With     Set StarGun = CreateObject("Word.Application")    '打开模板文件        StarGun.Visible = True    Set WordD = StarGun.Documents.Open(PathW, , False)   With StarGun.Application.Selection    '开始替换        .Find.ClearFormatting            'ClearFormatting为清除目标位置现有格式,如加粗底色等,为后面仅作字符替换做准备        .Find.Replacement.ClearFormatting                With .Find             .Text = "{$监测点名称}"             .Replacement.Text = Tit        End With        .Find.Execute Replace:=wdReplaceAll    'wdReplaceAll是Word的VBA命令,替换所有内容         With .Find             .Text = "{$监测时间}"             .Replacement.Text = TheDate        End With        .Find.Execute Replace:=wdReplaceAll         With .Find             .Text = "{$S指数}"             .Replacement.Text = SP        End With        .Find.Execute Replace:=wdReplaceAll                 With .Find             .Text = "{$A指数}"             .Replacement.Text = AP        End With        .Find.Execute Replace:=wdReplaceAll                 With .Find             .Text = "{$风险等级}"             .Replacement.Text = Level        End With        .Find.Execute Replace:=wdReplaceAll    End With    WordD.SaveAs ThisWorkbook.Path & "\" & "监测点数据Word" & "(" & Tit & ")" & ".doc"End Sub

这套程序是我在4月份时开始使用的(我用的不太一样,文中简化了很多),当时真挺难,几乎是每一句都读不懂,只是看出了能增减修改变量的位置,于是不明就里的就开始使用了。因此,看不看得懂可能还真不是十分重要,反正能用就行了,别的以后再说。附件在阅读全文,码【gefv】

vb 变量赋值为当前选定单元格_第7篇:根据Excel选定行对Word模板填充数据(补充修改)...相关推荐

  1. python pandas合并单元格_利用Python pandas对Excel进行合并的方法示例

    前言 在网上找了很多Python处理Excel的方法和代码,都不是很尽人意,所以自己综合网上各位大佬的方法,自己进行了优化,具体的代码如下. 博主也是新手一枚,代码肯定有很多需要优化的地方,欢迎各位大 ...

  2. 单击选定单元格后输入新内容_Excel表格处理基本操作部分习题参考解答

    Excel 表格处理基本操作部分习题参考解答 1 . Excel 中表示单元格名称时,前面是行号,后面是列号,是吗? 不是.单元格名称用列标 + 行号表示 2 . Excel 左下角的标签只能有 Sh ...

  3. java 合并和拆分单元格_如何在Microsoft Word中合并和拆分表和单元格

    java 合并和拆分单元格 You can easily merge and split cells in Microsoft Word to make your tables more intere ...

  4. CGAL笔记之单元格复合体和多面体篇—曲面网格

    CGAL笔记之单元格复合体和多面体篇-曲面网格 0.前言 1.用法 1.示例 2.连通性 3.范围和迭代器 3.1 示例 4.循环器 1.示例 5.属性 1.示例 6.边界 7.Surface Mes ...

  5. CGAL笔记之单元格复合体和多面体篇—三维多面体曲面

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 CGAL笔记之单元格复合体和多面体篇-三维多面体曲面 1 介绍 2 定义 3 示例程序 3.1 第一个使用默认值的例子 3.2 顶点中 ...

  6. CGAL笔记之单元格复合体和多面体篇——多面体凸分解

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 CGAL笔记之单元格复合体和多面体篇--多面体凸分解 1 介绍 2 接口使用 1 介绍 对于非凸多面体的许多应用,有一个有效的解决方案 ...

  7. CGAL笔记之单元格复合体和多面体篇——多面体的 3D Minkowski 和

    CGAL笔记之单元格复合体和多面体篇--多面体的 3D 闵可夫斯基和 介绍 分解法 特性和约束 用法 介绍 如下图,勺子和星星的 Minkowski 和. 分解法 计算非凸多面体闵可夫斯基和的分解方法 ...

  8. vb6 word 2002 合并单元格_干货来了!最实用的Word表格小技巧!

    有小伙伴说Word表格太不好做了,不如Excel里面方便,文字方向不听指挥,数据又不好排序,整个表格做起来很不好看.但我们的工作中很多表格又都是在Word中完成的,今天就给大家介绍一下在Word文档中 ...

  9. 在EXCEL表格中经常会遇到有合并单元格时,汇总计算的公式无法直接下拉自动填充计算,掌握这个小技巧一键汇总

    在EXCEL表格中经常会遇到有合并单元格时,汇总计算的公式无法直接下拉自动填充计算,掌握这个小技巧一键汇总 目录 在EXCEL表格中经常会遇到有合并单元格时,汇总计算的公式无法直接下拉自动填充计算,掌 ...

最新文章

  1. Java生成html为pdf
  2. Android架构篇-1 项目组织架构
  3. dsp之BF531笔记
  4. 任务数量超过线程池负荷了怎么办?拒绝策略安排起来!
  5. 8-th Android开发之服务器端
  6. 性能测试真如你想象的那么简单?
  7. Unity3d开发跳一跳AI(ML-agents)全纪录
  8. if....else的基本用法
  9. 使用rvm来管理ruby版本
  10. 用PHP写Yaf:Yaf_Registry类
  11. 电脑装两个硬盘在计算机只显示一个,电脑有两个硬盘,如何去掉机械硬盘中的那套系统?...
  12. Mac操作系统下重装 Mac os X 系统
  13. Go:sqrt平方根计算(附完整源码)
  14. Yann LeCun:大模型方向错了,智力无法接近人类
  15. 31 家企业入选阿里云首期云原生加速器,共建云原生行业新生态
  16. 2014年初款11寸MacBook Air安装Windows 7 64bit操作系统缺少USB3驱动键盘鼠标失效
  17. go系列-笔记(第五天)
  18. 斑马条码打印机断电重启后无法打印问题
  19. android爬取视频播放地址,Android 视频中抓取图像 - MediaMetadataRetriever
  20. oracle 导出secquence,oracle等待事件7——事務上的等待事件

热门文章

  1. 如何开发自己的第1个可以上线的Java项目?
  2. 假如,只是假如把支付宝存储服务器炸了,里面的钱还在么?
  3. 【KVM系列04】KVM的I/O 设备直接分配和SR-IOV
  4. Java中native关键字
  5. Eclipse自动注册Servlet:web.xml注册和@Servlet注解 实现注册
  6. i-usb-storer android,i usb storer
  7. sharemouse切窗口就锁定了什么原因_Excel表格如何锁定,被锁定的表格又该如何解除锁定呢?...
  8. Gentoo 安装日记 01 (工具准备)
  9. 三体系建设是什么意思_湖南信息系统建设和服务能力评估体系怎么做?是什么?...
  10. show status 优化mysql_mysql优化--show status