...というか私が抜けてるだけ?懺悔シリーズ2。
■xl2007:ModifyAppliesToRangeメソッド
re2:xl2007:ModifyAppliesToRange でTypeが変わる
ここで暢気にFor Each NextステートメントでModifyAppliesToRangeやっちゃってますが、これ大変危険です。
適用先AppliesToプロパティが同一範囲のFormatConditionに対してModifyAppliesToRangeメソッドを続けて実行すると、Excel2007が落ちます。
最小限の再現コードはこれ。
普通、こんな事はしませんが、For EachでDeleteしてみます。
『9:インデックスが有効範囲にありません。』エラーです。
考えてみりゃ、前から削除とかMoveとかしちゃダメよねorz
...
......ん?前に詰まるの?これは落ちないんだけどなぁ。
今いち不可解ですが...まっとうに生きたいならこれ?
...それにしたって、落ちなくてもいいじゃない...ねェ...orz
環境:[Windows]XP pro 5.1.2600 SP3 [EXCEL]2007 12.0.6535.5002 SP2
■xl2007:ModifyAppliesToRangeメソッド
re2:xl2007:ModifyAppliesToRange でTypeが変わる
ここで暢気にFor Each NextステートメントでModifyAppliesToRangeやっちゃってますが、これ大変危険です。
適用先AppliesToプロパティが同一範囲のFormatConditionに対してModifyAppliesToRangeメソッドを続けて実行すると、Excel2007が落ちます。
最小限の再現コードはこれ。
Sub test() '私の環境では確実に2007が落ちます。安易に実行しない事。 Dim f As FormatCondition On Error Resume Next With Range("A1") .FormatConditions.Add( _ Type:=xlExpression, Formula1:="=RC>2" _ ).Interior.ColorIndex = 35 .FormatConditions.Add( _ Type:=xlExpression, Formula1:="=RC>1" _ ).Interior.ColorIndex = 36 For Each f In .FormatConditions f.ModifyAppliesToRange Range("B1") Next End With End Sub
普通、こんな事はしませんが、For EachでDeleteしてみます。
Sub test2() Dim f As FormatCondition With Range("A1") .FormatConditions.Add( _ Type:=xlExpression, Formula1:="=RC>2" _ ).Interior.ColorIndex = 35 .FormatConditions.Add( _ Type:=xlExpression, Formula1:="=RC>1" _ ).Interior.ColorIndex = 36 For Each f In .FormatConditions f.Delete Next End With End Sub
考えてみりゃ、前から削除とかMoveとかしちゃダメよねorz
...
......ん?前に詰まるの?
Sub test3() Dim f As FormatCondition Range("A1").FormatConditions.Add( _ Type:=xlExpression, Formula1:="=RC>2" _ ).Interior.ColorIndex = 35 Range("A1:A2").FormatConditions.Add( _ Type:=xlExpression, Formula1:="=RC>1" _ ).Interior.ColorIndex = 36 For Each f In Range("A1").FormatConditions f.ModifyAppliesToRange Range("B1") Next End Sub
今いち不可解ですが...まっとうに生きたいなら
Sub test4() Dim i As Long With Range("A1").FormatConditions .Add(Type:=xlExpression, Formula1:="=RC>2" _ ).Interior.ColorIndex = 35 .Add(Type:=xlExpression, Formula1:="=RC>1" _ ).Interior.ColorIndex = 36 For i = .Count To 1 Step -1 .Item(i).ModifyAppliesToRange Range("B1") Next End With End Sub
...それにしたって、落ちなくてもいいじゃない...ねェ...orz
環境:[Windows]XP pro 5.1.2600 SP3 [EXCEL]2007 12.0.6535.5002 SP2
話題は違いますが、
条件付き書式を設定してあるセルと、設定してないセルを一緒に選択して、COuntを取得した場合、
Excel2000では、「-1」が返ります。
例えば
A2:3こ
B3:2個
で、A1:C3を対象にCountを取得すると
「5」が返ります。
そんな「落ちる」ようなtestまでお試し頂き、恐縮です。
他、情報も有難うございます。
どうやら「落ちる」のは2010でも直ってないようです。
でも複合[適用先]セルのコピー時の順位逆転問題は解消してます。
そのうち、2007用パッチが提供されるかもしれませんね。