UPDATE T_見積明細 SET T_見積明細.利益率 = [Forms]![F_見積]![txt利益率反映], T_見積明細.提供単価 = Int([forms]![F_見積].[F_見積明細].[Form].[仕入価格]/(1-[forms]![F_見積].[F_見積明細].[Form].[txt利益率])/[forms]![F_見積].[F_見積明細].[Form].[txt数量]+0.5)
WHERE (((T_見積明細.[チェック])=Yes) AND ((T_見積明細.見積ID)=[Forms]![F_見積]![txt見積ID]));
Private Sub txtテスト_DblClick(Cancel As Integer)
With Me!txtテスト
If Not IsNull(.Value) Then
.SelStart = 0
.SelLength = Len(.Value)
DoCmd.RunCommand acCmdCopy
End If
End With
End Sub
フォームのプロパティを下記のように設定すれば下図のようにはなります。
角丸は画像を使えば可能ですが、そこまで労力をかけるまでもないとは思います。
「本日の目標」は営業日のみです
日付 名前 目標ID
2020/11/12 田中 1
2020/11/12 鈴木 1
2020/11/12 高橋 1
2020/11/13 田中 2
2020/11/13 鈴木 2
:
:
2020/12/13 田中 40
2020/12/14 田中 1
と、日付が変わるごとに目標IDをずらしていき
最後まで来ると、また1から、というループにしたいです
プロパティを適当にいじってたら治ったようです。一時的なもので、また動かなくなる気もしますが。。
とりあえずリフレッシュの件を勉強できてよかったです。
hiroton様ありがとうございました!
ありがとうございます!時間が取れるタイミングでリフレッシュしてみたいと思います。
1つ気づいたことがあったので報告させていただきます。
該当のフォームをダブルクリックした時波打つと書いていましたが、
正確にはデスクトップに並んでいるアイコンが一瞬チカチカする感じでした。。
名刺上では無理でしょう。
ローマ字表記にするしかないのでは。
というか名刺には社員名が印字されていますよね。
わさわざQRコードにする意味はなんですか。
メールアドレスとかをQRコードにするなら分かりますが。
謎の現象が起きる場合はとりあえずリフレッシュ
AccessのDBファイルを長期的に安定して使用するには(hatena chips さん)
該当箇所は記事の下のほうです
もしかすると
Windows 10 バージョン 2004 (20H1) / 20H2 上で 半角カナのフォームを含んだ Access ファイルでエラーが発生する
たぶんそう(12行に)なると思います
が、条件が複雑になるときは、「条件式でフィールドを作る」とすっきりできる場合があります
たとえばクエリデザインで
というフィールドを追加します。このクエリを表示すると式1フィールドに「条件1~4のいずれかがfalse」なら「-1」、それ以外なら「0」と表示されます。このフィールドに対して抽出条件を設定すれば「①のために抽出条件を4行作っています。」が1行で済むようになります
ちなみに上記の「-1」「0」はそれぞれ「True」「False」に対応しています。フィールドには内部的な値(数値)が表示されるということですね。なので、抽出条件の部分には「True」と指定してあげれば望みの条件になります
も、抽出にHITさせたいときには「True」となるような条件式のフィールド
を作ってあげれば1行で済み、「① AND ② AND ③」の形で抽出条件は1行にできます
hiroton 様
ご回答ありがとうございます。
おっしゃるとおり社員名フィールドは日本語です。
社員名フィールドを社員番号フィールドにするとしたらどうやって社員名と紐づけしたらよろしいのでしょうか・・?
社員名に日本語を使っていませんか?Microsoft Barcode Controlは全角文字に対応していないのでそういう文字が含まれていると表示されないようです
再現確認、ありがとうございます。
とりあえず、ListCount<2で対応中です。
試してみました(ACCESS2013)たしかに謎の挙動をしますね
フォームを開いた後何もせずに(ACCESSも触らずに)ほかの作業をしてしばらくしてからテキストボックスをクリックすると「1」になることもある。
Me.Recalc
やMe.リスト2.Requery
を入れると必ず「0」になる。等の挙動を追加で確認できました
とりあえず、データがないときの
ListCount
の値が重要になるとも思えないのでListCount<2
の判定で処理を組んだらどうでしょうかすみません。解決しました。
具体的には、2個のクエリを使い、ご指摘の部分のみ1個目のクエリで変更。
2個目のクエリでそれ以外を変更し、うまくいきました。
ありがとうございました。
更新ボタンを押したら、
以下、VBA
新データの先頭レコードに移動
旧データの非連結テキストボックス(事前準備)に新データのIDを代入
旧データを非連結テキストボックスとクエリ(事前準備)で絞り込み
旧データの利益率フィールドに新しい利益率を代入
新データの次行に移動
の繰り返しが出来れば、どうだろうという感じです。
休業日とか決まってないのですか。普通の営業形態は、休業日か決まっていて(当然営業日も決まる)。休日出勤があるとしても「本日の目標」は営業日のみにあるのが普通かなと思いましたが。
とくに休業日が決まっていないなら、全ての日付のマスターテーブルを作成してそれに連番を持たせるようにすればいいでしょう。
社員が出社したときだけ本日の目標を発行するということなら、その都度、営業日マスターにその日付を追加するようにすればいいでしょう。
営業日をマスタ化するのですか?
営業日が前もって決まっているわけではなく、出勤簿をつけるときにはじめて確定します
紙ベースでいうと出勤簿用紙があり、日付などを書いたあとに、出勤順にリスト状に記入していく感じです
ありがとうございます。
一旦該当のテキストボックスから数値を変数化して、クエリの部分をVBAにして、繰り返しさせるようなイメージでしょうか…
ご確認ありがとうございます。ご指摘の部分が、非連結のテキストボックスになっており、クエリ内に反映できない状況です。この部分はメインフォームで、その他はサブフォームになっています。
ヒントをいただいているのに、質問ばかりで申し訳ありません。
YESのデータが50件エクセル行みたいなイメージであるとします。1件目の先頭データ行に移動すると、フォーカスがあたり編集出来るっぽい状態になるかもしれない。そこで、更新クエリをすると、1件目の結果が反映。次の行に移動して、2件目の結果を反映。…1件ずつの結果を50回更新クエリする感じでしょうか?
Q_見積明細.利益率 = [Forms]![F_見積作成]![txt利益率反映],
というようにフォームを参照するのではなく、クエリ内のフィールドの値を利用して利益率を計算するようにしてください。パーセンテージ表示はうまくいきました。ありがとうございました。
>クエリ内で利益率を計算
下記に修正してみましたが、結果は変わらず1件の結果が他のものに反映されます…
勘違いしていますか?解決法はありますでしょうか。
おかげ様で解決いたしました!!
ラベル(テキストボックス)の方の設定が不十分でした・・・
本当にありがとうございました。
ダイアログモード(acDialog)で開いたときでも、フォームのサイズをマウスで変更できるようにしたいということでしょうか。
ダイアログモードはサイズ変更できないという仕様なので、ダイアログモードで開くのはやめて、フォームの「ポップアップ」を「はい」、「作業ウィンドウ固定」を「はい」にすればほぼダイアログモードと同じ状態でサイズ変更可能になります。ちょっとVBAでの動作が異なるので注意が必要ですが。
ダイアログモードで開く場合の意味は、他のウィンドウの操作ができないので、そのフォームでの処理に集中することができるということです。他のウィンドウを操作されて関連するデータを変更されたりすると困りますので。
「作業ウィンドウ固定」を「はい」も同様の意味になります。
「ポップアップ」を「はい」は常に前面に表示されるという効果になります。
ダイアログモードはポップアップ効果もあります。
クエリでフォームを参照すると、表示されているレコードの値あるいは計算値を参照します。
クエリ内で利益率を計算するようにしてください。
原因不明のままでしたが、レポートで空の行を詰めるのがうまくいかなかった経験があります。
その際は一旦テキストボックスを消して、作り直してみたらうまくいきました。
(もちろんプロパティ設定は忘れずに)
ありがとうございます。現在「パーセント」としていました。変更して実験してみます!
同じく、パーセンテージに関わるのですが
チェックした全てのレコードに利益率を反映させたいです。
下記更新クエリを試すと、チェックした全てのレコードではなく1つのレコードの計算結果が、すべてに反映されます。
どのように修正すれば1件ずつ計算結果がでるようになりますでしょうか。
上下のテキスト間の間隔をなるべく詰めてください。この余白部分は縮小しませんので。
簡単なサンプルを作成してテストしてみました。
デザインビュー
プレビュー
少なくとも下記のようなテーブルに分割すべきですね。
生徒マスター(生徒番号 氏名 学年 ・・・)
テストマスター(テストID 科目 テスト日 ・・・)
テスト結果(テストID 生徒番号 点数)
正規化の意味ややり方は、
下記が分かり安くまとめられていると思いますので参考にしてください。
正規化とは - もう一度学ぶMS-Access
正規化の実例 - もう一度学ぶMS-Access
>あと、=IIf(Nz([フィールド名])="","","項目名")これをいれると、テキストボックスに文字が入っても消えたままになってしまいます。
すみません。こちらは解決しました。
あとは空のテキストボックスが詰めてくれれば完璧なのですが・・・
罫線などはひいていないです。
あるのはラベルとテキストボックスだけです・・・
あと、=IIf(Nz([フィールド名])="","","項目名")これをいれると、テキストボックスに文字が入っても消えたままになってしまいます。
まずは営業日マスターテーブルを作成しましょう。
営業日IDは連番になるようにします。(オートナンバー型は削除したりすると抜けがでるので自前で採番するようにします。)
日付は主キーにしておきます。
営業日マスター
40まで
フォームやレポートのレコードソースのクエリは出勤簿と営業日マスターを日付で結合しておきます。
フォームやレポートの本日の目標を表示したいテキストボックスのコントロールソースを下記のように設定します。
他にコントロールは配置してませんか。直線コントロールで罫線を引いているとか。
回答ありがとうございます。
ラベルの文字は消えましたが空いたところを詰めてはくれませんでした・・・
コントロール名も間違っていました。。スミマセン。
自分自身を選択するのは一工夫必要だったんですね…
よくわかりました。ありがとうございました。
テキストが選択状態じゃないとそのエラーが発生します。自分自身に
SetFocus
してもテキストは選択状態にならないのでそのエラーが発生します質問文中コントロール名があやしい(txtテスト/txt製品名)ので見直してみてください
パーセンテージ表示はどのように実現してますか。
書式プロパティに 0% というような感じで設定してますか。
デザインビューでラベルを右クリック[コントロールの種類の変更]→[テキストボックス]でテキストボックスに変換して、
コントロールソースを下記のように設定します。
=IIf(Nz([フィールド名])="","","項目名")
で、印刷時縮小を「はい」にします。
以上でどうでしょう。
VBA、クエリともバッチリうまくいきました。うれしいです!ありがとうございました。
あー!すみません。コード間違ってました。
DMax は SELECT文の方にいれないとだめでした。
遅くなり、申し訳ありません。
印刷時の縮小をはいにしましたが特に変化はありませんでした。
ラベルがあるからでしょうか?
出来ればラベルも一緒に詰めるようにしたいです。
ちなみにエラーが出るのは「CurrentDb.Execute sSQL, dbFailOnError」の最終行でした。