WORD的这个问题能否用VBA解决

WORD的这个问题能否用VBA解决,第1张

问题1:如果每个表格的结构和格式都是一致的话,应该是没有问题的。

问题2:应该也没有问题。此外,我想问一下是否每段话里面都是严格地有“占地面积、投资、职工、纯收入”这几个关键词且它们在自己段落中的出现顺序也都固定?

我试试吧,答案有点长。要有耐心哦……:)

如果楼主对于步骤和代码的使用有什么疑问可以补充提问或者给我发信息。

------------------------------------

[问题一]

1、打开包含多个人员信息表格的Word文件(假设文件名为“人员表”,表格格式严格遵循楼主问题中的描述),键入Alt+F11显示VBA窗口

2、键入Ctrl+R激活左边的项目窗口,在“人员表”这个节点上鼠标右键,选择“插入-类模块”;

3、键入F4激活属性窗口,修改类模块的名称为“PersonInfo”;

4、在右边的编辑区粘贴如下代码:

Option Explicit

Public Name As String

Public Age As String

Public Hometown As String

Public Address As String

Public Postcode As String

Public Email As String

Public University As String

Public Major As String

Public Experience As String

Public Skill As String

5、再在项目窗口的“人员表”这个节点上鼠标右键,选择“插入-模块”;

6、在右边的编辑区粘贴如下代码:

Option Explicit

Sub BuildMasterTable()

Dim oTable As Table

Dim oPersonInfo As PersonInfo

Dim oPersons As New Collection

For Each oTable In ActiveDocumentTables

Set oPersonInfo = CollectPersonInfoFromTable(oTable)

If Not oPersonInfo Is Nothing Then

oPersonsAdd oPersonInfo

End If

Next

BuildMasterTableForPersons oPersons

MsgBox "完成!"

End Sub

Function CollectPersonInfoFromTable(oTable As Table) As PersonInfo

If oTableRowsCount <> 7 Or oTableColumnsCount <> 4 Then

CollectPersonInfoFromTable = Nothing

Exit Function

End If

Dim oPersonInfo As New PersonInfo

oPersonInfoName = GetInfoFromCell(oTable, 1, 2)

oPersonInfoAge = GetInfoFromCell(oTable, 1, 4)

oPersonInfoHometown = GetInfoFromCell(oTable, 2, 2)

oPersonInfoAddress = GetInfoFromCell(oTable, 2, 4)

oPersonInfoPostcode = GetInfoFromCell(oTable, 3, 2)

oPersonInfoEmail = GetInfoFromCell(oTable, 3, 4)

oPersonInfoUniversity = GetInfoFromCell(oTable, 4, 2)

oPersonInfoMajor = GetInfoFromCell(oTable, 5, 2)

oPersonInfoExperience = GetInfoFromCell(oTable, 6, 2)

oPersonInfoSkill = GetInfoFromCell(oTable, 7, 2)

Set CollectPersonInfoFromTable = oPersonInfo

End Function

Function GetInfoFromCell(oTable As Table, rowIndex As Integer, columnIndex As Integer)

Dim strInfo As String

strInfo = oTableCell(rowIndex, columnIndex)RangeText

GetInfoFromCell = Left(strInfo, Len(strInfo) - 2)

End Function

Sub BuildMasterTableForPersons(oPersons As Collection)

Dim oDoc As Document

Dim oTable As Table

Dim nIndex As Integer

Set oDoc = DocumentsAdd

Set oTable = oDocTablesAdd(oDocRange, oPersonsCount + 1, 10)

oTableAutoFitBehavior wdAutoFitContent

oTableBordersInsideLineStyle = wdLineStyleSingle

oTableBordersOutsideLineStyle = wdLineStyleDouble

oTableCell(1, 1)RangeText = "姓名"

oTableCell(1, 2)RangeText = "年龄"

oTableCell(1, 3)RangeText = "籍贯"

oTableCell(1, 4)RangeText = "住址"

oTableCell(1, 5)RangeText = "邮编"

oTableCell(1, 6)RangeText = "邮箱"

oTableCell(1, 7)RangeText = "毕业院校"

oTableCell(1, 8)RangeText = "专业"

oTableCell(1, 9)RangeText = "工作经验"

oTableCell(1, 10)RangeText = "特长"

For nIndex = 1 To oPersonsCount

oTableCell(nIndex + 1, 1)RangeText = oPersons(nIndex)Name

oTableCell(nIndex + 1, 2)RangeText = oPersons(nIndex)Age

oTableCell(nIndex + 1, 3)RangeText = oPersons(nIndex)Hometown

oTableCell(nIndex + 1, 4)RangeText = oPersons(nIndex)Address

oTableCell(nIndex + 1, 5)RangeText = oPersons(nIndex)Postcode

oTableCell(nIndex + 1, 6)RangeText = oPersons(nIndex)Email

oTableCell(nIndex + 1, 7)RangeText = oPersons(nIndex)University

