news 2026/6/10 11:19:15

Word与Excel VBA协同实战:构建双向数据通道,实现跨软件流程自动化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Word与Excel VBA协同实战:构建双向数据通道,实现跨软件流程自动化

目录

第五章:Word与Excel双剑合璧

5-1 如何在Word中创建和获取Excel程序?

5-2 在Word中读取Excel单元格数据-1(单元格获取法)

5-3 在Word中读取Excel单元格数据-2(数组获取法)

5-4 Word中处理Excel数据并将结果写入Word

5-5 实例:Word中将Excel数据拆分到Word文档

5-6 在Word中将数据写入Excel单元格的几种方法

5-7 Word数据写入Excel实例-1

5-8 Word数据写入Excel实例-2


第五章:Word与Excel双剑合璧

5-1 如何在Word中创建和获取Excel程序?

Sub创建与关闭excel对象()

DimxlApp As Object, wbOpen, ws

SetxlApp = CreateObject("excel.application")

xlApp.Visible = True'显示出excel程序

SetwbOpen = xlApp.Workbooks.Open(ThisDocument.Path & "\1.xlsx")'打开工作簿

Setws = wbOpen.Sheets(1)

Debug.Print ws.Name

wbOpen.Close'关闭工作簿

xlApp.Quit'退出程序

SetxlApp = Nothing'清空内存

End Sub

5-2在Word中读取Excel单元格数据-1(单元格获取法)

Sub读取Excel单元格数据()

DimxlApp, wb, ws, intLastRow As Integer, a As Integer, v1, v2, v3

SetxlApp = CreateObject("excel.application")

xlApp.Visible = True

Setwb = xlApp.Workbooks.Open(ThisDocument.Path & "\demo.xlsx")

Setws = wb.Sheets("员工表")

intLastRow = ws.usedrange.Rows.Count

Fora = 2 To intLastRow

v1 = ws.Cells(a, 1).Value

v2 = ws.Cells(a, 2).Value

v3 = ws.Cells(a, 3).Value

Debug.Print v1, v2, v3

Next

xlApp.Quit

SetxlApp = Nothing

End Sub

5-3在Word中读取Excel单元格数据-2(数组获取法)

Sub读取Excel单元格数据2()

DimxlApp, wb, ws, intLastRow As Integer, a As Integer, v1, v2, v3, arr

SetxlApp = CreateObject("excel.application")

xlApp.Visible = True

Setwb = xlApp.Workbooks.Open(ThisDocument.Path & "\demo.xlsx")

Setws = wb.Sheets("员工表")

intLastRow = ws.usedrange.Rows.Count

arr = ws.Range("a2:c" & intLastRow)

Fori = 1 To UBound(arr)

v1 = arr(i, 1)

v2 = arr(i, 2)

v3 = arr(i, 3)

Debug.Print v1, v2, v3

Next

'也可以用下面方法获取

Fori = 1 To UBound(arr)

ar = xlApp.Index(arr, i)'应用excelindex函数

v1 = ar(1)

v2 = ar(2)

v3 = ar(3)

Debug.Print v1, v2, v3

Next

xlApp.Quit

SetxlApp = Nothing

End Sub

Excel与Word双剑合壁:

office家庭产品:word、excel、access、powerpoint...都是使用VBA语言。

不同点:它们的对象模型不一样(workbooks是excel中的,document是word中的)

应用程序之间可以实现相互访问

要想访问Excel,首先要建立对它的连接

1.前期绑定:工具--引用--Microsoft Excel14.0 Object Library

2.后期绑定:Setwdap=createobject("Excel.application")

Sub使用前期绑定更方便代码输入()

DimxlApp As Excel.Application'声明wapp变量为Excel程序对象类型

Dimwb As Workbook

SetxlApp = New Excel.Application'创建一个excel对象

xlApp.Visible = True'显示出excel对象

Setwb = xlApp.Workbooks.Add'新建一个工作簿

wb.Sheets(1).Range("a1") = 20'sheets没有申明变量,所以输入其属性、方法时没有代码提示

