みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
初めて投稿します。
複数フィールドの入力値の文字色を、一括で変更することはできますでしょうか。
File Maker Pro 11を使用している初心者です。
情報の変更箇所がわかるように、変数などを使って入力値に変更のあったフィールド内の文字色が赤くなるように設定しています(変更なしは黒)。
特定の人物が情報を印刷後、全ての入力値の文字を黒色に戻したいのですが、例えば、ボタン操作で一括変更できるのでしょうか。
かなりの数のフィールド、レコードを対象にしたいため、簡単にできる方法があれば、、と思っております。
どうぞよろしくお願いいたします。
Offline
その設定を解除する様に仕組めば良いのですが、その設定の作り方によって変わるでしょうね。
その内容は?
Offline
Shinさま
ありがとうございます。
設定の解除という選択肢があるのですね。
設定は、試行錯誤の末、下記で進めています。
●スクリプトトリガOnObjectEnter
変数を設定[$$入力前 ; Get ( アクティブフィールド内容 )]
●スクリプトトリガOnObjectExit
変数を設定[$変更後 ; 値:Get ( アクティブフィールド内容 )]
If [$$入力前 = $変更後]
現在のスクリプト終了[]
Else
計算結果を挿入[選択;TextColor ( Get ( アクティブフィールド内容 ) ; RGB ( 255 ; 0 ; 0 ) )]
End If
これを、対象フィールドすべてに一つ一つあてがっています。
よろしくお願いいたします。
Last edited by FM11使用 (2016-08-18 16:09:19)
Offline
CSVなどにエクスポートして、上書きでインポートすればクリアされます。
scripter様
CSVなどにエクスポートして、上書きでインポートすればクリアされます。
ありがとうございます。
試みてみたのですが、MacとWindowsの両方で共有しているからか、文字化けしてしまいました。
ウムラウトなども混ざっているので、できればエクスポートすることなく文字色を変更できたらと思っております。
Offline
ベタベタですが、、
それらのフィールド全てにタブ順を振っておいて、
Loopでフィールド一つずつ黒くしていくのはいかがでしょう
Offline
それらのフィールド全てにタブ順を振っておいて、
Loopでフィールド一つずつ黒くしていくのはいかがでしょう
チポ様
ありがとうございます。
やはりLoopは候補にあがりますよね。。。
今ざっと数えたところ、80フィールド×50レコードくらいあったのですが、
ひとまずLoopでできるか試してみます。
Offline
タブ順を振っておけば、
次のフィールドへ移動
を繰り返せばいいですから、
フィールドがいくつあってもスクリプトステップは簡単です。
Loopを抜けることを考えなければなりませんね。
> 80フィールド×50レコードくらいあったのですが
処理はアッと言う間でしょう。
Offline
チポ様
皆さま
Loopを抜けるために、目立たない場所に捨てフィールド(”完”)を作成して、
下記で作動するようになりました。
(ログも表示しているので、ついでに消すスクリプトを挿入しました。)
レコード/検索条件/ページへ移動[最初の]
Loop
フィールドへ移動[選択/再生; フィールドA]
Loop
計算結果を挿入[選択; TextColor ( Get ( アクティブフィールド内容 ) ; RGB ( 0 ; 0 ; 0 ))]
次のフィールドへ移動
Exit Loop If [Get ( アクティブフィールド内容 ) = "完"]
End Loop
【ログを消すスクリプト実行】
レコード/検索条件/ページへ移動[次の;最後まできたら終了]
End Loop
いかがでしょうか。。。
Offline
Atribute というテキストフィールドを作っておきます。
各フィールドに、not IsEmpty ( FilterValues ( テーブル::Attribute ; "Field2" ) ) {"Field2" は、各フィールド名} を条件とした条件付き書式を設定しておきます。
各フィールドに、スクリプトトリガー OnObjectEnter で次のスクリプトを、スクリプト引数 : "OnObjectEnter" で呼び出し、スクリプトトリガー OnObjectExit で次のスクリプトを呼び出すように設定しておきます。
If [ Get ( スクリプト引数 ) = "OnObjectEnter" ]
#OnEnter
変数を設定 [ $$pre; 値:Get ( アクティブフィールド内容 ) ]
Else If [ $$pre = Get ( アクティブフィールド内容 ) ]
変数を設定 [ $$pre; 値:"" ]
Else
フィールド設定 [ テーブル::Attribute; Get ( アクティブフィールド名 ) & ¶ & テーブル::Attribute ]
変数を設定 [ $$pre; 値:"" ]
End If
特定の人が印刷した後で、Attribute をクリアすれば、条件付き書式もリセットされます。
https://www.dropbox.com/s/49czr7jvvmsye … 7.zip?dl=0
この方法の難は、条件付き書式にフィールド毎に違う計算式が必要な所です。クリップボードの内容を編集するツールを使えば、その内容の以下の行の "Field2" の部分を書き換えるか、<Calculation> のタグの部分を追加するだけです。フィールドのコピーペーストかカットペーストの途中でこの作業を行えば比較的簡単に済みます。
<Calculation><![CDATA[ not IsEmpty ( FilterValues ( テーブル::Attribute ; "Field2" ) )]]></Calculation><RangeBegin></RangeBegin>
<FieldObj numOfReps="1" flags="32" inputMode="0" displayType="0" quickFind="1">
<Name>テーブル::Field2</Name>
<DDRInfo>
<Field name="Field2" id="3" repetition="1" maxRepetition="1" table="テーブル"/>
</DDRInfo>
</FieldObj>
クリップボードの内容を編集するツールは、
FMClipboardEdit_0.2.zip
http://filemaker-kou.seesaa.net/article/263596698.html
FMClipboardBroker
http://www.key-planning.co.jp/software/ … ardbroker/
で落としてください。
Offline
> 捨てフィールド(”完”)を作成して
最初のフィールドに戻ったらLoopを抜けるとすればいいのでは。
捨てフィールド不要でしょう。
以前
計算結果を挿入
と
フィールド設定
で同じ計算をする
のをLoopで100,000回テストしたことがありました。
その結果は圧倒的にフィールド設定の方が早かった記憶があります。
TextColor
の設定を戻すのに
TextColorRemove関数
が有りますよ。
Offline
チポ様
皆様
お返事遅くなりました。
チポ様、Shin様、ご助言ありがとうございます。
最終的に以下のスクリプトで組むことができました。
>レコード/検索条件/ページへ移動[最初の]
>Loop
>>フィールドへ移動[選択/再生;フィールドA]
>>変数を設定[$変更前;値:フィールドA]
>>Loop
>>>フィールド設定[TextColor ( Get ( アクティブフィールド内容 ) ; RGB ( 0 ; 0 ; 0 ))]
>>>次のフィールドへ移動
>>>Exit Loop If [Get ( アクティブフィールド内容 ) = $変更前]
>>End Loop
>>【ログを消すスクリプト実行】
>>レコード/検索条件/ページへ移動[次の;最後まできたら終了]
>End Loop
「最初のフィールドに戻ったらLoopを抜ける」設定方法がわからず、覚えたての変数を使用してみました。
(たぶん同じ値を入れることはないと思うので、、、)
このスクリプトができたことで、かなり使い勝手のよいシステムになりそうです。
また行き詰ってしまったら質問させてください。
ありがとうございました!
Offline
Get ( アクティブフィールド名 )関数
が有りますヨ
ヘルプのリンクですFM14ですが、ほぼ同じです。
http://www.filemaker.com/help/14/fmp/ja … html#88792
Offline
投稿が遅くなりました。
チポ様ありがとうございます。
「Get(アクティブフィールド名)」を使用して、あれから何度か試してみたのですが、
どうしてもLoopから抜けることができません、、、
下記でおかしなところがありますでしょうか?
>レコード/検索条件/ページへ移動[最初の]
>Loop
>>フィールドへ移動[選択/再生;フィールドA]
>>Loop
>>>フィールド設定[TextColor ( Get ( アクティブフィールド内容 ) ; RGB ( 0 ; 0 ; 0 ))]
>>>次のフィールドへ移動
>>>Exit Loop If [Get ( アクティブフィールド名 ) = フィールドA]
>>End Loop
>>【ログを消すスクリプト実行】
>>レコード/検索条件/ページへ移動[次の;最後まできたら終了]
>End Loop
何度もすみません。
よろしくお願いいたします。
Offline
Exit Loop If [Get ( アクティブフィールド名 ) = "フィールドA"]
としないとフィールドAの内容をフィールド名と比べてしまう。
scripter様
ありがとうございます。
>レコード/検索条件/ページへ移動[最初の]
>Loop
>>フィールドへ移動[選択/再生;フィールドA]
>>Loop
>>>フィールド設定[TextColor ( Get ( アクティブフィールド内容 ) ; RGB ( 0 ; 0 ; 0 ))]
>>>次のフィールドへ移動
>>>Exit Loop If [Get ( アクティブフィールド名 ) = "フィールドA"]
>>End Loop
>>【ログを消すスクリプト実行】
>>レコード/検索条件/ページへ移動[次の;最後まできたら終了]
>End Loop
こういうことですね!
こちらでやってみたのですが、フィールドAに戻ってもやはりLoopから抜けられません(T T)
ログを残していて、それを見る限りフィールドAには戻っており、後はLoopを抜けるだけなのですが。。。
Offline
> "フィールドA"
これが実際のフィールド名になっていない
ぐらいしか考えられませんね。
データベースの管理からフィールド名をコピペしてみたらいかがでしょう。
Offline
チポ様
原因がわかりました!
「フィールドA」にあたる部分が、「テーブル名::フィールドA」になっていたのが原因でした。
”フィールドへ移動”の指示のときに、上記の表示になっていたので、同じ表記だから~と考えてテーブル名から入力していました。。。
時間がかかりましたが、ようやくスクリプトを完成させることができました。
皆さまお助けいただき本当にありがとうございました!
Offline
Pages: 1
[ Generated in 0.011 seconds, 8 queries executed - Memory usage: 562.79 KiB (Peak: 583.7 KiB) ]