oTableCell(nIndex + 1, 8)RangeText = oPersons(nIndex)Major

oTableCell(nIndex + 1, 9)RangeText = oPersons(nIndex)Experience

oTableCell(nIndex + 1, 10)RangeText = oPersons(nIndex)Skill

Next

End Sub

7、键入F5运行,看到提示“完成!”后切换回Word文档窗口检查汇总表(生成在一个新文档中)是否正确生成。

------------------------------------

[问题二]

1、打开包含原始投资文字信息的Word文件(假设文件名为“投资信息”,几个关键字的出现顺序严格遵循楼主问题中的描述),键入Alt+F11显示VBA窗口;

2、键入Ctrl+R激活左边的项目窗口,在“投资信息”这个节点上鼠标右键,选择“插入-类模块”;

3、键入F4激活属性窗口,修改类模块的名称为“InvestmentInfo”;

4、在右边的编辑区粘贴如下代码:

Option Explicit

Public Area As String

Public Investment As String

Public Employees As String

Public Income As String

5、选择菜单“工具-引用”,打开添加项目引用的对话框,在列表里面找到并钩上“Microsoft VBScript Regular Expression ”(最后的两个版本号无所谓),确定;

6、再在项目窗口的“投资信息”这个节点上鼠标右键,选择“插入-模块”;

7、在右边的编辑区粘贴如下代码:

Option Explicit

Sub CollectInvestmentInfo()

Dim oRegExp As New RegExp

Dim oMatch As Match

Dim oMatches As MatchCollection

Dim oInvestmentInfo As InvestmentInfo

Dim oInvestmentInfoArray As New Collection

oRegExpGlobal = True

oRegExpPattern = "占地面积([0-9]+)亩,总投资([0-9]+)万元,职工([0-9]+)人,年纯收入([0-9]+)多万"

Set oMatches = oRegExpExecute(ActiveDocumentRangeText)

For Each oMatch In oMatches

Set oInvestmentInfo = New InvestmentInfo

oInvestmentInfoArea = oMatchSubMatches(0)

oInvestmentInfoInvestment = oMatchSubMatches(1)

oInvestmentInfoEmployees = oMatchSubMatches(2)

oInvestmentInfoIncome = oMatchSubMatches(3)

oInvestmentInfoArrayAdd oInvestmentInfo

Next

BuildMasterTable oInvestmentInfoArray

MsgBox "完成!"

End Sub

Sub BuildMasterTable(oInvestmentInfoArray As Collection)

Dim oDoc As Document

Dim oTable As Table

Dim nIndex As Integer

Set oDoc = DocumentsAdd

Set oTable = oDocTablesAdd(oDocRange, oInvestmentInfoArrayCount + 1, 4)

oTableAutoFitBehavior wdAutoFitContent

oTableBordersInsideLineStyle = wdLineStyleSingle

oTableBordersOutsideLineStyle = wdLineStyleDouble

oTableCell(1, 1)RangeText = "占地面积"

oTableCell(1, 2)RangeText = "总投资"

oTableCell(1, 3)RangeText = "职工数"

oTableCell(1, 4)RangeText = "年纯收入"

For nIndex = 1 To oInvestmentInfoArrayCount

oTableCell(nIndex + 1, 1)RangeText = oInvestmentInfoArray(nIndex)Area

oTableCell(nIndex + 1, 2)RangeText = oInvestmentInfoArray(nIndex)Investment

oTableCell(nIndex + 1, 3)RangeText = oInvestmentInfoArray(nIndex)Employees

oTableCell(nIndex + 1, 4)RangeText = oInvestmentInfoArray(nIndex)Income

Next

End Sub

8、键入F5运行,看到提示“完成!”后切换回Word文档窗口检查汇总表(生成在一个新文档中)是否正确生成。

你提到的2个方法我觉得都不可行,因为VBE里代码运行跟应用程序的代码运行不是一回事,一个是在代码编辑时的,一个是在应用程序运行时的。

提供另一个思路,你可以试试,找到你自己编制的代码中,使用到的不同object library库文件版本的函数或引用常数,直接改为自己重写的函数或者常数。避免去调用系统库文件里的内容,然后就可以不依赖库文件运行了。既然不依赖任何库文件,意味着也无需去管理不同电脑上的库文件的版本了。

简单点说就是编程过程中尽量用各版本库文件都通用的那些函数或者常数,不要用个别版本不支持的。那么你的代码通用性就有保障。

有软件可以实现

批量获取信息windows系统版本

首先导出csv然后另存一下就可以了,excel 读取写入速度太慢

50万行数据,估计得要点时间,用这个csv几秒钟,到时候另存一下也很快

以上就是关于WORD的这个问题能否用VBA解决全部的内容,包括:WORD的这个问题能否用VBA解决、VBA如何针对不同版本的OFFICE进行引用、图片像素宽和高,批量导入EXCEL表格,大约有50W张图片,怎么用VBA写代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9792083.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存