Dimws As Sheets

Setws = wb.Sheets

SetxlApp = Nothing

End Sub

5-4 Word中处理Excel数据并将结果写入Word

Sub处理Excel数据并将结果写入Word()

DimxlApp, wb, ws, intLastRow As Integer, a As Integer, v1, v2, v3, arr, t As Table

SetxlApp = CreateObject("excel.application")

xlApp.Visible = True

Sett = ThisDocument.Tables.Add(Selection.Range, 1, 3, 1)'最后一个参数(1)表示表格有网格

t.Cell(1, 1).Range.Text = "姓名": t.Cell(1, 2).Range.Text = "年龄": t.Cell(1, 3).Range.Text = "籍贯"

Setwb = xlApp.Workbooks.Open(ThisDocument.Path & "\demo.xlsx")

Setws = wb.Sheets("员工表")

intLastRow = ws.usedrange.Rows.Count

arr = ws.Range("a2:c" & intLastRow)

Fori = 1 To UBound(arr)

v1 = arr(i, 1)

v2 = arr(i, 2)

v3 = arr(i, 3)

Ifv2 >= 30Then

t.Select

Selection.InsertRowsBelow 1

a = t.Rows.Last.Index

t.Cell(a, 1).Range.Text = v1

t.Cell(a, 2).Range.Text = v2

t.Cell(a, 3).Range.Text = v3

End If

Next

xlApp.Quit

SetxlApp = Nothing

End Sub

5-5实例:Word中将Excel数据拆分到Word文档

Sub将Excel数据拆分到Word文档()

DimxlApp, wb, ws, doc As Document

SetxlApp = CreateObject("excel.application")

Setwb = xlApp.Workbooks.Open(ThisDocument.Path & "\名篇.xlsx")

Setws = wb.Sheets("sheet1")

arr = ws.Range("a2:b" & ws.usedrange.Rows.Count).Value

Forn = 1 To UBound(arr, 1)

Setdoc = Documents.Add

doc.Range(0).Text = arr(n, 1) & Chr(13)

Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter'居中

Selection.EndKey wdStory

Selection.Text = arr(n, 2)

Selection.ParagraphFormat.FirstLineIndent = CentimetersToPoints(0.75)'首先缩进0.75厘米,CentimetersToPoints(0.75)表示将0.75厘米转化为磅值

doc.SaveAs2 ThisDocument.Path & "\结果\" & arr(n, 1) & ".docx"

doc.Close

Next

wb.Close

xlApp.Quit

SetxlApp = Nothing

End Sub

5-6在Word中将数据写入Excel单元格的几种方法

Sub将数据写入Excel单元格的几种方法()

DimxlApp, wb, ws, arr1(1 To 3, 1 To 2) As Integer, arr2

arr2 = Array(Array(1, 2), Array(10, 20), Array(100, 200))'一维套一维的数组

SetxlApp = CreateObject("excel.application")

xlApp.Visible = True

arr2 = xlApp.Transpose(xlApp.Transpose(arr2))'转置

Setwb = xlApp.Workbooks.Add'创建工作簿

Setws = wb.Sheets(1)

ws.Range("a1") = "word VBA"'单值

ws.Range("a2:c2") = Array(100, 200, 300)'一维数组

ws.Range("a3:b5") = arr1'二维数组

ws.Range("a6:b8") = arr2'转置后的二维数组

xlApp.Quit

SetxlApp = Nothing

End Sub

5-7 Word数据写入Excel实例-1

WORD中的表格如下:

工号姓名性别年龄入职时间身高学历职务

NED001 阿汤男 30 2006/11/25 171 硕士普工

NED002 陈虹女 29 2005/08/20 169 本科普工

SubWord数据写入Excel实例()

DimintRow As Integer, intAge As Integer, arr(), i As Integer, t As Table

DimstrId As String, strName As String, strSex As String, dat As Date, strH As String, strX As String, strZ As String

Sett = ThisDocument.Tables(1)

ForintRow = 2 To t.Rows.Count

