ここから本文です

LibreOffice6.2.3.2マクロ(basic) で _ 複数セル範囲に1つの数式で条件付き書...

sun********さん

2019/8/1310:00:18

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_Remodeling2()

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
-----------------------------------------------------------

補足中段の「for ~ next」が終了直後

ThisComponent.CurrentController.Select(oRange)

とするとアクティブセル位置がが「A3」に来てることを発見しました。
この文の次に、そのアドレス A3 が文字列で求められれば、それを
oCondition(0).Valueにセットすれば、解決につながるのですが。

閲覧数:
113
回答数:
1

違反報告

ベストアンサーに選ばれた回答

mar********さん

2019/8/1410:18:30

んとーーー

1っこのセルの数式を、別なセルに・・・・
私ならレンジではなく、do{・・・}loopで回すかも。

  • 質問者

    sun********さん

    2019/8/1413:37:21

    もう一歩,具体的な例またはコードで例示願いたい

    >①1っこのセルの数式を、別なセルに・・・・

    >⓶私ならレンジではなく、do{・・・}loopで回すかも。

    以上

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる