我通常会尽量避免在 Excel 中使用 VBA,但能够在单元格中键入文本并使其列变宽或变窄以容纳输入或删除时剩余的文本会很方便。
当然,这将取决于列中其他单元格中的文本长度。
“键入时自动调整”,我想您可能会这样称呼它。
有没有一种简单的方法可以在合适的处理程序中做到这一点?
我通常会尽量避免在 Excel 中使用 VBA,但能够在单元格中键入文本并使其列变宽或变窄以容纳输入或删除时剩余的文本会很方便。
当然,这将取决于列中其他单元格中的文本长度。
“键入时自动调整”,我想您可能会这样称呼它。
有没有一种简单的方法可以在合适的处理程序中做到这一点?
我不确定您打字时是否有办法做到这一点。我认为 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
这将自动适合列宽
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Columns.AutoFit
End Sub
我想不出一种方法来做你要求的事情,但非常接近你的需要。在 Excel 的现代版本(2010+,我不知道 2007 版本)中,您可以使用以下宏来调整列的大小以适应数据,只要您在单元格中输入数据。
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.ScreenUpdating = False
ActiveSheet.Columns.AutoFit
End Sub
将宏放入 ThisWorkbook 模块
我只是在一张纸上尝试了前两个答案,但他们什么也没做,如果“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。