使用数组设置Excel范围格式

在过去,我使用了一个变体数组来填充多个Excel单元格的范围。

我想知道,有没有办法做单元格格式相同的事情? 我宁愿不逐一细胞,这将是很好的,以尽量减less获得Excel范围的电话数量…

不,你不能单独做每个单元格,尽pipe你可以批量分配一个格式到整个范围。

要分配的范围的属性是.NumberFormat 。 如果创build一个stringvariables数组作为格式赋值,则将其赋值给该范围,只有第一个元素被应用(并且它被应用于该范围的所有单元格)。

所以你可以做的最好的是循环:

 Dim r As Range Dim v(1 To 3) As Variant Dim i As Integer Set r = Range("A1:A3") v(1) = "hh:mm:ss" v(2) = "General" v(3) = "$#,##0.00_);[Red]($#,##0.00)" For i = 1 to 3 r(i).NumberFormat = v(i) Next i 

我主要是做兰斯build议的。 但是,在某些情况下,我将使用我想要设置的格式制作单独的隐藏工作表。 那我就去

 wshHidden.Range("A1:D100").Copy wshReport.Range("A1:D100").PasteSpecial xlPasteFormats 

这就一举照顾它。 但是你确实有隐藏工作表的开销。

希望我可以安全地假设你出于性能的原因这样做。 正如上面所回答的那样,它不可能像使用单元格内容一样完成。

但是,如果单元格的格式化与上次格式化的格式相同,则首先检查格式是否需要更改会更快,然后才能更改格式。

这是一个可以做到的function。 在testing中(Excel 2003),这比始终设置格式运行速度快8至10倍,而且屏幕更新处于closures状态。

 Sub SetProperty(ByRef obj As Object, propname, newvalue) If CallByName(obj, propname, VbGet) <> newvalue Then Call CallByName(obj, propname, VbLet, newvalue) End If End Sub 

像这样调用它:

 Call SetProperty(Cells(1,1).Font, "ColorIndex", 27) Call SetProperty(Cells(1,1).Borders, "Weight", xlMedium) etc