2010-01-12 22 views
6

我通常会尽量避免在Excel中使用VBA,但可以方便地将文本输入到单元格中,并使其列变得更宽或更窄以容纳在输入或删除时剩余的文本。如何在文本输入期间在Excel中自动调整列宽

这当然会受到列中其他单元格中文本长度的影响。 “你自动适合你输入”,我猜你可能会这样称呼它。

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

+1

您不能自动填写*作为*键入,但只要完成键入并退出单元格,就可以自动创建。 – 2011-08-26 07:31:49

回答

9

我不确定在打字时是否有办法做到这一点。我认为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 
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模块

0

这将自动适应列宽

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

我只是想在一张纸上先前的两个答案,他们没有做任何事情,IDK的如果“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。

+0

srry,没有真正意识到** OLD **这篇文章是怎么回事!大声笑 – Reverus 2017-12-09 21:34:23

相关问题