
问题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写代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)