Demasiados Formatos De Células Diferentes
-
Tenho um ficheiro enorme com 10 folhas recriadas a partir do zero, 12 folhas actualizadas, 5 folhas carregadas com dados brutos e 7 folhas que são usadas pelas macros para o relatório.
- adicionei recentemente uma nova folha e estou a correr para o problema do Excel "demasiados formatos de células diferentes" .
o que eu tentei
Eu li alguns dos resultados da pesquisa do google e eles dizem que eu deveria simplificar a formatação, mas eu nem sei como eu consegui até 4000 formatos de células diferentes, quanto mais estou a usar Quais, para poder remover algumas.Ele também está aparecendo algumas vezes o arquivo é executado, mas não tudo, até que ele aparece, e então isso acontece sempre que ele é executado. Uma vez que a macro está fazendo tanto do trabalho, incluindo a criação das 10 folhas do zero, Eu Não tenho certeza do que fazer.
alguém sabe
- de uma Macro eu poderia correr para obter uma lista de todos os formatos de células e quantos as células estão a usá-las?
- de um programa em que confiam para ajudar a remover os formatos de células em excesso?
15 answers
Os "formatos de células" são complicados. As células não têm realmente um "formato". Eles têm uma fonte (que por si só tem um nome e um tamanho), um número Format, Altura, Largura, orientação, etc.
Então você precisa definir o que você quer dizer com "formato".
Abaixo está o código para obter o nome e o tamanho da fonte. Podes substituir os atributos que quiseres.
O código abaixo assume que você criou uma planilha chamada "formatos" no livro de trabalho. Depois de executar a macro, os nomes dos tipos de letra e os tamanhos será listado nessa ficha de trabalho.
Public Sub GetFormats()
Dim CurrentSheet As Integer
Dim UsedRange As Range
Dim CurrentCell As Range
Dim rw As Long
Sheets("Formats").Cells.ClearContents
rw = 1
For CurrentSheet = 1 To Sheets.Count
Set UsedRange = Range(Sheets(CurrentSheet).Range("A1"), Sheets(CurrentSheet).Range("A1").SpecialCells(xlLastCell))
For Each CurrentCell In UsedRange
FontUsed = CurrentCell.Font.Name + ":" + CStr(CurrentCell.Font.Size)
If Sheets("Formats").Cells.Find(FontUsed) Is Nothing Then
Sheets("Formats").Cells(rw, 1).Value = FontUsed
rw = rw + 1
End If
Next
Next CurrentSheet
End Sub
' Description:
' Borrowed largely from http://www.jkp-ads.com/Articles/styles06.asp
Option Explicit
' Description:
' This is the "driver" for the entire module.
Public Sub DropUnusedStyles()
Dim styleObj As Style
Dim rngCell As Range
Dim wb As Workbook
Dim wsh As Worksheet
Dim str As String
Dim iStyleCount As Long
Dim dict As New Scripting.Dictionary ' <- from Tools / References... / "Microsoft Scripting Runtime"
' wb := workbook of interest. Choose one of the following
' Set wb = ThisWorkbook ' choose this module's workbook
Set wb = ActiveWorkbook ' the active workbook in excel
Debug.Print "BEGINNING # of styles in workbook: " & wb.Styles.Count
MsgBox "BEGINNING # of styles in workbook: " & wb.Styles.Count
' dict := list of styles
For Each styleObj In wb.Styles
str = styleObj.NameLocal
iStyleCount = iStyleCount + 1
Call dict.Add(str, 0) ' First time: adds keys
Next styleObj
Debug.Print " dictionary now has " & dict.Count & " entries."
' Status, dictionary has styles (key) which are known to workbook
' Traverse each visible worksheet and increment count each style occurrence
For Each wsh In wb.Worksheets
If wsh.Visible Then
For Each rngCell In wsh.UsedRange.Cells
str = rngCell.Style
dict.Item(str) = dict.Item(str) + 1 ' This time: counts occurrences
Next rngCell
End If
Next wsh
' Status, dictionary styles (key) has cell occurrence count (item)
' Try to delete unused styles
Dim aKey As Variant
On Error Resume Next ' wb.Styles(aKey).Delete may throw error
For Each aKey In dict.Keys
' display count & stylename
' e.g. "24 Normal"
Debug.Print dict.Item(aKey) & vbTab & aKey
If dict.Item(aKey) = 0 Then
' Occurrence count (Item) indicates this style is not used
Call wb.Styles(aKey).Delete
If Err.Number <> 0 Then
Debug.Print vbTab & "^-- failed to delete"
Err.Clear
End If
Call dict.Remove(aKey)
End If
Next aKey
Debug.Print "ENDING # of style in workbook: " & wb.Styles.Count
MsgBox "ENDING # of style in workbook: " & wb.Styles.Count
End Sub
Na maioria das vezes a questão é: relacionado com o número excessivo de estilos não utilizados e frequentemente corrompidos e não tanto a contagem total do formato celular único combos.
Escrevi um utilitário para corrigir ficheiros OOXML XL2007 que podem ser gravados para XL2003. Aqui está o link para o post no blog:
- requer. Net3. 5 e MS Excel 2007.
- irá corrigir ficheiros xlsx ou xlsm.
- a post tem um arquivo ReadMe para ir com o aplicativo.
Os erros que levam a mensagem de erro "demasiados formatos de células" no Excel 2007+ foram abordados: http://sergeig888.wordpress.com/2011/05/06/msft-released-hot-fix-for-excel-2007-custom-styles-duplication/ Note que as correções de bugs não irão remover a corrupção de arquivos pré-existente relacionada com estilos. Open XML based tools (available for free) are the only option that can remove elements inacessible to the Excel object model based tools: e.g., bad styles that disguised themselves as embutido, estilos escondidos, etc... Limpeza baseada em XML aberta significa 100% estilos relacionados com arquivos livres de corrupção.
Eu tive este problema, encontrei a maneira mais fácil de limpar foi usando este Excel adicionar em . Parece ser a resposta "oficial" da página da Microsoft sobre o problema.
Para pessoas que estão tão confusas como eu estava a usar .arquivos xlam, depois de baixá-lo você faz isso no Excel:- Carregue em Ficheiro
- sob a opção Gerir carregue em ir.
- na janela de Add-ins carregue em navegar, navegue até ao local onde o XLAM o ficheiro é gravado, realce-o e carregue em Ok.
- active o novo add-in na janela de Add-ins e carregue em Ok.
- na sua barra de fitas de ecrã pessoal deve existir agora uma secção" remover estilos", que consiste num botão que mostra o número de estilos no livro de trabalho (provavelmente milhares se estiver a ter este problema).
- carregue no botão da fita e irá eliminar todos os formatos duplicados.
A folha de cálculo para o. NET irá reunir formatos não únicos que poderão ajudar com a sua situação.
Pode baixar o teste gratuito aqui Se quiser ver se ajuda. Basta carregar o livro de trabalho na aplicação "SpreadsheetGear 2009 for Windows", que é instalado com o software de Avaliação e, em seguida, salvar o livro de trabalho.
Se você realmente tem tantos formatos únicos, você terá que simplificar. Cada combinação única da cor do tipo de letra / da célula (Interior), formato de número, alinhamento horizontal e vertical, fronteiras, nível de indentação, e provavelmente algumas coisas que eu não estou pensando causarão uma entrada única na tabela.
Outra opção é mudar para o Excel 2007, que tem o limite de formatos de células únicos aumentou de 4.000 para 64K.
Declaração de exoneração de Responsabilidade: sou o proprietário da folha de cálculo LLC
Quando fechar e reabrir esta nova folha de cálculo os teus muitos formatos devem ter desaparecido.
Uma solução pode ser usar ASAP utilities. Na secção da folha existe uma opção remove all unused styles
. Então você tem que fechar o manual e reabrir, eu acho.
Isto irá apagar todos os estilos, excepto os estilos predefinidos (normal, explicativo, 20% Accent1 etc.). Incluindo estilos que o usuário criou, mas é uma maneira rápida e suja de limpar um livro de trabalho:
Sub NewNukeStyles()
Dim tempstyle As Style
For Each tempstyle In ActiveWorkbook.Styles
If tempstyle.BuiltIn = False Then
If tempstyle.Locked = True Then 'not sure what this is
tempstyle.Delete
End If
End If
Next tempstyle
End Sub 'NukeStyles
Adorava saber qual é o estilo.a propriedade bloqueada refere-se realmente a outro que não "um valor booleano que indica se o objeto está bloqueado".
Se puder abrir o ficheiro tente > editar > limpar > formatos.
Destaque a folha antes de bater os formatos que funcionou para mim.
Certifique-se de que faz uma cópia do EXCEL antes de fazer isto apenas incase algo está faltando você pode cruzar ref contra o documento antigo.
O problema pode ser corrigido usando esta ferramenta.
Funciona com XLS
e XLSX
ficheiros.
Eu sei que acima há alguns métodos interessantes para resolver este erro.
Mas eu faria um resumo de alguns truques básicos para corrigir muitos erros de formato de células, mas eu acho que é muito eficaz especialmente para novos bies.
- copiar a folha de trabalho para um novo ficheiro-é eficaz mas leva o tempo
- apagar intervalos que você não sabe o que eles são
- volte a formatar as folhas de cálculo para que tenha o formato mimimum definido
- limpar todo o formato
Os meus detalhes postam sobre o erro Como corrigir demasiados formatos de células diferentes
Depois de ler esta página de suporte da microsoft ( https://support.microsoft.com/en-us/kb/213904 vim para XLStylesTool.exe .
Mas, mais uma vez, sem sorte (porque eu o usei erradamente).
Tenho o windows sete, por isso a versão 8/10 do windows não funciona.
Eu li Os comentários da página de download (porque não está escrito nos infos de download) aqui https://sergeig888.wordpress.com/2011/03/21/net4-0-version-of-the-xlstylestool-is-now-available/
Descobri que preciso da versão.NET4. 0 para fazer com que funcione sob o win7 (aqueles bonecos não podem simplesmente chamar-lhe Versão win7 ???)Ligação de transferência: https://skydrive.live.com/redir?resid=53E1D37F76F69444!900&authkey=!AH5oeGVaWlMsFHA&ithint=file%2c.zip
O meu próximo problema era que não funciona em *.XLS, então abri o excel e salvei como *.XLSM, wich obra.
Depois disso, basta clicar em 'Get Excel File', e' Process File '(eu verifiquei' commit changes and open in excel', e no excel' save as''*.xls. Fechar o excel, reabrir o arquivo, funciona (sem aviso de anoying) !!!
Se isso lhe der um erro "demasiados formatos de células", então salve o documento imediatamente. Mude o nome do documento para outro nome Por enquanto. Abra o documento e, em seguida, salve-o com o mesmo nome que você queria antes. Agora feche o documento e abra-o, ele não iria mostrar mais esse erro. Às vezes também desaparece com um simples salvamento, mas é um pouco estranho para mim!
Uma solução simples no caso de ser um pequeno ficheiro:
Copia tudo e cola-o em palavras. Ele irá detectar o conteúdo como tabelas. Em seguida, seleccione Todas as colunas (NÃO a tabela completa através do sinal cruz no canto superior esquerdo) e passe-a para um novo .XLS sheet e você terá apenas os valores claros.