intAge = Split(t.Cell(intRow, 4).Range.Text, Chr(13))(0)

IfintAge >= 30Then

strId = Split(t.Cell(intRow, 1).Range.Text, Chr(13))(0)

strName = Split(t.Cell(intRow, 2).Range.Text, Chr(13))(0)

strSex = Split(t.Cell(intRow, 3).Range.Text, Chr(13))(0)

dat = Split(t.Cell(intRow, 5).Range.Text, Chr(13))(0)

strH = Split(t.Cell(intRow, 6).Range.Text, Chr(13))(0)

strX = Split(t.Cell(intRow, 7).Range.Text, Chr(13))(0)

strZ = Split(t.Cell(intRow, 8).Range.Text, Chr(13))(0)

n = n + 1

ReDimPreserve arr(1 To n)

arr(n) = Array(strId, strnmae, strSex, intAge, dat, strH, strX, strZ)

End If

Next

SetxlApp = CreateObject("excel.application")

xlApp.Visible = True

Setwb = xlApp.Workbooks.Add

arr = xlApp.Transpose(xlApp.Transpose(arr))

wb.Sheets(1).Range("a1").Resize(n, 8) = arr

wb.SaveAs ThisDocument.Path & "\筛选结果.xlsx"

xlApp.Quit

SetxlApp = Nothing

End Sub

5-8 Word数据写入Excel实例-2

WORD 中有4个表格(每季度一张表),表格样式如下:

1 季度统计表

产品业绩(万元)

a 789

b 9955

c 785

SubWord数据写入Excel实例2()

Dimt As Table, intRow As Integer, q, v0, v1, v2, xlApp, wb, ws, i As Integer

SetxlApp = CreateObject("excel.application")

Setwb = xlApp.Workbooks.Add

Setws = wb.Sheets(1)

ws.Cells(1, 1) = "季度": ws.Cells(1, 2) = "产品": ws.Cells(1, 3) = "业绩"

ForEacht In ThisDocument.Tables

q = q + 1

ForintRow = 2 To t.Rows.Count

v0 = "第" & q & "季度"

v1 = Split(t.Cell(intRow, 1).Range.Text, Chr(13))(0)

v2 = Split(t.Cell(intRow, 2).Range.Text, Chr(13))(0)

i = i + 1

ws.Range("a" & i + 1).Resize(1, 3) = Array(v0, v1, v2)

Next

Next

wb.SaveAs ThisDocument.Path & "\提取结果.xlsx"

xlApp.Quit

SetxlApp = Nothing

End Sub


计算机科学与技术 & 计算机网络技术:双专业课程体系完全导航指南

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/7 9:50:59

7个实用技巧,通过YashanDB实现数据结构优化

在现代数据库系统中,性能瓶颈和数据一致性问题是常见且挑战较大的技术难题。随着业务数据量和复杂度的快速增长,合理优化数据结构成为提升系统整体性能和稳定性的关键途径。YashanDB作为一款支持单机、分布式和共享集群多种部署形态的高性能数据库&#…

作者头像 李华
网站建设 2026/6/10 15:04:18

基于flask的电影信息网站的设计与实现

目录摘要关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!摘要 随着互联网技术的快速发展,电影信息网站成为用户获取影视资讯的重要渠道。基于Flask框架的电影信息网站设…

作者头像 李华
网站建设 2026/6/10 11:26:55

计算机Java毕设实战-基于springboot的大学生在线考试平台【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/5/28 18:02:59

OPPO AI团队发布O-Mem:让AI助手拥有真正的“记忆“

这项由OPPO AI Agent团队发表于2025年11月的研究论文,首次提出了名为O-Mem的全新记忆框架系统。有兴趣深入了解的读者可以通过arXiv:2511.13593v2查询完整论文。这个系统的突破性在于让AI助手能够像人类一样,通过持续的互动来建立对用户的深度理解&#…

作者头像 李华
网站建设 2026/6/10 4:17:48

计算机Java毕设实战-基于JAVA的旅游管理系统基于SpringBoot+Vue的旅游管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华