通过VBA将多个Word表格内容提取到Excel-表格内容编号行

通过VBA将多个Word表格内容提取到Excel-表格内容编号行,vba,excel,ms-word,Vba,Excel,Ms Word,我在几年前的一篇帖子中发现了一些可爱的代码,这些代码为我提供了要导出到Excel的特定表格、行和列信息,并且运行良好。(感谢原创海报) 然而,我现在被要求抓取另一个表格单元格,其中有几个段落,这些段落在单元格内(或者在另一个单元格中,用圆珠笔)自动编号为列表。我并不总是知道列表中有多少项,但我需要完整的单元格内容 我遇到的问题是,当数据通过编码导出到Excel时,它会松开编号,回车,基本上所有的数据都一起运行,不会中断前一行的数据 乙二醇- P&ID 111222 图纸111-5456 文件51

我在几年前的一篇帖子中发现了一些可爱的代码,这些代码为我提供了要导出到Excel的特定表格、行和列信息,并且运行良好。(感谢原创海报)

然而,我现在被要求抓取另一个表格单元格,其中有几个段落,这些段落在单元格内(或者在另一个单元格中,用圆珠笔)自动编号为列表。我并不总是知道列表中有多少项,但我需要完整的单元格内容

我遇到的问题是,当数据通过编码导出到Excel时,它会松开编号,回车,基本上所有的数据都一起运行,不会中断前一行的数据

乙二醇-

  • P&ID 111222
  • 图纸111-5456
  • 文件512BC-1234
  • 导出时变为:
    P&ID 111222DWG 111-5456DOC512BC-1234

    有谁能建议如何调整代码以阻止数据一起运行?我很乐意在一个Excel单元格中获取数据,如果必须的话,也可以在多个单元格中获取数据

    提前谢谢你,温迪

    Sub-wordscrap()
    作为对象的Dim wrdDoc
    将对象文件作为对象
    作为对象的Dim fso
    Dim wordApp作为对象
    Dim sh1作为工作表
    作为整数的Dim x
    '将此更改为包含word文档的文件夹
    FolderName=“Y:\120\TEST”
    Set sh1=ThisWorkbook.Sheets(1)
    设置fso=CreateObject(“Scripting.FileSystemObject”)
    设置wordApp=CreateObject(“Word.application”)
    设置objFiles=fso.GetFolder(FolderName).Files
    x=1
    对于OBJ4文件中的每个wd
    如果InStr(wd,“.docx”)和InStr(wd,“~”)=0,则
    设置wrdDoc=wordApp.Documents.Open(wd.Path,ReadOnly=True)
    'word文档文件名
    sh1.Cells(x,1)=wd.Name
    '文件编号-表1第2行第1列
    sh1.Cells(x,2)=Application.WorksheetFunction.Clean(wrdDoc.Tables(1).Cell(行=2,列=1).Range)
    '文件标题-表1第3行第1列
    sh1.Cells(x,3)=Application.WorksheetFunction.Clean(wrdDoc.Tables(1).Cell(行=3,列=1).Range)
    '文档标记单元格-表1第9行第2列
    '注意-如果WORD文档中的行数超过1行,并且自动编号在导出时将删除编号和换行符-将所有内容一起运行
    sh1.Cells(x,4)=Application.WorksheetFunction.Clean(wrdDoc.Tables(1).Cell(行=9,列=2).Range)
    '记录单据频率的单元格-表1第16行第2列
    sh1.Cells(x,5)=Application.WorksheetFunction.Clean(wrdDoc.Tables(1).Cell(行=16,列=2).Range)
    'sh1.单元格(x,3)=…更多提取的数据。。。。
    x=x+1
    警告,关闭
    如果结束
    下一个wd
    wordApp,退出
    
    End Sub
    这将从Word表格单元格中提取常规文本或项目符号文本,格式设置为在Excel单元格中使用

    如果word中的文本格式为列表,则会添加“项目符号”或数字(但请注意,如果单元格格式混合,则数字将关闭)

    以下是您在当前Sub中对其的称呼:

    sh1.Cells(x, 4) = CellContent( wrdDoc.Tables(1).Cell(9, 2) )
    

    谢谢你,蒂姆。您的代码运行得非常好,完全符合我的需要。谢谢你的答复。温迪
    sh1.Cells(x, 4) = CellContent( wrdDoc.Tables(1).Cell(9, 2) )