如何在Microsoft Word VBA中获取嵌套表格单元格的高度?
解决Word VBA中嵌套表格单元格高度获取错误的问题
当嵌套表格单元格设置为自动调整高度时,Cell.Height属性会返回9999999(Word用来表示“未固定高度”的占位值),这就是你遇到问题的核心原因。以下是两种可行的获取实际高度的方案:
方案1:通过单元格Range的Height属性直接获取
Word的Range对象会返回内容实际占据的高度(包含单元格内边距),不受自动高度设置影响,实现起来最简洁:
' 定位到目标表单域所在的单元格 Dim targetCell As Cell Set targetCell = ActiveDocument.Fields(xx).Result.Cells(1) ' 获取单元格实际高度 Dim actualCellHeight As Single actualCellHeight = targetCell.Range.Height
方案2:通过单元格上下边缘的位置差计算
利用Range.Information获取单元格顶部和底部相对于页面的位置,差值即为实际高度,适合需要更精确位置数据的场景:
Dim cellRange As Range Set cellRange = ActiveDocument.Fields(xx).Result.Cells(1).Range ' 获取顶部和底部的垂直位置(使用Word内置常量) Dim topPos As Single, bottomPos As Single topPos = cellRange.Information(wdVerticalPositionRelativeToPage) bottomPos = cellRange.Information(wdVerticalPositionOfBottomRelativeToPage) ' 计算实际高度 Dim cellHeight As Single cellHeight = bottomPos - topPos
修改你的原有代码
建议直接操作对象而非依赖Selection,避免干扰用户当前选择,同时获取正确尺寸:
Dim targetField As Field Set targetField = ActiveDocument.Fields(xx) Dim targetCell As Cell Set targetCell = targetField.Result.Cells(1) ' 获取单元格实际高度和宽度 Dim cellHeight As Single, cellWidth As Single cellHeight = targetCell.Range.Height cellWidth = targetCell.Width ' 获取表单域的基准位置 Dim fieldHoriz As Single, fieldVert As Single fieldHoriz = targetField.Result.Information(wdHorizontalPositionRelativeToPage) fieldVert = targetField.Result.Information(wdVerticalPositionRelativeToPage) ' 计算目标坐标 Dim x1 As Single, x2 As Single, y1 As Single, y2 As Single x1 = fieldHoriz - (cellWidth / 2) x2 = fieldHoriz + (cellWidth / 2) y1 = fieldVert + (cellHeight / 2) + (targetField.Result.Font.Size / 2) y2 = fieldVert - (cellHeight / 2) + (targetField.Result.Font.Size / 2)
内容的提问来源于stack exchange,提问作者andrejtm
相关产品推荐
相关产品推荐

