如何在文本输入期间在 Excel 中自动调整列宽
Posted
技术标签:
【中文标题】如何在文本输入期间在 Excel 中自动调整列宽【英文标题】:How to auto-size column-width in Excel during text entry 【发布时间】:2011-01-04 03:11:52 【问题描述】:我通常尽量避免在 Excel 中使用 VBA,但能够在单元格中键入文本并使其列变宽或变窄以容纳输入或删除时剩余的文本会很方便。
当然,这将取决于列中其他单元格中的文本长度。
“键入时自动调整”,我猜你可能会这样称呼它。
有没有一种简单的方法可以在合适的处理程序中做到这一点?
【问题讨论】:
您不能在输入时自动调整,但您可以在输入完成后立即自动调整并退出单元格。 【参考方案1】:我不确定在您打字时是否有办法做到这一点。我认为 excel 通常会在触发 worksheet_change 事件之前拉伸单元格视图以显示所有文本。
在您更改目标并将其移动到新范围后,此代码将调整列的大小。将其放在工作表模块中。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim nextTarget As Range
Set nextTarget = Range(Selection.Address) 'store the next range the user selects
Target.Columns.Select 'autofit requires columns to be selected
Target.Columns.AutoFit
nextTarget.Select
End Sub
如果您只是想针对特定列执行此操作,则需要像这样检查目标列:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim nextTarget As Range
Set nextTarget = Range(Selection.Address) 'store the next range the user selects
If Target.Column = 1 Then
Target.Columns.Select 'autofit requires columns to be selected
Target.Columns.AutoFit
nextTarget.Select
End If
End Sub
【讨论】:
【参考方案2】:我想不出一种方法来满足您的要求,但非常接近您的需求。 在 Excel 的现代版本(2010+,我不知道 2007 版本)中,您可以使用以下宏来调整列的大小以在单元格中输入数据后立即适应数据。
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.ScreenUpdating = False
ActiveSheet.Columns.AutoFit
End Sub
将宏放入 ThisWorkbook 模块
【讨论】:
【参考方案3】:这将自动适应列宽
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Columns.AutoFit
End Sub
【讨论】:
【参考方案4】:我只是在一张纸上尝试了前两个答案,但他们没有做任何事情,如果“ByVal Sh”是问题所在?是不是打错字了?
无论如何,这是我的答案,检查过它并且有效:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target Is Nothing Then
Exit Sub
Else
With Target
.Columns.Select
.Columns.AutoFit
End With
End If
End Sub
-.Reverus。
【讨论】:
以上是关于如何在文本输入期间在 Excel 中自动调整列宽的主要内容,如果未能解决你的问题,请参考以下文章