2010-01-12 48 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