Evitar o redimensionamento de células ao criar uma tabela usando o Excel

2
Eu pesquisei por toda a Internet, mas todas as soluções para as perguntas que eu encontrei estão em como manter o Excel do redimensionamento de células em uma tabela existente ou tabela dinâmica. Também procurei nas configurações em opções, mas não vi nenhuma configuração que pudesse corrigir meu problema.

Meu problema exato é que tenho uma única planilha na qual desejo criar várias tabelas que armazenam informações sobre meus cheques de pagamento por ano. Eu já fiz a primeira tabela do primeiro ano para o qual já dimensionei as colunas para facilitar a leitura dos dados. No entanto, quando eu seleciono meus novos cabeçalhos e clico em Formatar como tabela , o Excel redimensiona todas as minhas colunas para caber no novo texto.

Alguns dos meus cabeçalhos não se encaixam nas colunas, mas essa tabela é para uso pessoal, e eu prefiro que meus cabeçalhos tenham nomes claros (embora mais longos) para referenciá-los mais tarde. Então, espero que alguém tenha uma solução para isso. Seria muito chato ter que redimensionar manualmente todas as colunas novamente.

    
por David 18.06.2018 / 05:04

2 respostas

1

Existem duas maneiras de realizar isso:

  1. A maneira mais simples é criar uma tabela vazia primeiro e e configurá-lo da maneira desejada.
  2. Use uma macro que salve as larguras de coluna da seleção, formate-a como uma Tabela e restaure as larguras das colunas. A macro pode ser configurada para funcionar com uma tecla de atalho ou um botão de comando ou pode ser adicionada à faixa de opções. É até possível interceptar a ferramenta Format as Table ribbon.

Para o método 2, adicione o seguinte código a um módulo padrão:

'============================================================================================
' 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

Para configurá-lo com uma tecla de atalho:

  • Verifique se a guia Desenvolvedor está mostrando
  • Pressione Alt + L + P + M ; selecione a macro; pressione Options… ; e defina a tecla de atalho

Notas:

O estilo padrão da tabela pode ser alterado no código onde é indicado.

Como um recurso adicional, a execução da macro novamente converterá a Tabela de volta para um intervalo normal de células.

    
por 18.06.2018 / 08:12
0

Créditos completos para o marco original criado por robinCTS.

No entanto, existem pequenos problemas na macro. Tem um caractere especial "¡" (ponto de exclamação invertido) nos códigos. Ele lança um erro quando você o executa. Fiz pequenas modificações para corrigi-lo.

O comportamento padrão também é alterado. Preserva a formatação / estilo atual da tabela e não aplica formatação / estilo.

A execução da macro novamente converterá uma tabela em um intervalo de dados.

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
    
por 06.10.2018 / 01:09