2

Currently trying to help on this question - but stumbled across a very strange problem:

When trying to add conditional formatting on overlapping ranges (in VBA), Excel 2007 produces Error 1004 or or Error 9 (Subscript out of range) errors. I managed to boil the erroneous code down to this:

Sub Produce1004()
    Cells.FormatConditions.Delete
    Range("A1").FormatConditions.Add Type:=xlExpression, Formula1:="=1"
    Range("A1:A2").FormatConditions.Add Type:=xlExpression, Formula1:="=1"
    Range("A1:A2").FormatConditions(Range("A1:A2").FormatConditions.Count).Font.ColorIndex = 7
サブ終了

サブ ProduceError9()
    Cells.FormatConditions.Delete
    Range("A1:A3").FormatConditions.Add Type:=2, Formula1:="=1"
    Range("A1:A2").FormatConditions.Add Type:=2, Formula1:="=1"
    Range("A1:A2").FormatConditions.Add Type:=2, Formula1:="=1"
    Range("A1:A2").FormatConditions(Range("A1:A2").FormatConditions.Count).Font.ColorIndex = 3
サブ終了

エラーが発生するのは、両方のサブルーチンの最後の行です。このエラーは Excel 2007 でのみ発生し、2010 では問題なく動作します。

誰かが回避策を知っていますか?

4

1 に答える 1

0

Produce1004() に問題があります。

A1 には 2 つのフォーマット条件があり、A2 には 1 つのフォーマット条件があります。

Range("A1:A2").FormatConditions.Count は A1 のカウントを示します。FormatConditions(2) は A2 に存在しないため、エラーが発生します。

ただし、ProduceError9() の場合、書式条件の数は A1 と A2 で同じです。

少し実験して、範囲がフォーマット条件と共に保存されていると推測することで、これを説明できます ([A1].FormatCondition(3) のフォントの設定も失敗します)。フォーマット条件が定義された範囲のフォーマットを変更する必要があります。

おそらく、Excel 2010 では、フォーマット条件をオンザフライで分割することにより、この状況が改善されています。

于 2013-02-06T14:05:27.767 に答える