如何在文本输入期间自动调整Excel中的列宽

时间:2010-01-12 10:48:29

标签: excel vba column-width

我通常会尝试在Excel中避免使用VBA,但是能够在单元格中键入文本并使其列更宽或更窄以适应输入或删除时保留的文本将非常方便。

当然,这将受制于列中其他单元格中文本的长度。

'键入时自动调整',我猜您可以调用它。

有一种简单的方法可以在合适的处理程序中执行此操作吗?

4 个答案:

答案 0 :(得分:10)

我不确定在你输入时是否有办法做到这一点。我认为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

答案 1 :(得分:0)

我想不出办法可以做你要求的东西但是非常接近你需要的东西。 在Excel的现代版本(2010年以上,我不了解2007版本)中,您可以使用以下宏来调整列的大小,以便在单元格中输入数据后立即调整数据。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Application.ScreenUpdating = False
    ActiveSheet.Columns.AutoFit
End Sub

将宏放入ThisWorkbook模块

答案 2 :(得分:0)

这将自动适合列宽

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Columns.AutoFit
End Sub

答案 3 :(得分:0)

我刚刚在一张纸上尝试了前两个答案而且他们没有做任何事情,如果“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