当前位置:首页 > VBA&EXCEL > 正文内容

如何使用VBA代码将Word的表格批量写入Excel?

九天狼7年前 (2019-05-29)VBA&EXCEL7341

晚上好啊都……呃……不知道该说什么了,直接说正事吧……

话说我最近比较懒……不是,我最近事情比较多……你们在后台提了很多问题,有一部分是我们之前分享过的,戳菜单【VBA相关】→【常用小代码】,可见详情;还有一部分是我们还没有分享过,以后会分享……

当然啦,以后可能是很久,也可能就在明天……不过话说回来,明天的事谁说的准呢?

有蛮多的朋友询问VBA多文件协同应用的问题,比如如何将Excel的数据写入PPT文件?如何将Word的数据写入Excel?

……

厚颜无耻的说一句,群众的呼声当然就是我们前进的方向……

所以我们今天分享的VBA小代码的内容是:

如何将Word文件的表格数据批量写入Excel?

比如说,有一个Word文件,里面有十几张表格,现在急需将每个表格的数据复制到Excel,每个表格自成一份Sheet,关键是很不巧,你的秘书MISS李请假一个月回老家了……

操作动画如下:


代码如下

Sub GetWordTable()
    '读取word中的表格数据到excel
    Dim WdApp As Object
    Dim objTable As Object
    Dim objDoc As Object
    Dim strPath As String
    Dim shtEach As Worksheet
    Dim shtSelect As Worksheet
    Dim k As Long, x As Long, y As Long
    Dim i As Long, j As Long
    Dim brr As Variant
    On Error Resume Next
    Set WdApp = CreateObject("Word.Application")
    With Application.FileDialog(msoFileDialogFilePicker)
        .Filters.Add "Word文件", "*.doc*", 1
        '只显示word文件
        .AllowMultiSelect = False
        '禁止多选文件
        If .Show Then strPath = .SelectedItems(1) Else Exit Sub
    End With
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set shtSelect = ActiveSheet
    '当前表赋值变量shtSelect,方便代码运行完成后叶落归根回到开始的地方
    For Each shtEach In Worksheets
    '删除当前工作表以外的所有工作表
        If shtEach.Name <> shtSelect.Name Then shtEach.Delete
    Next
    shtSelect.Name = "EH看见星光"
    '这句代码不是无聊,作用在于……你猜……
    '……其实是避免下面的程序工作表名称重复
    Set objDoc = WdApp.documents.Open(strPath)
    '后台打开用户选定的word文档
    For Each objTable In objDoc.tables
    '遍历文档中的每个表格
        k = k + 1
        Worksheets.Add after:=Worksheets(Worksheets.Count)
        '新建工作表
        ActiveSheet.Name = k & "表"
        objTable.Range.Copy
        '整表复制
        ActiveSheet.Paste
        'word表粘贴到excel,保留word表的格式
        '整表复制的方法无法避免身份证之类数据的变形,如果有这样的数据,最好使用如下单元格遍历
        x = objTable.Rows.Count
        'table的行数
        y = objTable.Columns.Count
        'table的列数
        ReDim brr(1 To x, 1 To y)
        '以下遍历行列,数据写入数组brr
        For i = 1 To x
            For j = 1 To y
                brr(i, j) = "'" & Application.Clean(objTable.Cell(i, j).Range.Text)
                'Clean函数清除制表符等
                '半角单引号将数据统一转换为文本格式,避免身份证等数值变形
            Next
        Next
        With [a1].Resize(x, y)
            .Value = brr
            '数据写入Excel工作表
            .Borders.LineStyle = 1
            '添加边框线
        End With
    Next
    shtSelect.Select
    objDoc.Close: WdApp.Quit
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    Set objDoc = Nothing
    Set WdApp = Nothing
    MsgBox "共获取:" & k & "张表格的数据。"
End Sub


如果内容对你有用,请花费几秒钟给个评论!

由于评论审核机制,可能您的评论暂时不可见,不影响查看回复可见的内容!

扫描二维码推送至手机访问。

版权声明:本文由云淡风轻Mr.Liu发布,如需转载请注明出处。

本文链接:http://mail.nylmj.cn/post/105.html

分享给朋友:

相关文章

HI,你会用函数实现网页数据抓取吗?

HI,你会用函数实现网页数据抓取吗?

随着互联网的高速发展,网页数据愈发成为数据分析过程中最重要的数据来源之一。 也许正是基于这样的考量,从2013版开始,Excel新增了一个名为Web的函数类别,使用其下的函数,可以通过网页链接从Web…

不做加班狗——批量生成带照片的准考证

不做加班狗——批量生成带照片的准考证

Word提供的邮件合并功能可以帮助咱们轻松的制作工资条、通知书、邀请函、明信片、准考证、毕业证书等等,一般做法是用Word文档做一个模板,将信息的数据源存放到Excel表格里,通过邮件合并建立起表格与…

VLOOKUP函数变态用法,74.2%的人不知道

VLOOKUP函数变态用法,74.2%的人不知道

大家好,我是星光。 咱们今天继续聊聊VLOOKUP函数,有人问我为啥这么执迷于VLOOKUP函数,聊了一期又一期的。这个说来话就长了,这牵扯到俺的一点小隐私。和很多表亲一样,VLOOKUP是俺掌握的第…

【Excel函数篇】21个最常用的日期函数组合

【Excel函数篇】21个最常用的日期函数组合

日期在数据分析中常常是极其重要的一个维度,今天整理了21个最常用的日期函数组合,分需~1、=TODAY()计算当前的系统日期2、=NOW()计算当前系统日期和时间3、= NOW()-TODAY()计算…

批量将图片插入到表格中?So Easy!

批量将图片插入到表格中?So Easy!

天天我等着你等着你捉泥鳅 大哥哥好不好咱们去捉泥鳅……[aplayer url="http://rr03.sycdn.kuwo.cn/872f98ac705fee2c92997ac112b3…

一键汇总各分表数据到总表

一键汇总各分表数据到总表

诸君,下午好。今天和大家分享的是VBA常用小代码系列第五篇:一键汇总各分表数据到总表。照例举个栗子,如下图,一个工作簿,包含多个工作表,现在需要将各个分表的数据汇总到总表中。碰到这样的问题,有些小伙伴…