我尝试了什么
我已经阅读了一些谷歌搜索结果,他们说我应该简化格式化,但我甚至不知道我如何获得4000种不同的单元格格式,更不用说我使用了哪些格式,所以我可以删除一些。
它也会弹出一些文件运行的时间,但不是全部,直到它出现,然后每次运行时都会发生。由于宏正在做很多工作,包括从头开始创建10张,我不知道该怎么做。
有谁知道
谢谢
答案 0 :(得分:45)
您描述的问题导致我(和同事)在使用Excel 2010时失去了数小时的工作效率。以下VBA代码/宏帮助我将.xlsm文件从使用3540样式降低到34。
' 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
答案 1 :(得分:7)
“细胞格式”很复杂。单元格实际上没有“格式”。它们有一个字体(它本身有一个名称和大小),一个NumberFormat,Height,Width,Orientation等。
所以你需要用“格式”来定义你的意思。
下面是获取字体名称和大小的代码。您可以替换您喜欢的任何属性。
下面的代码假定您已在工作簿中创建了名为“格式”的工作表。运行宏后,字体名称和大小将列在该工作表中。
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
答案 2 :(得分:6)
很多人似乎遇到了这个问题。
最常见的问题是 与过多未使用且经常损坏的样式有关 而不是细胞独特细胞格式组合的总数。
我写了一个实用程序来修复可以保存到的XL2007 OOXML文件 XL2003。以下是博文中的link:
使用Open,无需冒更大程度破坏文件的风险 在其他一些论坛上建议办公室
答案 3 :(得分:2)
导致Excel 2007+中出现“格式太多格式”错误的错误已得到解决:http://sergeig888.wordpress.com/2011/05/06/msft-released-hot-fix-for-excel-2007-custom-styles-duplication/ 请注意,错误修复不会删除与现有样式相关的文件损坏。基于Open XML的工具(免费提供)是唯一可以删除基于Excel对象模型的工具无法访问的元素的选项:例如,将自己伪装成内置,隐藏样式等的错误样式......基于Open XML的清理方法100%样式相关的无腐败文件。
答案 4 :(得分:2)
我遇到了这个问题,发现清除它的最简单方法是使用this Excel add in。它似乎是Microsoft page on the problem的“官方”答案。
对于那些和我使用.xlam文件一样困惑的人,下载后你可以在Excel中执行此操作:
如果您没有看到它,请检查它是否正确显示在功能区上。右键单击功能区并说“自定义功能区”。然后单击加载项。在Active Application Add-ins下,您应该看到“Remove Extra Styles”。
答案 5 :(得分:1)
SpreadsheetGear for .NET将使用非独特格式,这可能对您的情况有所帮助。
如果您想查看是否有帮助,可以下载免费试用here。只需将工作簿加载到随评估软件一起安装的“SpreadsheetGear 2009 for Windows”应用程序中,然后保存工作簿。
如果您确实拥有许多独特的格式,则必须简化。字体/单元格颜色(内部),数字格式,水平和垂直对齐,边框,缩进级别以及可能的一些我想不到的东西的每个独特组合将导致表格中的唯一条目。
另一种选择是切换到Excel 2007,它对独特的单元格格式的限制从4,000增加到64K。
免责声明:我拥有SpreadsheetGear LLC
答案 6 :(得分:1)
我以前见过这个问题。可以重新创建以证明我无论如何要说。这是一个小小的问题22但是当你有一张具有“太多格式”问题的工作表时,打开一张全新的工作表并从太多格式表中复制一个单元格,然后将其粘贴到新工作簿中。此工作簿现在将被“感染”,并且还会出现太多格式错误。似乎很多格式数据都会使用该粘贴,除非您使用特殊粘贴来限制它。
如何让事情变得更好?一个解决方法是使用另存为HTML功能。虽然这确实有用,但请耐心等待。我在这里谈论2003年,我不知道2007年会发生什么,也许这个错误已得到修复。所以...保存为Html然后关闭excel。加载一个新会话并加载它,确保你不运行任何宏,然后加载后保存为电子表格。
当你关闭并重新打开这个新的电子表格时,你的太多格式的问题应该消失了。
答案 7 :(得分:1)
一种解决方案可能是使用ASAP utilities。在工作表部分中有一个remove all unused styles
选项。然后,您必须关闭工作簿并重新打开。
答案 8 :(得分:1)
这将删除默认样式的所有样式EXCEPT(正常,说明,20%Accent1等)。包括用户创建的样式,但它是一种快速而又脏的方式来清理工作簿:
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
我很想知道tempstyle.locked属性实际上指的是&#34;一个布尔值,指示对象是否被锁定&#34;。
答案 9 :(得分:0)
如果你可以打开文件试试&gt;编辑&gt;清楚&gt;格式。
在点击它为我工作的格式之前突出显示工作表。
请确保在执行此操作之前复制EXCEL,如果缺少某些内容,您可以对旧文档进行交叉引用。
答案 10 :(得分:-1)
答案 11 :(得分:-1)
我知道上面有一些有趣的方法可以解决这个错误。
但是我会做一些基本技巧的总结来修复太多的单元格格式错误,但我认为它对于新的bies非常有效。
我希望你喜欢这些基本提示
的详细信息答案 12 :(得分:-1)
我几乎在这里使用了所有答案,但错误信息仍然存在。
在阅读了这个微软支持页面(https://support.microsoft.com/en-us/kb/213904)之后,我来到了XLStylesTool.exe。
但是,再次没有运气(因为我错误地使用了它)。
我有Windows 7,所以windows 8/10版本是不行的。
我在这里阅读了下载页面中的评论(因为它没有写在下载信息中)https://sergeig888.wordpress.com/2011/03/21/net4-0-version-of-the-xlstylestool-is-now-available/
我发现我需要.NET4.0版本才能让它在win7下工作(那些假人不能简单地称之为win7版本???)
我的下一个问题是它无法在* .XLS上运行,所以我打开了excel并保存为* .XLSM,这是有效的。
之后只需点击“获取Excel文件”和“处理文件”(我选中“提交更改并在excel中打开”,然后在excel中保存为''* .xls'。关闭excel,重新打开文件,WORKS (没有恼人的警告)!!!
答案 13 :(得分:-2)
如果它出现“太多单元格格式”错误,则立即保存文档。暂时将文档名称更改为其他名称。打开文档,然后使用您之前想要的名称保存它。现在关闭文档并打开它,它将不再显示该错误。有时它只是带着一个简单的保存消失了但对我来说有点奇怪!
答案 14 :(得分:-2)
一个简单的解决方案,如果它是一个小文件:
只需复制全部并将其粘贴到Word中即可。它会将内容检测为表格。然后选择所有列(不通过左上角的十字标记完整的表格)并将其过去到新的.xls表格中,您将只有明确的值。