ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] word vba怎样获取光标所在的任意一个合并单元格的宽和高

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-7-20 16:06 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  Word中有合并单元格的表格,当在任意一个合并单元格中单击鼠标时,怎样计算出此单元格的宽和高(如图中光标在内容为“单元格”的单元格中时,怎样计算出此合并单元格的宽和高),请各位老师指点,谢谢!   01.jpg
   word vba怎样获取光标所在的任意一个合并单元格的宽和高.zip (8.22 KB, 下载次数: 15)

TA的精华主题

TA的得分主题

发表于 2021-7-21 07:30 | 显示全部楼层
* 沈老师:下面代码不一定正确,实属抛砖引玉,仅供参考:
  1. Sub aaaa_MergeCell_WidthHeight()
  2.     Dim r As Range, i!
  3.    
  4.     Set r = Selection.Range
  5.     Selection.Cells(1).Select
  6.     Selection.MoveEnd 'if it's the last cell
  7.    
  8.     i = Selection.Rows.Count
  9.     r.Select
  10.    
  11.     With Selection.Cells(1)
  12.         MsgBox Round(.Width / 28.34, 2) & "cm/" & Round(.Height / 28.34, 2) * i & "cm"
  13.     End With
  14. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2021-7-21 10:17 来自手机 | 显示全部楼层
要计算单元格的高度,必须先设置属性中的行高。否则得不到正确的数据。因此先用代码调整单元格行距后,剩下的就很简单了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-7-21 11:32 | 显示全部楼层
413191246se 发表于 2021-7-21 07:30
* 沈老师:下面代码不一定正确,实属抛砖引玉,仅供参考:

谢谢,这种如果合并单元格的每行高度相同,高度计算是正确的;如果出现不同高度的行,则结果有误。如果通过计算合并单元格的所有行的高度相加,怎样确定表示合并单元格的行和列?比如例子中怎样快速得出合并单元格是(1,7),请老师指点!

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-7-21 11:34 | 显示全部楼层
zhanglei1371 发表于 2021-7-21 10:17
要计算单元格的高度,必须先设置属性中的行高。否则得不到正确的数据。因此先用代码调整单元格行距后,剩下 ...

老师,假如已经设置好行高和列宽(各行高度和各列宽度可能不相同),怎样计算出合并单元格的宽和高呢?谢谢!

TA的精华主题

TA的得分主题

发表于 2021-7-21 17:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
shenjianrong163 发表于 2021-7-21 11:34
老师,假如已经设置好行高和列宽(各行高度和各列宽度可能不相同),怎样计算出合并单元格的宽和高呢?谢 ...

刚又测试了下,发现获取不到。
但是若是想要判断是否是合并单元格的话,可以判定下面和右边的单元格是否存在。若不存在就是合并单元格。

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-7-21 20:24 | 显示全部楼层
zhanglei1371 发表于 2021-7-21 17:34
刚又测试了下,发现获取不到。
但是若是想要判断是否是合并单元格的话,可以判定下面和右边的单元格是否 ...

好的,谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-7-21 20:39 | 显示全部楼层
413191246se 发表于 2021-7-21 07:30
* 沈老师:下面代码不一定正确,实属抛砖引玉,仅供参考:

获取单元格所在的行号和列号应该是这样吧?好像对于合并和非合并单元格都适用!
Selection.Information(wdStartOfRangeRowNumber) '行
Selection.Information(wdStartOfRangeColumnNumber) '列

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-7-21 21:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
413191246se 发表于 2021-7-21 07:30
* 沈老师:下面代码不一定正确,实属抛砖引玉,仅供参考:

又出现一个问题:如果合并的单元格是多列多行的,"i = Selection.Rows.Count"中i的值一直都是1。

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-7-21 22:29 | 显示全部楼层
shenjianrong163 发表于 2021-7-21 21:16
又出现一个问题:如果合并的单元格是多列多行的,"i = Selection.Rows.Count"中i的值一直都是1。

想到了一种解决办法,移动光标来判断:
  1. Sub GetCellRows() '获取光标所在单元格的行数
  2.     Dim r%, rowStart%, rowNext$, rowTotal%
  3.     If Selection.Information(wdWithInTable) Then  '是否在表格中
  4.         rowStart = Selection.Information(wdStartOfRangeRowNumber) '获取光标所在单元格的行号
  5.         rowTotal = Selection.Information(wdMaximumNumberOfRows) '计算出表格的最大行
  6.         Selection.MoveDown Unit:=wdLine, Count:=1  '光标向下移动
  7.         If Selection.Information(wdWithInTable) Then  '移动后光标是否在表格中
  8.             rowNext = Selection.Information(wdStartOfRangeRowNumber)  '光标还在表格中,记录下一行的行号
  9.         Else
  10.             rowNext = rowTotal  '光标不在表格中,说明光标原来就在最后一行
  11.         End If
  12.         Selection.MoveUp Unit:=wdLine, Count:=1  '光标向上移动,还原到原来的位置
  13.         If rowNext > rowStart Then
  14.             r = rowNext - rowStart
  15.         Else
  16.             r = 1
  17.         End If
  18.         Debug.Print r
  19.     End If
  20. End Sub
复制代码


您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 18:40 , Processed in 0.043961 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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