課題
エクセルの条件付き書式をコードに落とし込むために
現在の情報を取得しようとしたところ、LineStyleの取得の部分で
以下のようなエラーが発生してしまいました。
実行時エラー '1004':
Boder クラスの LineStyle プロパティを取得できません。
以下のコードで再現しました。
Sub Test()
Dim fc As FormatCondition
Set fc = Range("A1").FormatConditions(1)
MsgBox fc.Borders(xlEdgeTop).LineStyle
End Sub
原因
通常のセル(Range)に罫線をセットする場合、以下の場所が選択できます。
名前 | 値 | 説明 |
---|---|---|
xlDiagonalDown | 5 | 範囲内の各セルの左上隅から右下への罫線 |
xlDiagonalUp | 6 | 範囲内の各セルの左下隅から右上への罫線 |
xlEdgeBottom | 9 | 範囲内の下側の罫線 |
xlEdgeLeft | 7 | 範囲内の左端の罫線 |
xlEdgeRight | 10 | 範囲内の右端の罫線 |
xlEdgeTop | 8 | 範囲内の上側の罫線 |
xlInsideHorizontal | 12 | 範囲外の罫線を除く、範囲内のすべてのセルの水平罫線 |
xlInsideVertical | 11 | 範囲外の罫線を除く、範囲内のすべてのセルの垂直罫線 |
参照: MSDN XlBordersIndex 列挙 (Excel)
しかし、条件付き書式における罫線は上下左右の4つしかありません。
ここで再現コードの
fc.Borders(xlEdgeTop).LineStyle
の部分に戻ると、xlEdgeTop は上記の表で 8 になるので、対応する Border がないために
値の取得ができないんですね。
解決
xlEdgeTop 等の列挙子を使わず、1~4の数字で指定すると取得できました。
fc.Borders(1).LineStyle
位置と数字は以下のように対応します。
位置 | 値 |
---|---|
左 | 1 |
右 | 2 |
上 | 3 |
下 | 4 |
C# では型キャストが必要です。
using Excel = Microsoft.Office.Interop.Excel;
...
Excel.FormatCondition fc = ...;
var border = fc.Borders[(Excel.XlBordersIndex)1];
参考
Excel Q&Aサロンで回答いただきました。ありがとうございました。
余談
一応解決はできたんですが、なにかもっと正しい方法があるような気もします。
ご存知の方はぜひコメントください。