LibreOffice6.2.3.2マクロ(basic) で複数セル範囲に1つの数式で条件付き書式を設定しました。
しかし、設定された条件付き書式は定義数式が壊れます。
定義数式($A3<=$A$2
)を壊さないためにはどこを修正すれば良いでしょうか?。
-
表の大きさは A1:Q250
- 1行目=見出し
- 2行目=データ管理行
- 3行目以降=データ
-
A列
- シリアル値ベースの日付 形式:yy/mm/dd 昇順に並んでる
- A3~A184行・・・18/03/31~19/11/27が入力済
- A185~A250行・・・空白
-
A2:=today()として本日日付を表示
-
B-C列・・・摘要でかな文字
-
D,H-I,Q列・・・数値
-
E-G列・・文字列
条件定義してる範囲とスタイル
- A3:A250 , E3:G250 – セル領域が2つ
- “文字G + 中央揃え”
- 「文字G」-- フォント色でG=緑
- 「揃え」-- セル内の横位置
- 日本語表記なので「G,+,空白」はそれぞれ半角で入力
マクロを走らせると条件付き書式は正しく機能
が、定義数式($A3<=$A$2
)→($A5<=$A$2
)に
壊れます。
推定するに
oCondition(0).Name = "SourcePosition"
に定義してる値
oCondition(0).Value = oRange.RangeAddresses(0)
が正しくないと思われます。
A3:A250 , E3:G250の2つの領域の1つ目のA3:A250の左上セルの位置(=A3)
を掴むメソッドまたはプロパティはあるのでしょうか?
簡略化したコード
Sub SetConditionalStyle_ABDEGHIQ()
Dim oRange as object
Dim oConFormat 'Conditional format object
Dim oCondition(3) As New com.sun.star.beans.PropertyValue
Dim sAddress
oCondition(0).Name = "SourcePosition"
oCondition(1).Name = "Operator"
oCondition(2).Name = "Formula1"
oCondition(3).Name = "StyleName"
Dim a: a = array("A3:A250,E3:G250")
Dim s: s = "文字G + 中央揃え"
Dim n as long, i as long
sAddress = Split( a(0), ",")
oRange = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
for i=0 to ubound(sAddress)
oRange.addRangeAddress(ThisComponent.Sheets(0). _
getCellRangeByName(sAddress(i)).RangeAddress,False)
next
oCondition(0).Value = oRange.RangeAddresses(0)
oCondition(1).Value = com.sun.star.sheet.ConditionOperator.FORMULA
oCondition(2).Value = "$A3<=$A$2"
oCondition(3).Value = s
oConFormat = oRange.ConditionalFormat
oConFormat.addNew(oCondition())
oRange.ConditionalFormat = oConFormat
End Sub