10

我通常会尽量避免在 Excel 中使用 VBA,但能够在单元格中键入文本并使其列变宽或变窄以容纳输入或删除时剩余的文本会很方便。

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

“键入时自动调整”,我想您可能会这样称呼它。

有没有一种简单的方法可以在合适的处理程序中做到这一点?

4

4 回答 4

11

我不确定您打字时是否有办法做到这一点。我认为 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
于 2010-01-12T14:53:47.017 回答
0

这将自动适合列宽

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Columns.AutoFit
End Sub
于 2015-01-14T13:05:04.640 回答
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 模块

于 2014-10-01T10:52:57.777 回答
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。

于 2017-12-09T21:33:33.490 回答