ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 【求助】如何确定word表格的合并单元格的合并行数和列数?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-11-13 23:02 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

①利用选区的错误累积数获得合并行列数;
②利用SelectRow和SelectColumn方法获得合并行列数
两个思路全都失败了,原因是word表格合并后行索引和列索引的逻辑不一样:
行是绝对的索引,合并行并不影响每行的索引号,索引不再连续
列是相对于前一列的,如图原本第3列,合并以后变成了第2列,列索引一定是连续的

方案②因为上面的合并单元格,造成红色区域错误,那到底怎么样才能正确获得每个合并单元格到底合并了多少列?????

代码如下,求指教!


Sub 测试()
    Dim CR As cell
    For Each CR In ActiveDocument.Tables(1).Range.Cells
        CR.Range.Text = 单元格信息(CR)
    Next
End Sub
Function 单元格信息(myCell As cell)
    Dim results_arr(1 To 3) As Variant
    Dim 有合并行 As Boolean: 有合并行 = False
    Dim 有合并列 As Boolean: 有合并列 = False
    myCell.Select ' 判断是否存在合并行
    Selection.SelectRow
    合并行数 = Selection.Rows.Count
    If 合并行数 > 1 Then
        有合并行 = True
    End If
   
    myCell.Select ' 判断是否存在合并列
    Selection.SelectColumn
    合并列数 = Selection.Columns.Count
    If 合并列数 > 1 Then
        有合并列 = True
    End If
    results_arr(1) = 有合并行 Or 有合并列
    results_arr(2) = 合并行数
    results_arr(3) = 合并列数
    单元格信息 = "(" & myCell.RowIndex & "-" & myCell.ColumnIndex & "):" & VBA.Join(results_arr, ";")
End Function


da03c7f20ff2730ddce03ab7beda0f8.png

TA的精华主题

TA的得分主题

发表于 2023-11-14 00:15 | 显示全部楼层
本帖最后由 batmanbbs 于 2023-11-14 09:24 编辑

计算合并的行数可以选中单元格再选行,计算合并的列数不要选中单元格,直接选中列。
PS:楼主不要纠结这些,因为你的表格还是很规范的,遇到不规范的表格怎么计算都是不准确的。
image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-11-17 09:09 | 显示全部楼层
batmanbbs 发表于 2023-11-14 00:15
计算合并的行数可以选中单元格再选行,计算合并的列数不要选中单元格,直接选中列。
PS:楼主不要纠结这些 ...

怎么单独选中列啊,直接.Columns(n).select,有跨列合并的时候就报错呀

TA的精华主题

TA的得分主题

发表于 2023-11-17 18:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
15221995200 发表于 2023-11-17 09:09
怎么单独选中列啊,直接.Columns(n).select,有跨列合并的时候就报错呀

光标定位到单元格中,但不要选中单元格
判断合并列的那句 mycell.select 改为:
activedocument.range(mycell.range.start,mycell.range.start).Select

TA的精华主题

TA的得分主题

发表于 2023-11-18 17:43 | 显示全部楼层
https://club.excelhome.net/threa ... tml?_dsign=a9563e02

试一下这个


Sub 找出拆分的单元格且合并()
    Dim tbl As Table
    Dim cell As cell
    Dim i, j, errorCount, 开始错误的行号, zonghang, zonglie As Integer
    Dim a As Double
   
    Set tbl = ActiveDocument.Tables(1)
   
    zonghang = ActiveDocument.Tables(1).Rows.count
    zonglie = ActiveDocument.Tables(1).Rows.count
    For j = 1 To zonglie
        On Error Resume Next ' 启用错误处理

        For i = 1 To zonghang
            tbl.cell(i, j).Select

            If Err.Number <> 0 Then
                If errorCount = 0 Then
                    开始错误的行号 = i - 1
                End If
                ' 错误计数器 +1
                errorCount = errorCount + 1
                ' 清除错误
                Err.Clear
            End If
        Next i

        On Error GoTo 0 ' 禁用错误处理

        If 开始错误的行号 <> 0 Then
            MsgBox ("合并的单元格在:第1个表格的第" & 开始错误的行号 & "行第" & j & "列,而且合并了" & errorCount + 1 & "行")
            tbl.cell(开始错误的行号, j).Select

            Call 拆分单元格(errorCount + 1, 1)

'            MsgBox ("已经合并:第1个表格的第" & 开始错误的行号 & "行第" & j & "列,合并了" & errorCount + 1 & "行")
        Else
'            MsgBox ("在第" & j & "列中未找到合并的单元格")
        End If
        errorCount = 0
    Next j

End Sub
Function 拆分单元格(Rows, Coluns)
    Selection.Cells.Split NumRows:=Rows, NumColumns:=Coluns, MergeBeforeSplit:=False
End Function

TA的精华主题

TA的得分主题

发表于 2023-11-22 07:41 | 显示全部楼层
过客fppt 发表于 2023-11-18 17:43
https://club.excelhome.net/thread-1669497-1-1.html?_dsign=a9563e02

试一下这个

这个代码存在横向列合并的情况就不行了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-10-23 20:31 , Processed in 0.037839 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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