リレーションシップの状態です。
hatenaさん、回答ありがとうございます。 デザインビューで開いて、保存するのですね。 早速ためしたところ、うまく行きました‼
ありがとうございます。 今後もよろしくお願いします。
投稿が中途半端になってしまったので>> 5は無視してください (hatenaさんへ、削除お願いします)
(中途半端に投稿されてしまったので再投稿します)
「(元の値)」や「(転記する値)」は説明のための抽象的な内容であり、実際にはコードの実行に合わせて適宜置き換えられますので、特別に「C001」や「C002」と言えるものではありません。(特定の場合にはそうなることもあるでしょう)
改めて説明しなおしますが、
For i = 1 To 5 Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & i) Next i
は、コード実行時には
Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & 1) Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & 2) Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & 3) Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & 4) Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & 5)
が実行されます。すでに述べたようにこの結果は
Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & 5)
だけしか意味を成しません 質問の(画像にあるような)結果を出したいのであれば
(転記先) = (追記の形になる式) '//(元の値)=>""、(転記する値)=>"C001"、転記先=>"C001" (転記先) = (追記の形になる式) '//(元の値)=>"C001"、(転記する値)=>"C002"、転記先=>"C001C002" (転記先) = (追記の形になる式) '//(元の値)=>"C001C002"、(転記する値)=>"C003"、転記先=>"C001C002C003" (転記先) = (追記の形になる式) '//(元の値)=>"C001C002C003"、(転記する値)=>"C004"、転記先=>"C001C002C003C004" (転記先) = (追記の形になる式) '//(元の値)=>"C001C002C003C004"、(転記する値)=>"C005"、転記先=>"C001C002C003C004C005"
このような処理になる記述が必要です
は、コードの実行時には
Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & i) Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & i) Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & i) Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & i)
デザインビューにしてからプロパティを変更して、閉じるときに保存すれば、次回開いたときに変更が反映されてます。
Dim fm As String Dim ctl As Control fm = "フォーム1" DoCmd.OpenForm fm, acDesign 'デザインビューに切り替え Set ctl = Forms(fm)!ラベル1 ctl.Left = 100 ctl.Top = 100 DoCmd.Close , , acSaveYes '保存して閉じる DoCmd.OpenForm fm '再度開く
ただ、運用中に頻繁にデザインビューに変更して、変更を保存するのは破損のリスクが高くなるので避けたいところです。
プロパティの変更値をテーブルに保存しておいて、フォームを開くときのイベントで、そのプロパティ値を設定するという設計をお勧めします。
回答ありがとうございます。 元の値とは、C001で、転記する値とは、C002で、この2つを連結して上書きするということでしょうか?
教えていただいた様に一対多関係に変更をしたら出来ました。 ありがとうございました。
まぁそうですね。より正確には「x = x + 1」は「xに1を加えた値でxを上書きする」となります
x = x + 1
では、
x = 1 x = 2 x = 3 x = 4 x = 5 Debug.Print x
と、
x = x + 1 x = x + 2 x = x + 3 x = x + 4 x = x + 5 Debug.Print x
ではどうなるでしょうか?
質問のコードを見直してみましょう
For i = 1 To 5 Forms![F_test2]![txtテキスト_1] = Me.Controls("txt子テキスト_" & i) & vbNewLine Next i
これは、実際にコードが実行される場合
(txtテキスト_1) = "C001" & vbNewLine (txtテキスト_1) = "C002" & vbNewLine (txtテキスト_1) = "C003" & vbNewLine (txtテキスト_1) = "C004" & vbNewLine (txtテキスト_1) = "C005" & vbNewLine
が実行されることになります。これでは一番最後の「"C005" & vbNewLineで上書きする」が最終結果として残るのみです 「追記(元の値を残した上でさらに書き込む)」には、「(元の値)と(転記する値) & vbNewLineを連結して上書きする」ようにする必要があります
"C005" & vbNewLine
(元の値)
(転記する値) & vbNewLine
回答ありがとうございます。
x= 1 は、そのままで x=x+1は、x=2だと思います。 まちがっていますか?
メインフォームとサブフォームのレコードソースのテーブルは、一対多関係のテーブルになってますか。
メインフォームとサブフォームのレコードソースのテーブルが同じものになってませんか。
ありがとうございました。回答遅くすみません。いろいろ苦戦していました。 最終的に教えて頂いた【レコードソースをクエリにして「正の値表示」「負の値表示」フィールドを作成する】方法で解決しました。
本当にありがとうございました。
プログラミングにおける
x = 1
と
の違いわかりますか?
テキストボックスのプロパティで書式を標準にしたらちゃんと判定しました。 ありがとうございました。
帳票フォームでタブコントロールを用いるのは考えつきませんでした。
ぜひ、利用させていただきます。ありがとうございます。
代替案ですが、帳票フォームでも下記詳細されている方法で表示項目を切り替えるというのも検討されてはどうでしょうか。
hatena様 ご回答ありがとうございます。
フィールドが多くあり、表示列を固定する(Excelでいうウインドウ枠の固定)必要があるので、データシートビューにしています。
私も調べたのですが、策が見つかりませんでした。 対応策がないということで理解しました。
調べてみましたが、なさそうですね。 データシートビューでは設定の自由度は低いですね。
帳票フォームではだめでしょうか。
hatena様 試せばよかった話でした。すみません。 ありがとうございました。
試してみればすぐわかることですが、 Exit Doの記述してある階層のDoのみ抜け出します。
hirotonは普段条件付き書式を使わないのでアレでしたが、ちょっと考えてみたら条件付き書式だけでも行けそうでした
値が 0 より小さい |前景色:赤 フォーカスがある |前景色:黒 値が 0 と等しい |前景色:(背景色と同じにする)
複雑になってくると一発でとはなかなかいかないですねぇ 他に何かうまい方法を知っている人がいるかもしれませんが
レコードソースをクエリにして「正の値表示」「負の値表示」フィールドを作成します
正の値表示: IIf([値]>0,Mid([値],1)+0) 負の値表示: IIf([値]<0,Mid([値],1)+0)
フォームには追加した2つのフィールドと合わせて3つのテキストボックスを配置します 各テキストボックスは次のように設定します
正の値表示テキストボックス
背景スタイル |透明 タブストップ |いいえ フォーカス取得時|[イベント プロシージャ]
フォーカス取得時のプロシージャは次の通りにします
Private Sub 正の値表示_Enter() Me!値.SetFocus End Sub
負の値表示テキストボックス
前景色 |(赤の色コード) タブストップ |いいえ
これら3つのテキストボックスをサイズを揃えて正面から「正の値表示」「負の値表示」「値」の順で重ねて配置します これで目的の見た目になると思います
※フィールド名は適切なものに書き換えてください
テキストボックスのプロパティはおっしゃる通りになっています。 条件付き書式も教えて頂いたとおり設定しました。 その状態で、値が0のときは0を非表示にしたいのですが、如何でしょうか?
3番ってなんでしょう? 単純にフィールドリストからコントロールを配置し、条件付き書式だけ設定すれば目的の状態になると思いますが
ちなみにこの時のテキストボックスのプロパティは
書式 |(空白) 小数点以下表示桁数|自動
になっていると思いますがどうですか?
ありがとうございます。色は条件付き書式でできました! ですが2番と3番を同時に満たすにはどうしたらよいでしょう? 0も条件付き書式で白にして、見えないようにすることもできますが、入力時に困るので、他の方法を探しています。
色の設定は条件付き書式で設定してみては?
すでにhirotonさんから回答があるDSumでも可能ですが、DSum関数は重い処理になりますので、データ件数が多い場合は集計クエリを使う方法がいいでしょう。
テーブルから集計クエリを作成して、「コード」をグループ化、「値引」を合計に設定します。
さらにクエリを新規作成して、テーブルと上記の集計クエリを追加して、「コード」で結合すればご希望の結果が得られます。
hiroton様
ありがとうございました。 出来ました。 大変助かりました。
上記回答のリンク先はMicrosoftの公式ページですが、キーワードが分かったのなら、例えば「access クエリ dsum」等でWeb検索すればいろいろ情報がでてきますよ
クエリでこのような関数を使う場合、式の中にそのレコードの値を使うことができます。Excelでセル参照をするようなものです(ただし、同じ行のデータしか指定できませんが)
コード毎に集計をしたいということなので、DSum関数の条件(criteria)部分に
"コード='"&[コード]&"'"
を指定すれば目的を達成できるでしょう
hiroton様 ありがとうございます。 すみません。もう少し詳しくお願いできますでしょうか。 なにぶん素人なものですから。 クエリを使って可能なのでしょうか? 宜しくお願い致します。
手っ取り早いのはDSum関数を使う方法でしょう
DSum 関数
hatena様早速のご返答ありがとうございます。 出来ました。 備忘録として: Format(Format([フィールド名],"0000/00/00"),"m""月 ""d\日")と自然に変更されていました。 ありがとうございました。
下記のような演算フィールドを作成すればいいでしょう。
和暦日付: Format(Format([フィールド名],"0000/00/00"),"m月d日")
hatena さま 返信ありがとうございます。 指示通りにレポートを変更して 思い通りのPDFを発行することができました。 本当に助かりました。ありがとうございました。
「発注明細書」レポートをコピーして、そのレポートのレポートヘッダーに「発注書(鑑)」レポートをサブレポートとして埋め込めば、発注書(鑑)と発注明細書が一つのレポートとして出力できます。
このレポートをpdfとして出力すればいいでしょう。
ありがとうございます。やりたいことができました!
10の位の切り上げではなく、切り上げする桁数を指定して切り上げする式を、 hatena様のご提示いただいた式を基に作成させていただきました。
-INT(-([数値]/10^[桁数]))*10^[桁数]
負の数の切り上げは-531→-530で大丈夫です。
良い式が出来上がり、とてもよかったです。ありがとうございました。
数値の変換例をみると、切り捨てではなくて、切り上げですね。
下記でどうでしょうか。
-Int(-[数値]/10)*10
ただし、上記だと負数の場合、 -531→-530 と正方向へ丸められますので、一般的な切り上げの仕様の -531→-540 としたいなら、
-Int(-Abs([数値])/10)*10*Sgn([数値])
すみません。 自作関数を作成してスマートにしました。 ありがとうございました。
hatena様 追加のご連絡ありがとうございます。 確認してみます!
Accessのテーブルやクエリのデータを貼り付ける場合は下記で、Markdown書式のテーブルに変換して貼り付けてください。
Markdown Tables generator
リレーションシップの状態です。
hatenaさん、回答ありがとうございます。
デザインビューで開いて、保存するのですね。
早速ためしたところ、うまく行きました‼
ありがとうございます。
今後もよろしくお願いします。
投稿が中途半端になってしまったので>> 5は無視してください
(hatenaさんへ、削除お願いします)
(中途半端に投稿されてしまったので再投稿します)
「(元の値)」や「(転記する値)」は説明のための抽象的な内容であり、実際にはコードの実行に合わせて適宜置き換えられますので、特別に「C001」や「C002」と言えるものではありません。(特定の場合にはそうなることもあるでしょう)
改めて説明しなおしますが、
は、コード実行時には
が実行されます。すでに述べたようにこの結果は
だけしか意味を成しません
質問の(画像にあるような)結果を出したいのであれば
このような処理になる記述が必要です
「(元の値)」や「(転記する値)」は説明のための抽象的な内容であり、実際にはコードの実行に合わせて適宜置き換えられますので、特別に「C001」や「C002」と言えるものではありません。(特定の場合にはそうなることもあるでしょう)
改めて説明しなおしますが、
は、コードの実行時には
デザインビューにしてからプロパティを変更して、閉じるときに保存すれば、次回開いたときに変更が反映されてます。
ただ、運用中に頻繁にデザインビューに変更して、変更を保存するのは破損のリスクが高くなるので避けたいところです。
プロパティの変更値をテーブルに保存しておいて、フォームを開くときのイベントで、そのプロパティ値を設定するという設計をお勧めします。
回答ありがとうございます。
元の値とは、C001で、転記する値とは、C002で、この2つを連結して上書きするということでしょうか?
教えていただいた様に一対多関係に変更をしたら出来ました。
ありがとうございました。
まぁそうですね。より正確には「
x = x + 1
」は「xに1を加えた値でxを上書きする」となりますでは、
と、
ではどうなるでしょうか?
質問のコードを見直してみましょう
これは、実際にコードが実行される場合
が実行されることになります。これでは一番最後の「
"C005" & vbNewLine
で上書きする」が最終結果として残るのみです「追記(元の値を残した上でさらに書き込む)」には、「
(元の値)
と(転記する値) & vbNewLine
を連結して上書きする」ようにする必要があります回答ありがとうございます。
x= 1 は、そのままで
x=x+1は、x=2だと思います。
まちがっていますか?
メインフォームとサブフォームのレコードソースのテーブルは、一対多関係のテーブルになってますか。
メインフォームとサブフォームのレコードソースのテーブルが同じものになってませんか。
ありがとうございました。回答遅くすみません。いろいろ苦戦していました。
最終的に教えて頂いた【レコードソースをクエリにして「正の値表示」「負の値表示」フィールドを作成する】方法で解決しました。
本当にありがとうございました。
プログラミングにおける
と
の違いわかりますか?
テキストボックスのプロパティで書式を標準にしたらちゃんと判定しました。
ありがとうございました。
帳票フォームでタブコントロールを用いるのは考えつきませんでした。
ぜひ、利用させていただきます。ありがとうございます。
代替案ですが、帳票フォームでも下記詳細されている方法で表示項目を切り替えるというのも検討されてはどうでしょうか。
hatena様
ご回答ありがとうございます。
フィールドが多くあり、表示列を固定する(Excelでいうウインドウ枠の固定)必要があるので、データシートビューにしています。
私も調べたのですが、策が見つかりませんでした。
対応策がないということで理解しました。
調べてみましたが、なさそうですね。
データシートビューでは設定の自由度は低いですね。
帳票フォームではだめでしょうか。
hatena様
試せばよかった話でした。すみません。
ありがとうございました。
試してみればすぐわかることですが、
Exit Doの記述してある階層のDoのみ抜け出します。
hirotonは普段条件付き書式を使わないのでアレでしたが、ちょっと考えてみたら条件付き書式だけでも行けそうでした
複雑になってくると一発でとはなかなかいかないですねぇ
他に何かうまい方法を知っている人がいるかもしれませんが
レコードソースをクエリにして「正の値表示」「負の値表示」フィールドを作成します
フォームには追加した2つのフィールドと合わせて3つのテキストボックスを配置します
各テキストボックスは次のように設定します
正の値表示テキストボックス
フォーカス取得時のプロシージャは次の通りにします
負の値表示テキストボックス
これら3つのテキストボックスをサイズを揃えて正面から「正の値表示」「負の値表示」「値」の順で重ねて配置します
これで目的の見た目になると思います
※フィールド名は適切なものに書き換えてください
テキストボックスのプロパティはおっしゃる通りになっています。
条件付き書式も教えて頂いたとおり設定しました。
その状態で、値が0のときは0を非表示にしたいのですが、如何でしょうか?
3番ってなんでしょう?
単純にフィールドリストからコントロールを配置し、条件付き書式だけ設定すれば目的の状態になると思いますが
ちなみにこの時のテキストボックスのプロパティは
になっていると思いますがどうですか?
ありがとうございます。色は条件付き書式でできました!
ですが2番と3番を同時に満たすにはどうしたらよいでしょう?
0も条件付き書式で白にして、見えないようにすることもできますが、入力時に困るので、他の方法を探しています。
色の設定は条件付き書式で設定してみては?
すでにhirotonさんから回答があるDSumでも可能ですが、DSum関数は重い処理になりますので、データ件数が多い場合は集計クエリを使う方法がいいでしょう。
テーブルから集計クエリを作成して、「コード」をグループ化、「値引」を合計に設定します。
さらにクエリを新規作成して、テーブルと上記の集計クエリを追加して、「コード」で結合すればご希望の結果が得られます。
hiroton様
ありがとうございました。
出来ました。
大変助かりました。
上記回答のリンク先はMicrosoftの公式ページですが、キーワードが分かったのなら、例えば「access クエリ dsum」等でWeb検索すればいろいろ情報がでてきますよ
クエリでこのような関数を使う場合、式の中にそのレコードの値を使うことができます。Excelでセル参照をするようなものです(ただし、同じ行のデータしか指定できませんが)
コード毎に集計をしたいということなので、DSum関数の条件(criteria)部分に
を指定すれば目的を達成できるでしょう
hiroton様
ありがとうございます。
すみません。もう少し詳しくお願いできますでしょうか。
なにぶん素人なものですから。
クエリを使って可能なのでしょうか?
宜しくお願い致します。
手っ取り早いのはDSum関数を使う方法でしょう
DSum 関数
hatena様早速のご返答ありがとうございます。
出来ました。
備忘録として: Format(Format([フィールド名],"0000/00/00"),"m""月 ""d\日")と自然に変更されていました。
ありがとうございました。
下記のような演算フィールドを作成すればいいでしょう。
hatena さま 返信ありがとうございます。
指示通りにレポートを変更して
思い通りのPDFを発行することができました。
本当に助かりました。ありがとうございました。
「発注明細書」レポートをコピーして、そのレポートのレポートヘッダーに「発注書(鑑)」レポートをサブレポートとして埋め込めば、発注書(鑑)と発注明細書が一つのレポートとして出力できます。
このレポートをpdfとして出力すればいいでしょう。
ありがとうございます。やりたいことができました!
hatena様
ご回答ありがとうございます。
10の位の切り上げではなく、切り上げする桁数を指定して切り上げする式を、
hatena様のご提示いただいた式を基に作成させていただきました。
-INT(-([数値]/10^[桁数]))*10^[桁数]
負の数の切り上げは-531→-530で大丈夫です。
良い式が出来上がり、とてもよかったです。ありがとうございました。
数値の変換例をみると、切り捨てではなくて、切り上げですね。
下記でどうでしょうか。
ただし、上記だと負数の場合、
-531→-530
と正方向へ丸められますので、一般的な切り上げの仕様の
-531→-540
としたいなら、
すみません。
自作関数を作成してスマートにしました。
ありがとうございました。
hatena様
追加のご連絡ありがとうございます。
確認してみます!