ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 19001|回复: 21

[求助]请问如何将WORD表格中的内容提取到EXCEL中

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-12-3 16:11 | 显示全部楼层 |阅读模式

jX5EXL08.rar (104.56 KB, 下载次数: 673)


守柔老师,您好,我是一个汽车厂的产品管理人员,由于我们厂每种汽车的车型配置表是用WORD文件做的,车型配置表很多,现在我急需要将其中部分内容导入到EXCEL中,请您指导,非常感谢。

由于VBA我很差劲,目前我采用的方法如下:
1、将WORD文件用软件一次性全部转化为网页文件
2、将网页文件改后缀名为“XLS”。(这样EXCEL就能打开了它们了)。
3、借用您的一段代码,将所有转换过来的EXCEL文件集中到一个文件中,即一个文件占用一个工作表。
4、新建一个表,再利用公式将所有工作表中的需提取的内容提取到该表中。

但这种方法有以下敝端:
1、操作复杂,需要进行好几步。
2、每次只能转化60个左右的文件,如果再多了,上述第3步时EXCEL就报错。

我是想如果用VBA能实现以下的功能就好了:
1、运行宏后,自动弹出对话框,提示选择需要提取内容的文件。
2、选取所需要的文件后,可一次性将需要提取的内容提取的EXCEL中。


我需要转换的产品配置表示例内容见附件。再次感谢。

TA的精华主题

TA的得分主题

发表于 2007-12-4 06:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

'* +++++++++++++++++++++++++++++
'* Created By SHOUROU@ExcelHome 2007-12-4 6:48:49
'仅测试于System: Windows NT Excel: 11.0 Language: 2052
'№ 0278^The Code CopyIn [Moudle-Getdoc_Table]^'
'* -----------------------------
Option Explicit
Sub GetDocTablletoSheet()
'请在EXCEL VBE中引用MS WORD
    Dim wdApp As Word.Application, wdDoc As Word.Document, wdTable As Word.Table
    Dim strArray() As Variant, xlSheet As Worksheet, myDialog As FileDialog, oSel As Variant
    Dim myArray(7) As String
    On Error Resume Next
    '定义一个一维数组
    strArray = Array("车型代号", "整车编号", "内部尺寸", "发动机型号", "轴距(mm)", "车身", "变速箱(型式/型号)", "型式/型号")
    Set wdApp = New Word.Application '取得一个New Word对象
    Set myDialog = Application.FileDialog(msoFileDialogFilePicker)
    With myDialog
        .Filters.Clear    '清除所有文件筛选器中的项目
        .Filters.Add "所有 WORD 文件", "*.doc", 1    '增加筛选器的项目为所有WORD文件
        .AllowMultiSelect = True    '允许多项选择
        If .Show = -1 Then    '确定
        Application.ScreenUpdating = False
            For Each oSel In .SelectedItems    '在所有选取项目中循环
                Set wdDoc = wdApp.Documents.Open(FileName:=oSel, Visible:=False)
                Set wdTable = wdDoc.Tables(1)
                With wdTable '将指定的单元格内容赋值给数组
                    myArray(0) = Replace(.Cell(3, 2).Range.Text, Chr(13) & Chr(7), "")
                    myArray(1) = Replace(.Cell(5, 2).Range.Text, Chr(13) & Chr(7), "")
                    myArray(2) = Replace(.Cell(13, 4).Range.Text, Chr(13) & Chr(7), "")
                    myArray(3) = Replace(.Cell(15, 5).Range.Text, Chr(13) & Chr(7), "")
                    myArray(4) = Replace(.Cell(16, 3).Range.Text, Chr(13) & Chr(7), "")
                    myArray(5) = Replace(.Cell(22, 3).Range.Text, Chr(13) & Chr(7), "")
                    myArray(6) = Replace(.Cell(26, 3).Range.Text, Chr(13) & Chr(7), "")
                    myArray(7) = Replace(.Cell(29, 4).Range.Text, Chr(13) & Chr(7), "")
                End With
                wdDoc.close False
                Set xlSheet = ThisWorkbook.Sheets.Add '插入工作表
                With xlSheet
                    .Name = myArray(1)
                    .[A1:H1].Value = strArray '为单元格区域赋值
                    .[A2:H2].Value = myArray '为单元格区域赋值
                    .[A1:H2].Font.Name = "华文细黑" '以下均为格式设置
                    .[A1:H2].Font.Size = 11
                    .[A1:H2].Columns.AutoFit
                    With .[A1:H2].Borders(xlEdgeLeft)
                        .LineStyle = xlContinuous
                        .Weight = xlThin
                    End With
                    With .[A1:H2].Borders(xlEdgeTop)
                        .LineStyle = xlContinuous
                        .Weight = xlThin
                    End With
                    With .[A1:H2].Borders(xlEdgeBottom)
                        .LineStyle = xlContinuous
                        .Weight = xlThin
                    End With
                    With .[A1:H2].Borders(xlEdgeRight)
                        .LineStyle = xlContinuous
                        .Weight = xlThin
                    End With
                    With .[A1:H2].Borders(xlInsideVertical)
                        .LineStyle = xlContinuous
                        .Weight = xlThin
                    End With
                    With .[A1:H2].Borders(xlInsideHorizontal)
                        .LineStyle = xlContinuous
                        .Weight = xlThin
                    End With
                End With
            Next
        End If
    End With
    wdApp.Quit
    Set wdApp = Nothing
    Application.ScreenUpdating = True '恢复屏幕更新
End Sub
'----------------------

见附件:


ecY9qk99.rar (11.76 KB, 下载次数: 614)
[此贴子已经被作者于2007-12-4 7:07:11编辑过]

