如何防止 excel 表的格式覆盖 VBA 中范围的现有格式?



我正在使用一个需要使用表格的电子表格。我调整它的大小以仅包含标题和我正在使用的第一行数据,但是当我重新调整它以涵盖我的所有现有数据时,它会覆盖格式并将颜色重置回默认白色。我需要这些颜色,因为它们稍后会在代码中引用。有没有办法防止表这样做?

Dim FLF As Worksheet
Set FLF = Workbook("My Workbook").Sheets("FLF")
Dim x As Long
Dim lng As Long
With FLF
FLF.Activate
.ListObjects("Table1").Resize Range("$A$6:$K$7")
lng = .Cells(.Rows.count, "D").End(xlUp).Row
.Range("E7:G" & lng).NumberFormat = "0.00%"
.ListObjects("Table1").Resize Range("$A$6:$K$" & lng)
For x = 7 To lng
If .Range("A" & x).Interior.ColorIndex = 46 Then
TopPercent = .Range("K" & x).Value
Do
x = x + 1
.Range("K" & x) = TopPercent * .Range("F" & x).Value
.Range("K" & x).Font.FontStyle = "Italic"
Loop While .Range("A" & x + 1).Interior.ColorIndex = 36
End If
Next x

我试图重新创建你所描述的东西。我想我错过了正在发生的事情。

我做了一个表格,在表格下面放了一些数据,将单元格涂成黄色,然后将底部的蓝色小东西拖到我的黄色数据上,以将其包含在表格中。对我来说,它保持格式。

我唯一能想到的是,您手动将某种形式的填充应用于表格?您可以更改表格样式和格式。如果你想保留你的表格,我唯一能想到的就是在展开表格之前保存重要范围的colorindex,然后在展开表格后重新格式化该范围。这可以通过多种方式完成,但由于我们已经在 VBA 中,这又如何呢?

'I don't know how to Dim this in one line, sorry
Dim ColorIndexArray()
ReDim ColorIndexArray(ThisWorkbook.Sheets("FLF").Cells(ThisWorkbook.Sheets("FLF").Rows.Count, "A").End(xlUp).Row)
For i = 1 To ThisWorkbook.Sheets("FLF").Cells(ThisWorkbook.Sheets("FLF").Rows.Count, "A").End(xlUp).Row
ColorIndexArray(i) = ThisWorkbook.Sheets("FLF").Range("A" & i).Interior.ColorIndex
Next
'Do your stuff
For i = 1 To ThisWorkbook.Sheets("FLF").Cells(ThisWorkbook.Sheets("FLF").Rows.Count, "A").End(xlUp).Row
ThisWorkbook.Sheets("FLF").Range("A" & i).Interior.ColorIndex = ColorIndexArray(i)
Next

编辑:我尝试一次将所有索引加载到数组中并失败,因此循环。另外,如果您有数万或数十万行,并且您现在已经有一个数组,您可以对其进行计算以加快速度吗?但如果只有几行,那就无关紧要了。

最新更新