ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] excel中对于word中含有不规则表格的操作

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-3-26 21:17 | 显示全部楼层 |阅读模式
工作中需要用excel中的数据合成模板那样的word文档,这个前面的合成工作我已经弄好了,但因为个别地方格式问题,还有就是有些子表格内容不固定,要根据excel内数据来确定表格是几行,所以想了个办法,在需要编辑的位置做上标记,生成完毕后用程序统一进行格式处理,就是把“此行删除”位置的行删除掉,如果是规则的表格都可以实现,但是现在这个模板里表格复杂,找了一些代码都处理不了,求大师帮下忙。
微信图片_20240326211335.png
表格是这样的
微信图片_20240326211442.png

不规则表格的操作.rar (94.9 KB, 下载次数: 11)



TA的精华主题

TA的得分主题

发表于 2024-3-27 02:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
image.jpg

TA的精华主题

TA的得分主题

发表于 2024-3-27 19:55 | 显示全部楼层

Option Explicit
Sub test()
    Dim ar(), i&, r&, wdApp As Word.Application, strFileName$, strPath$, strSaveName$
   
    strPath = ThisWorkbook.Path & "\"
    strFileName = strPath & "模板.docx"
    If Dir(strFileName) = "" Then MsgBox "模板文件不存在,请检查!", vbExclamation: Exit Sub
   
    Application.ScreenUpdating = False
    On Error Resume Next
    Set wdApp = GetObject(, "Word.Application")
    If Err <> 0 Then
        Set wdApp = New Word.Application
    End If
   
    With wdApp.documents.Open(strFileName)
        strSaveName = strPath & "模板(希望达到的效果)"
        With .Content.Find
            .ClearFormatting
            .Forward = True
            Do While .Execute(FindText:="此行删除") = True
                .Parent.Select
                With wdApp.Selection
                    If .Information(wdWithInTable) = True Then
                        .selectRow
                        r = r + 1
                        ReDim Preserve ar(1 To r)
                        Set ar(r) = .Range
                    End If
                End With
            Loop
        End With
        For i = 1 To UBound(ar)
            ar(i).Rows.Delete
        Next i
        .SaveAs strSaveName
        .Close
    End With
   
   
    If Err <> 0 Then wdApp.Quit
    Set wdApp = Nothing
    Application.ScreenUpdating = True
    Beep
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-3-27 19:56 | 显示全部楼层
参与一下。。。

不规则表格的操作.rar

64.55 KB, 下载次数: 10

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-28 19:58 | 显示全部楼层

可能是我版本较低,我是wps专业版的vba,代码跑不起来。
67E77446-A97F-4807-9E13-99FEEDCC9AF3.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-28 20:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 athent 于 2024-3-28 20:04 编辑

谢谢,你的代码跑下来,可以把子表中的删掉,主表中的删不了,运行下来结果是下面图里的样子
111.png
我自己又改了下代码,就可以完美运行了,下面是我改的代码


Private Sub CommandButton1_Click()
    ' 定义变量
    Dim objWord As Object
    Dim objDoc
    Dim objTable
    Dim oC
    Dim i As Long, j As Long
    Dim blnDeleteRow As Boolean

    ' 创建Word应用程序对象
    Set objWord = CreateObject("Word.Application")
    objWord.Visible = True

    ' 打开指定的Word文档
    Set objDoc = objWord.Documents.Open(ThisWorkbook.Path & "\模板.docx")

    ' 遍历文档中的每个表格
    For Each objTable In objDoc.tables
        ' 从后往前遍历表格的每个单元格
        For i = objTable.Range.Cells.Count To 1 Step -1
            Set oC = objTable.Range.Cells(i)
            'oC.Select
            If Left(oC.Range.Text, 4) = "此行删除" Then
                oC.Range.Rows.Delete
            End If
            If oC.tables.Count > 0 Then
                For j = oC.tables(1).Rows.Count To 1 Step -1
                    Set oCSub = oC.tables(1).Columns(1).Cells(j)
                    'oCSub.Select
                    If Left(oCSub.Range.Text, 4) = "此行删除" Then
                        oCSub.Range.Rows.Delete
                    End If
                Next j
            End If
        Next
    Next objTable

    ' 保存并关闭文档
    objDoc.Save
    objDoc.Close

    ' 退出Word应用程序
    objWord.Quit

    ' 释放对象
    Set objTable = Nothing
    Set objDoc = Nothing
    Set objWord = Nothing
End Sub

TA的精华主题

TA的得分主题

发表于 2024-3-28 20:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
athent 发表于 2024-3-28 19:58
可能是我版本较低,我是wps专业版的vba,代码跑不起来。

我没有wps,你可参考这贴
https://club.excelhome.net/forum ... ead&tid=1682387

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-28 20:10 | 显示全部楼层

谢谢,可以完美处理不规则表中的子表格,这段代码还没法处理主表中的删除项,运行下来是下图的情况

后来我改了下代码就可以完美处理了
不过如果子表格也是不规则的表就要出错,我继续啃下代码,看能不能自己搞定。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-28 20:13 | 显示全部楼层

谢谢,可以完美处理不规则表中的子表格,这段代码还没法处理主表中的删除项,运行下来是下图的情况

后来我改了下代码就可以完美处理了
不过如果子表格也是不规则的表就要出错,我继续啃下代码,看能不能自己搞定。

TA的精华主题

TA的得分主题

发表于 2024-3-29 08:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
image.png
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-27 19:43 , Processed in 0.048423 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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