LQTptWel.rar

11.31 KB, 下载次数: 384

[求助]请问如何将WORD表格中的内容提取到EXCEL中

TA的精华主题

TA的得分主题

发表于 2007-12-4 10:12 | 显示全部楼层

续貂:引用守柔老师的宏,并同时按楼主意思汇总至一个表中(代码改动部分已突出显示)

Option Explicit
Sub GetDocTablletoSheet()
'请在EXCEL VBE中引用MS WORD
    Dim wdApp As Word.Application, wdDoc As Word.Document, wdTable As Word.Table
    Dim strArray() As Variant, xlSheet As Worksheet, myDialog As FileDialog, oSel As Variant
    Dim myArray(7) As String, r As Integer
    On Error Resume Next
    '定义一个一维数组
    strArray = Array("车型代号", "整车编号", "内部尺寸", "发动机型号", "轴距(mm)", "车身", "变速箱(型式/型号)", "型式/型号")
    Set wdApp = New Word.Application '取得一个New Word对象
   
    Set myDialog = Application.FileDialog(msoFileDialogFilePicker)
    With myDialog
        .Filters.Clear    '清除所有文件筛选器中的项目
        .Filters.Add "所有 WORD 文件", "*.doc", 1    '增加筛选器的项目为所有WORD文件
        .AllowMultiSelect = True    '允许多项选择
        If .Show = -1 Then    '确定
       
        Application.ScreenUpdating = False
       
            For Each oSel In .SelectedItems    '在所有选取项目中循环
                Set wdDoc = wdApp.Documents.Open(Filename:=oSel, Visible:=False)
                Set wdTable = wdDoc.Tables(1)
                With wdTable '将指定的单元格内容赋值给数组
                    myArray(0) = Replace(.Cell(3, 2).Range.Text, Chr(13) & Chr(7), "")
                    myArray(1) = Replace(.Cell(5, 2).Range.Text, Chr(13) & Chr(7), "")
                    myArray(2) = Replace(.Cell(13, 4).Range.Text, Chr(13) & Chr(7), "")
                    myArray(3) = Replace(.Cell(15, 5).Range.Text, Chr(13) & Chr(7), "")
                    myArray(4) = Replace(.Cell(16, 3).Range.Text, Chr(13) & Chr(7), "")
                    myArray(5) = Replace(.Cell(22, 3).Range.Text, Chr(13) & Chr(7), "")
                    myArray(6) = Replace(.Cell(26, 3).Range.Text, Chr(13) & Chr(7), "")
                    myArray(7) = Replace(.Cell(29, 4).Range.Text, Chr(13) & Chr(7), "")
                End With
                wdDoc.Close False

                r = r + 1'以下开始稍作更改
                Sheets(1).Range(Cells(r, 1), Cells(r, 8)).Value = myArray '为单元格区域赋值
            Next
            With Sheets(1)
                .Rows(1).Insert
                .[A1:H1].Value = strArray
                .UsedRange.Columns.AutoFit
            End With

        End If
    End With
    wdApp.Quit
    Set wdApp = Nothing
    Application.ScreenUpdating = True '恢复屏幕更新
End Sub


[此贴子已经被作者于2007-12-4 10:22:30编辑过]

TA的精华主题

TA的得分主题

发表于 2007-12-4 10:25 | 显示全部楼层

请问守柔老师:

将指定的单元格内容赋值给数组时,myArray(0) = Replace(.Cell(3, 2).Range.Text, Chr(13) & Chr(7), "")

等号右边是怎么解释的,我没看懂

[此贴子已经被作者于2007-12-4 10:26:27编辑过]

TA的精华主题

TA的得分主题

发表于 2007-12-4 10:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
QUOTE:
以下是引用tangcong在2007-12-4 10:25:58的发言:

请问守柔老师:

将指定的单元格内容赋值给数组时,myArray(0) = Replace(.Cell(3, 2).Range.Text, Chr(13) & Chr(7), "")

等号右边是怎么解释的,我没看懂


Word中返回单元格数据时,除了单元格内容外,还包含单元格结束标记(CHR(13)和右侧的单元格右侧竖线(CHR(7)),因此,在返回值的过程中,可以使用替换(REPLACE)、文本提取(如MID,LEFT,结合LEN等函数)或者使用Word RANGE方法等进行取值,以去除这两个字符串。

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-12-4 11:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

谢谢各位老师!

非常感谢守柔老师以及tangcong老师能在这么短的时间内给我回复,尤其是守柔老师,这么早就在网上了,真是太感谢了。辛苦您了。

运行后完全满足我工作的需要。再次感谢了。

[em17][em44]

TA的精华主题

TA的得分主题

发表于 2007-12-4 13:26 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-12-14 20:11 | 显示全部楼层

为什么我一运行就报错呢?找不到工程或库

TA的精华主题

TA的得分主题

发表于 2007-12-15 07:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
QUOTE:
以下是引用wangvivian在2007-12-14 20:11:42的发言:

为什么我一运行就报错呢?找不到工程或库

因为你没有细看代码注释。

Option Explicit
Sub GetDocTablletoSheet()
'请在EXCEL VBE中引用MS WORD
EXCEL中,按【ALT+F11】组合键,进入VB编辑器,单击【工具】/【引用】命令,打开【引用-Project】对话框,在【引用】中勾选对于【Microsoft Word 11.0 Objict Library】的引用。

TA的精华主题

TA的得分主题

发表于 2007-12-21 21:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢守柔大哥这样及时的回复。我找到了!!
买了本您的大作,正在拜读中。。。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-15 14:29 , Processed in 0.029787 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表