3

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

Моя точная проблема заключается в том, что у меня есть один рабочий лист, в котором я хочу создать несколько таблиц, в которых хранится информация о моих зарплатах по годам. Я уже сделал первую таблицу за первый год, для которого я уже определил размеры столбцов, чтобы данные было легко читать. Однако, когда я выбираю новые заголовки и нажимаю « Формат как таблицу», Excel изменяет размеры всех моих столбцов, чтобы соответствовать новому тексту.

Некоторые из моих заголовков не совсем вписываются в столбцы, но эта таблица предназначена для личного использования, и я предпочитаю, чтобы мои заголовки имели четкие имена (хотя и более длинные), чтобы потом было легче ссылаться на них. Поэтому я надеюсь, что у кого-то есть решение для этого. Было бы очень неудобно снова вручную изменять размер всех столбцов.

3 ответа3

1

Если, как и в моем случае, это нечастое, но неприятное раздражение, вы можете использовать этот обходной путь, который эффективно кэширует ширину столбцов. Я думаю, что это в духе этого макроса, но без макроса.

  1. Сделайте временную копию: Ctrl+A, Ctrl+C, Ctrl+N, Ctrl+Home, Ctrl+V.
  2. Создайте таблицу или сделайте все возможное, чтобы Excel испортил ширину столбцов.
  3. Восстановите только ширину: Alt+Tab, Ctrl+A, Ctrl+C, Alt+Tab, Ctrl+Home, Ctrl+Alt+V, W, Enter, Enter.

Предложения, если вы делаете макрос этого:

  1. В некоторых случаях Ctrl+A не выделяет весь лист, даже если он повторяется. Вместо этого используйте: Ctrl+Home, Shift+Ctrl+End.
  2. Чтобы избежать копирования ваших данных (поскольку вы можете редактировать неверную копию или потому, что она чувствительна), замените первые Ctrl+V на: Ctrl+Alt+V, W, Enter.
1

Есть два способа сделать это:

  1. Самый простой способ - сначала создать пустую таблицу, а затем настроить ее так, как вы хотите.
  2. Используйте макрос, который сохраняет ширину столбца выделения, форматирует его как таблицу, а затем восстанавливает ширину столбца. Макрос может быть настроен для работы с сочетанием клавиш или командной кнопкой, или он может быть добавлен на ленту. Его можно даже перехватить инструментом « Format as Table .

Для метода 2 добавьте следующий код в стандартный модуль:

'============================================================================================
' Module     : <any standard module>
' Version    : 0.1.0
' Part       : 1 of 1
' References : N/A
' Source     : https://superuser.com/a/1332155/763880
'============================================================================================
Option Explicit

Public Sub ToggleTable_NoResize()
       Dim ¡ As Long

  Const s_DefaultStyle As String = "TableStyleMedium9" ' Change this for a different default style

  Dim asngColumnWidths() As Single
  ReDim asngColumnWidths(1 To Selection.Columns.Count)
  For ¡ = LBound(asngColumnWidths) To UBound(asngColumnWidths)
    asngColumnWidths(¡) = Selection.Columns(¡).ColumnWidth
  Next ¡
  Application.ScreenUpdating = False
    Dim loNewTable As ListObject
    On Error Resume Next
      Set loNewTable = ActiveSheet.ListObjects.Add(xlSrcRange, Selection, , xlYes)
    On Error GoTo 0
    If loNewTable Is Nothing Then
      Dim loExistingTable As ListObject
      On Error Resume Next
        Set loExistingTable = Selection.ListObject
      On Error GoTo 0
      If Not loExistingTable Is Nothing Then
        loExistingTable.Unlist
      End If
    Else
      loNewTable.TableStyle = s_DefaultStyle
      For ¡ = LBound(asngColumnWidths) To UBound(asngColumnWidths)
        Selection.Columns(¡).ColumnWidth = asngColumnWidths(¡)
      Next ¡
    End If
  Application.ScreenUpdating = True

End Sub

Чтобы настроить его с помощью сочетания клавиш:

  • Убедитесь, что вкладка Разработчик показывает
  • Нажмите Alt+L+P+M ; выберите макрос; нажмите Options… ; и установите комбинацию клавиш

Заметки:

Стиль таблицы по умолчанию можно изменить в указанном коде.

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

0

Полные кредиты на оригинальную марку, созданную robinCTS.

Однако в макросе есть небольшие проблемы. Он имеет специальный символ «¡» (инвертированный восклицательный знак) в кодах. Выдает ошибку при запуске. Я сделал небольшие изменения, чтобы исправить это.

Поведение по умолчанию тоже изменилось. Он сохраняет текущее форматирование / стиль таблицы и не применяет никакого форматирования / стиля.

Повторный запуск макроса преобразует таблицу обратно в диапазон данных.

Option Explicit

'A slight modification of the code from https://superuser.com/a/1332155/763880    
Public Sub ToggleTable_NoResize()
  Dim var As Long

  Const s_DefaultStyle As String = "" 'Change this if you want a different default style

  Dim asngColumnWidths() As Single
  ReDim asngColumnWidths(1 To Selection.Columns.Count)
  For var = LBound(asngColumnWidths) To UBound(asngColumnWidths)
    asngColumnWidths(var) = Selection.Columns(var).ColumnWidth
  Next var
  Application.ScreenUpdating = False
    Dim loNewTable As ListObject
    On Error Resume Next
      Set loNewTable = ActiveSheet.ListObjects.Add(xlSrcRange, Selection, , xlYes)
    On Error GoTo 0
    If loNewTable Is Nothing Then
      Dim loExistingTable As ListObject
      On Error Resume Next
        Set loExistingTable = Selection.ListObject
      On Error GoTo 0
      If Not loExistingTable Is Nothing Then
        loExistingTable.Unlist
      End If
    Else
      loNewTable.TableStyle = s_DefaultStyle
      For var = LBound(asngColumnWidths) To UBound(asngColumnWidths)
        Selection.Columns(var).ColumnWidth = asngColumnWidths(var)
      Next var
    End If
  Application.ScreenUpdating = True

End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .