|
本帖最后由 ggmmlol 于 2018-1-4 15:20 编辑
EXCEL单元格格式设置中的“自动调整行高”功能,对于合并单元格并不适合。
手动进行调整的话,可以用一个文本框的自动适合文字的设置,来得到合适的总高度,然后把这个总高度按合并单元格的行数进行均分,以此设置它们的行高。
但是,上述手动 操 作效率很低,如果表格中的合并单元格很多的话,那就会非常麻 烦。
在“以人为本”的思想为指导下,这种麻 烦 事,还是交给电脑来做吧!
附件使用方法:很简单的,
把附件中的宏工作薄用EXCEL打开,再另存为 加载宏 格式(后缀名为.xlam),保存在EXCEL默认的加载宏文件夹下,然后在“开发工具”选项卡上点“加载项”按钮,在弹出的对话框中,把“合并单元格自动行高”勾选上就可以了。
当你在合并单元格中编辑完成切换到其它单元格时,该程序就会自动运行。无论合并单元格字体的名称、大小是什么,它都能完成任务。
更新内容:
1、程序运行过程中,不再在当前的活动工作薄中添加、删除文本框和其它任何对象,以免影响到活动工作薄中的文本框命名。需要得到合并单元格最合适的行高时,直接使用预置于加载宏工作薄内的文本框,在对用户无任何打扰的情况下完成任务,做到“随风潜入夜,润物细无声”。
2、直接提供做好的加载宏。
模块1:
- Public myMergeAreaAddress As String
- Public myMergeAreaRowheights As String
- Public ht As Single
- Public vtAlign As Excel.Constants
- Public WrapTxt As Boolean
- Sub Undo_MergeAreaRowsAutofit()
- With Range(myMergeAreaAddress)
- .VerticalAlignment = vtAlign
- rc = .Rows.Count
- rh = Split(myMergeAreaRowheights, ",")
- For i = 1 To rc
- .Rows(i).RowHeight = rh(i)
- Next
- End With
- Application.OnRepeat "恢复'合并单元格自动行高'操作", "Repeat_MergeAreaRowsAutofit"
- End Sub
- Sub Repeat_MergeAreaRowsAutofit()
- With Range(myMergeAreaAddress)
- .EntireRow.RowHeight = ht ' 按平均高度设置行高
- .VerticalAlignment = xlCenter '垂直方向居中对齐
- .WrapText = True
- End With
- Application.OnUndo "撤销'合并单元格自动行高'操作", "Undo_MergeAreaRowsAutofit"
- End Sub
复制代码
ThisWorkbook模块:
- Public WithEvents ExcelApp As Excel.Application
- Private tbx As Shape
- Private Sub ExcelApp_SheetChange(ByVal Sh As Object, ByVal Target As Range)
- Dim tbx As Shape, sobj As Object
- If Target.MergeCells Then '如果是合并单元格
- Set myMergeArea = Target.Cells(1).MergeArea
- With myMergeArea ' '保存合并单元格的位置、大小、及其字体的名字、大小
- myMergeAreaAddress = .Address '地址
- vtAlign = .VerticalAlignment '竖直对齐方式
- Debug.Print .WrapText
- txt = .Cells(1).Text
- fn = .Font.Name
- fs = .Font.Size
- lft = .Left
- wdth = .Next.Offset(, .Rows(1).Count).Left - .Left
- rc = .Rows.Count
- For i = 1 To rc
- myMergeAreaRowheights = myMergeAreaRowheights & "," & .Rows(i).RowHeight '记录“历史”行高
- Next
- Set sobj = tbx.TextFrame2.TextRange
- With sobj '设置文本框
- .Parent.AutoSize = False
- .Parent.WordWrap = True
- .Font.Name = fn
- .Font.Size = fs
- .Text = txt
- End With
- With tbx
- .Width = wdth
- ht = tbx.Height / rc '计算平均高度
- End With
- Repeat_MergeAreaRowsAutofit
- End With
- Application.OnUndo "撤销'合并单元格自动行高'操作", "Undo_MergeAreaRowsAutofit"
- Application.OnRepeat "恢复'合并单元格自动行高'操作", "Repeat_MergeAreaRowsAutofit"
- End If
- End Sub
- Private Sub Workbook_Open()
- Set ExcelApp = ThisWorkbook.Application
- Set tbx = ThisWorkbook.Sheets(1).Shapes("TextBox")'文本框预置于加载宏工作薄内,以变量加以引用。
- End Sub
复制代码
|
评分
-
5
查看全部评分
-
|