ここから本文です

LibreOffice6.2.3.2マクロ(basic) で条件付き書式 を設定しようとしてますが、...

sun********さん

2019/5/1716:33:51

LibreOffice6.2.3.2マクロ(basic) で条件付き書式
を設定しようとしてますが、うまく行きません。

_
表の大きさは A1:Q200
1行目=見出し
2行目=3行目以降のデータ管理行として運用

●範囲=A3:B200
●A列>シリアル値ベースの日付 形式:yy/mm/dd 昇順に並んでる
18/03/31~19/11/27のA3~A184行まであり、A185~A200行は空白
●B列>摘要でかな文字
●A2:=today()として本日日付を表示

●設定した書式は
①$A3<=$A$2
②スタイル="文字G" 文字Gはフォント色を緑色

です。(スタイル=文字Gはフォント色が緑,文字Rは赤)

が,マクロを走らせると次のような結果(後述)になってしまう

①想定外の書式が設定される
②条件付き書式を確認しても数式が変化している

詳細は以下の通り

①A146までしかフォント緑にならない

A3:B146までフォント色=緑、A列はA146(19/05/07)までしか機能してない
ちなみに 次セルのA147=19/05/10,A148=19/05/12 ・・以降も昇順

②データ末尾に2行(19/11/12,19/11/27の行が書式設定の条件外なのに
フォント色=緑

③数式の内容が $A5<=$A$2に変化している ・・ $A3が $A5に。
-----------------------------------------------------------
Sub SetConditionalStyle()
Dim oRange as object
Dim oConFormat 'Conditional format object
Dim oCondition(2) As New com.sun.star.beans.PropertyValue

' Sheets support returning a Range range based on UI type names.
oRange = ThisComponent.Sheets(1).getCellRangeByName("A3:B200")

'Obtain the Validation object
oConFormat = oRange.ConditionalFormat

'Condition
oCondition(0).Name = "Operator"
oCondition(0).Value = com.sun.star.sheet.ConditionOperator.FORMULA
oCondition(1).Name = "Formula1"
oCondition(1).Value = "$A3<=$A$2"
oCondition(2).Name = "StyleName"
oCondition(2).Value = "文字G"

oConFormat.addNew(oCondition())
oRange.ConditionalFormat = oConFormat
End Sub
-----------------------------------------------------------
◇マクロでかつ日本語での設定例がないので当方もサンプルを見様見真似で
コードを書きました。

どこがミスってるのでしょうか?

◇究極的に設定したい書式

A3:B200,D3:I200,Q3:Q200
数式が
$A3<=$A$2
文字G

C3:C200
数式が
AND($A3<=$A$2,$D3<>0)
文字G + 左揃え

数式が
AND($A3<=$A$2,$D3=0)
文字R + 右揃え

数式が
$D3<>0
左揃え

数式が
$D3=0
右揃え

です。

閲覧数:
97
回答数:
1

違反報告

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

mek********さん

2019/5/2301:18:57


oRange = ThisComponent.Sheets(1).getCellRangeByName("A3:B200")


oRange = ThisComponent.Sheets(1).getCellRangeByPosition(0,2,1,199)


oCondition(1).Value = "$A3<=$A$2"

oCondition(1).Value = "$A1<=$A$2"


いろいろ試してみたのですが、
上の①②のように、書き直しますと、
うまくいくようです。
理由は、わからないです。
実際に、直して使ったコ-ドを、
下記に上げておきます。


Sub SetConditionalStyle()
Dim oRange as object
Dim oConFormat 'Conditional format object
Dim oCondition(2) As New com.sun.star.beans.PropertyValue

' Sheets support returning a Range range based on UI type names.
oRange = ThisComponent.Sheets(1).getCellRangeByPosition(0,2,1,199)

'Obtain the Validation object
oConFormat = oRange.ConditionalFormat

'Condition
oCondition(0).Name = "Operator"
oCondition(0).Value = com.sun.star.sheet.ConditionOperator.FORMULA
oCondition(1).Name = "Formula1"
oCondition(1).Value = "$A1<=$A$2"
oCondition(2).Name = "StyleName"
oCondition(2).Value = "文字G"

oConFormat.addNew(oCondition())
oRange.ConditionalFormat = oConFormat
End Sub



また、シ-トのチェンジイベントで、
上の条件付書式と同様な処理をさせるなら、
下記のようなコ-ドになるかもしれません。
尚、動作確認は、
LibreOffice 6.1.5.2(x64)です。



Sub FontColorByCellVaule()
Dim oDoc As Object
Dim oSheet As Object
Dim oCtrl as Object
Dim oActiveCells As Object
Dim oActiveCell As Object
Dim oCellType As Long
Dim i As Long

oDoc = ThisComponent
oSheet = oDoc.Sheets(0)
oCtrl = oDoc.getCurrentController()
oActiveCells = oCtrl.getSelection()

For i = 2 to 199
oActiveCell = oSheet.getCellByPosition(0,i)
oCellType = oActiveCell.getType()
If oActiveCell.value <= _
oSheet.getCellByPosition(0,1).Value then
oActiveCell.CharColor = RGB(0,255,0)
Else
oActiveCell.CharColor = RGB(0,0,0)
End If
Next

End Sub

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

  • 取り消す
  • キャンセル

質問した人からのコメント

2019/5/24 16:09:39

かなりの期間、無回答であったので正直諦めてました(^^)

貴重な期間を割いて回答をいただき、さらに
コードを残したいと思いもあり ba といたしました。

当方は今,
=SetRange("A3:B200","D3:I200","Q3:Q200")
=setConditionFormat("数式が","$A3<=$A$2","文字G")

機会がありましたら再支援下さい。

あわせて知りたい

この質問につけられたタグ

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

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

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

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

閉じる

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

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

閉じる