Normalerweise versuche ich, VBA in Excel zu vermeiden, aber es wäre praktisch, wenn Sie Text in eine Zelle eingeben und die Spalte breiter oder schmaler machen könnten, um den beim Eingeben oder Löschen verbleibenden Text aufzunehmen.
Dies hängt natürlich von der Länge des Texts in den anderen Zellen der Spalte ab.
"Auto-Fit während Sie tippen", könnte man es nennen.
Gibt es eine einfache Möglichkeit, dies in einem geeigneten Handler zu tun?
Ich bin nicht sicher, ob es eine Möglichkeit gibt, dies während des Tippens zu tun. Ich denke, Excel dehnt im Allgemeinen die Zellenansicht so aus, dass der gesamte Text angezeigt wird, bevor das Ereignis worksheet_change ausgelöst wird.
Dieser Code ändert die Größe der Spalte, nachdem Sie das Ziel geändert und in einen neuen Bereich verschoben haben. Platzieren Sie es im Arbeitsblattmodul.
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
Wenn Sie nur nach einer bestimmten Spalte suchen, müssen Sie die Zielspalte folgendermaßen überprüfen:
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
Ich kann mir keine Möglichkeit vorstellen, das zu tun, wonach Sie fragen, sondern etwas, das Ihren Bedürfnissen sehr nahe kommt. In modernen Excel-Versionen (2010+, ich kenne die Version 2007 nicht) können Sie die Größe Ihrer Spalte mithilfe des folgenden Makros ändern, um sie an die Daten anzupassen, sobald Sie die Dateneingabe in eine Zelle abgeschlossen haben.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.ScreenUpdating = False
ActiveSheet.Columns.AutoFit
End Sub
Fügen Sie das Makro in das Modul ThisWorkbook ein
Ich habe gerade versucht, die beiden vorherigen Antworten auf einem Blatt und sie haben nichts getan, idk, wenn das "ByVal Sh" das Problem ist? War es ein Tippfehler?
Wie auch immer, hier ist meine Antwort, überprüft es und es funktioniert:
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.
Dadurch wird die Spaltenbreite automatisch angepasst
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Columns.AutoFit
End Sub