Как автоматически изменить ширину столбца в Excel при вводе текста - PullRequest
9 голосов
/ 12 января 2010

Обычно я стараюсь избегать VBA в Excel, но было бы удобно иметь возможность вводить текст в ячейку, а его столбец становиться все шире или уже, чтобы вместить текст, оставшийся после ввода или удаления.

Конечно, это будет зависеть от длины текста в других ячейках столбца.

«Подгонка по мере ввода», я думаю, вы могли бы назвать это.

Есть ли простой способ сделать это в подходящем обработчике?

Ответы [ 4 ]

10 голосов
/ 12 января 2010

Я не уверен, есть ли способ сделать это во время набора текста. Я думаю, что 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 голосов
/ 10 декабря 2017

Я только что попробовал два предыдущих ответа на листе, и они ничего не делали. ИДК, если проблема заключается в «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 голосов
/ 14 января 2015

Это будет автоматически соответствовать ширине столбцов

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Columns.AutoFit
End Sub
0 голосов
/ 01 октября 2014

Я не могу придумать способ сделать то, что вы просите, но что-то очень близкое к вашим потребностям.В современных версиях Excel (2010+, я не знаю о версии 2007) вы можете использовать следующий макрос для изменения размера столбца, чтобы соответствовать данным, как только вы закончили ввод данных в ячейку.

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

Поместить макрос в модуль ThisWorkbook

...