...というか私が抜けてるだけ?懺悔シリーズ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