EXCELVBA:“;太多不同的单元格格式“有没有办法在宏中删除或清除这些格式?

EXCELVBA:“;太多不同的单元格格式“有没有办法在宏中删除或清除这些格式?,vba,excel,cell-formatting,Vba,Excel,Cell Formatting,因此,我制作了一个有趣而简单的宏,随机选择R、G和B值,直到它使用每种可能的组合(跳过重复),并使用每种新颜色设置10x10正方形的颜色值 唯一的问题是我遇到了单元格格式数量的限制,但我发现在Excel 2013的空白工作簿上,它正好是65429 我包含了一个清晰的格式代码,但似乎没有效果: Cells(X, Y).ClearFormats 微软列出了一些解决方案,但其中3/4基本上是“不要制作太多格式”,第4种格式是使用第三方应用程序 在VBA中真的没有什么可以做的吗 A1:J10将打印

因此,我制作了一个有趣而简单的宏,随机选择R、G和B值,直到它使用每种可能的组合(跳过重复),并使用每种新颜色设置10x10正方形的颜色值

唯一的问题是我遇到了单元格格式数量的限制,但我发现在Excel 2013的空白工作簿上,它正好是65429

我包含了一个清晰的格式代码,但似乎没有效果:

Cells(X, Y).ClearFormats
微软列出了一些解决方案,但其中3/4基本上是“不要制作太多格式”,第4种格式是使用第三方应用程序

在VBA中真的没有什么可以做的吗


  • A1:J10将打印新颜色
  • K1将打印完成百分比
  • L1将打印使用的颜色数
  • M1将打印颜色组合重复的次数

    Dim CA(255, 255, 255) As Integer
    Dim CC As Long
    Dim RC As Long
    Dim R As Integer
    Dim G As Integer
    Dim B As Integer
    Dim X As Integer
    Dim Y As Integer
    
    CC = 0
    RC = 0
    
    X = 1
    Y = 1
    
    Do While ColorCount < 16777216
        R = ((Rnd * 256) - 0.5)
        G = ((Rnd * 256) - 0.5)
        B = ((Rnd * 256) - 0.5)
    
        If CA(R, G, B) <> 1 Then
            CA(R, G, B) = 1
    
            'Step down to the next row
            'If at the 10th row, jump back to the first and move to the next column
            If X < 10 Then
                X = X + 1
            Else
                X = 1
                If Y < 10 Then
                    Y = Y + 1
                Else
                    Y = 1
                End If
            End If
    
            Cells(X, Y).ClearFormats 'doesn't do what I hope :(
            Cells(X, Y).Interior.Color = RGB(R, G, B)
            CC = CC + 1
            Cells(1, 11).Value = (CC / 16777216) * 100
            Cells(1, 12).Value = CC
        Else
            RC = RC + 1
            Cells(1, 13).Value = RC
        End If
    
    Loop
    
    Dim CA(255,255,255)作为整数
    如长
    如长
    作为整数的Dim R
    作为整数的Dim G
    作为整数的Dim B
    作为整数的Dim X
    Dim Y作为整数
    CC=0
    RC=0
    X=1
    Y=1
    当颜色计数<16777216时执行此操作
    R=((Rnd*256)-0.5)
    G=((Rnd*256)-0.5)
    B=((Rnd*256)-0.5)
    如果CA(R,G,B)1那么
    CA(R,G,B)=1
    “下到下一排
    '如果在第10行,请跳回到第一行并移到下一列
    如果X<10,则
    X=X+1
    其他的
    X=1
    如果Y<10,则
    Y=Y+1
    其他的
    Y=1
    如果结束
    如果结束
    Cells(X,Y).ClearFormats'不符合我的期望:(
    单元格(X,Y).Interior.Color=RGB(R,G,B)
    CC=CC+1
    单元格(1,11)。值=(CC/16777216)*100
    单元格(1,12)。值=CC
    其他的
    RC=RC+1
    单元格(1,13)。值=RC
    如果结束
    环
    

    • 有几种方法可以解决这个问题,但最干净、最简单的方法是删除所有额外的样式(我见过9000多种样式的工作簿)

      使用以下简单的VBA代码,您可以删除所有非内置样式,在大多数情况下,这会修复错误

      Sub removeStyles() 
      Dim li as long 
      On Error Resume Next 
      
      With ActiveWorkbook 
      For li = .Styles.Count To 1 Step -1 
      If Not .Styles(li).BuiltIn Then 
      .Styles(li).Delete 
      End If 
      Next 
      End With 
      End Sub
      

      事实上,我不知道这个问题的解决方案是什么。但是你在哪里更新<代码> CultCube < /Cord>?颜色数组(“CA”)保存256x256x256条目。如果CA(R,G,B)没有设置为1,那么将它设置为1(考虑使用它)。然后,将单元格的背景颜色设置得低一点:单元格(x,y)。