|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
昨天老婆处理EXCEL的时候遇到的,EXCEL自带的最适合行高不能作用于合并单元格。
google了很久都找不到方法,听说excel宏很强大我就自己试试编写一下这个功能。。
花了几个小时终于搞定,现在分享给大家,顺便大家帮忙找找BUG~~
主要思路:建立1个临时的工作表T,复制 合并单元格的 内容、字体大小、宽度 到临时表T
然后让EXCEL去计算最适合行高 goodHeight,我再把这个行高 与 合并单元格包含的所有行的行高去比较
计算平均每行需要多少高度 (goodHeight / rows.count) 如果这个高度比这个row的高度低 那么就不要设置(会破坏这一行已经设置好了的高度)
最后删除临时表T.- Sub My_MergeCell_AutoHeight()
- Dim rh As Single, mw As Single
- Dim rng As Range, rrng As Range, n1%, n2%
- Dim aw As Single, rh1 As Single
- Dim m$, n$, k
- Dim ir1, ir2, ic1, ic2
- Dim mySheet As Worksheet
- Dim selectedA As Range
- Dim wrkSheet As Worksheet
-
- Application.ScreenUpdating = False
- Set mySheet = ActiveSheet
- On Error Resume Next
- Err.Number = 0
- Set selectedA = Application.Intersect(ActiveWindow.RangeSelection, mySheet.UsedRange)
- selectedA.Activate
- If Err.Number <> 0 Then
- g = MsgBox("请先选择需要'最合适行高'的行!", vbInformation)
- Return
- End If
- selectedA.EntireRow.AutoFit
- Set wrkSheet = ActiveWorkbook.Worksheets.Add
- For Each rrng In selectedA
- If rrng.Address <> rrng.MergeArea.Address Then
- If rrng.Address = rrng.MergeArea.Item(1).Address Then
-
- 'If (Application.Intersect(selectedA, rrng).Address <> rrng.Address) Then
- ' GoTo gotoNext
- 'End If
-
- Dim tempCell As Range
- Dim width As Double
- Dim tempcol
- width = 0
- For Each tempcol In rrng.MergeArea.Columns
- width = width + tempcol.ColumnWidth
- Next
- wrkSheet.Columns(1).WrapText = True
- wrkSheet.Columns(1).ColumnWidth = width
- wrkSheet.Columns(1).Font.Size = rrng.Font.Size
- wrkSheet.Cells(1, 1).Value = rrng.Value
- wrkSheet.Activate
- wrkSheet.Cells(1, 1).RowHeight = 0
- wrkSheet.Cells(1, 1).EntireRow.Activate
- wrkSheet.Cells(1, 1).EntireRow.AutoFit
- mySheet.Activate
- rrng.Activate
- If (rrng.RowHeight < wrkSheet.Cells(1, 1).RowHeight) Then
- Dim tempHeight As Double
- Dim tempCount As Integer
- tempHeight = wrkSheet.Cells(1, 1).RowHeight
- tempCount = rrng.MergeArea.Rows.Count
- For Each addHeightRow In rrng.MergeArea.Rows
-
- If (addHeightRow.RowHeight < tempHeight / tempCount) Then
- addHeightRow.RowHeight = tempHeight / tempCount
- End If
- tempHeight = tempHeight - addHeightRow.RowHeight
- tempCount = tempCount - 1
- Next
- End If
- End If
- End If
- Next
- Application.DisplayAlerts = False '删除工作表警告提示去消
- wrkSheet.Delete
- Application.DisplayAlerts = True
- Application.ScreenUpdating = True
- End Sub
复制代码 大家讨论讨论还有什么可以改进的没, 下面的文件是宏文件,需要使用EXCEL加载宏功能添加。加载后有一个新的工具栏,点红色灯泡图标就能使用这个功能了。
[ 本帖最后由 621107 于 2011-3-28 17:17 编辑 ]
补充内容 (2014-6-12 19:28):
新版本的excel 可能已经用不了这个方式去加载宏了 大家 在excel中 自己添加宏 把这代码贴过去 新增宏 去使用吧
补充内容 (2014-6-12 19:29):
代码有一次小更新在 32楼 |
评分
-
3
查看全部评分
-
|