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
Private Sub Form_Load()
If Me.OpenArgs = "ShowObj" Then Exit Sub
Dim dTime
Dim nSyoukei As Long
Dim nKeikaFun As Integer
Dim s1 As String
Dim c1 As Integer
Echo False
If Me.Recordset.RecordCount = 0 Then
Me.txt時刻.TabStop = False
Me.TimerInterval = 10 '10ミリ秒後にタイマー時イベント実行
Else
'略
End If
Echo True
End Sub
Private Sub cbo食材ID_GotFocus()
Me.cbo食材ID.Dropdown
End Sub
[cbo食材ID]の値集合ソースは
SELECT T食材.食材名, T食材分類.食材分類名, Format([㌍],"@@@") AS カロリー, T食材.食材ID, [×Q食材1].食材名のカウント
FROM (×Q食材1 RIGHT JOIN T食材 ON [×Q食材1].食材ID = T食材.食材ID) INNER JOIN T食材分類 ON T食材.食材分類ID = T食材分類.食材分類ID
ORDER BY [×Q食材1].食材名のカウント DESC , T食材.食材名;
です。
ダイアログモード(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」の最終行でした。
教えていただいたVBAで全て書き直したところ下記のエラーが出ます。
INSERT INTO ステートメントに、認識できないフィールド「11」があります。名前が正しいことを確認して、再度実行してください。
ちなみに11というのは maxIDと同じ値になっています。
ありがとうございます。今回クエリで作ったもののSQLで、自動でカッコがついてしまっていたのですが、SQL画面で外そうとすると
「INSERT INTOステートメントの構文エラーです」と表示され、保存できませんでした。
[DMax("主キーフィールド", "メイン")]
の部分は、
[
]
で囲まずに、DMax("主キーフィールド", "メイン")
に修正してください。
[
]
で囲むとフィールド名して認識されます。すみません。
開いた時に最初にフォーカスするのがコンボボックスで
その時、症状がでるのは、分かっていることでした。
なにぶん、長期間にわたり、解決しなかった事が
一瞬で解決してしまった事に、戸惑っています。
本筋から外れるかもしれませんが、
もう一つの帳票は、コンボボックスにフォーカスする前に
日付を入力するようになっているため、そこでは正常にドロップダウンして、
サブフォームを入力する場合は、最初にコンボボックスにフォーカスします。
一つの入力フォームしか、見せていないのに
なぜ、開いた時最初にフォーカスするのがコンボボックスの時に症状がでると
判断できたのか、知りたいです。
コードに一部ミスがありましたので記載しなおします。
また、エラーもDMamxと記載してしまいましたが、DMaxの書き間違いです。スミマセン
VBAを教えていただいたのですが、accessのクエリで作成してみようと思ったところつまづいてしまいました。
メインはうまく追加できるのですが、サブの追加クエリがエラーで止まってしまいます。
(エラーを飛ばしてメインだけ作成されたりもする)
エラー内容
⇒INSERT INTO ステートメントに、認識できないフィールド'DMamx(・・・・)'があります。名前が正しいことを確認して、再度実行してください。
力不足で申し訳ありません。ご助言宜しくお願いいたします。
開いた時最初にフォーカスするのがコンボボックスの時に症状がでるとの指摘が
的を射ていました。
私は、まったく気づきませんでした。
なぜかは、分かりませんが、問題は解決しました。
ありがとうございました。
hatenaさま>
なるほどです…
もし今後、変更が必要になった際には頑張ってフィールドごと変えてみます(関連する年齢計算とか在職年数とかの変更を考えるとちょっと気が遠くなりましたが(^-^;;
ありがとうございました。
hirotonさん>
ありがとうございます!
希望通りの挙動になりました。
助かりました。
また何かありましたらどうぞよろしくお願いします。
ありがとうございました。
すみません。
今、新しい仕入データを入力すると
やはり、ドロップダウンしませんでした。
ひとつ変化がありました。
なんと、Enter に変更した仕入伝票のサブフォームの明細入力が
一行目からドロップダウンしました。
指摘された時は、ドロップダウンしなかったのですが、
今、新しいデータを入力すると、ドロップダウンしました。
送信した 食事明細入力.accdb はドロップダウンしないことは
一度確認しましたが、なんだか訳が分かりません。
送信ファイル、拝見しました。
開いたときに最初にフォーカスがくるのがコンボボックスのとき、症状がでるようです。
txt時刻の「タブストップ」を「はい」にすると開いたときこれに最初にフォーカスがきますので、その後、コンボボックスにフォーカスを移動するようにすればいいでしょう。
ただし、開く時イベントでフォーカス移動しても同じ症状になるので、タイマーイベントを使って少し遅らせてフォーカス移動させるようにすれば、コンボボックスのリストを開いた状態にできます。
txt時刻
タブストップ いいえ
フォーム
タイマー時 [イベント プロシージャ]
タイマー間隔 0
「開く時」のイベントプロシージャのコードは「読み込み時」(Form_Load)のイベントプロシージャに移動して、下記のように修正してください。
修正済みファイルは下記からダウンロードできます。
修正ファイル
ありがとうございます!クエリの中身までVBAで記載する勉強にもなりました。
仕入データのあるものは、控えました。
もう一つの、日々の食事データを入力しているものを
送信しました。よろしくお願いします。
わかりました。
ただ、仕入先等の情報がありますので
今日中には、データを作って送信します。
こちらで現象を再現できないので、実際のファイルを見ないと原因の特定は難しいですね。
症状の出るAccessファイルを送信してもらえたら原因が特定できるかもしれません。
よろしければ右カラムの下にあるファイル送信フォームから送信もらえますか。
2つとも
フォーカス取得時イベント(Enter)
に変更してみましたが、同じでした。
そして、2行目からは正常にドロップダウンします。
フォーカス取得後イベント(GotFocus)をフォーカス取得時イベント(Enter)に変更したらどうなりますか。
私の場合は、Enter を使っています。
以下の2つがイベントプロシージャのコードです。
そのままを、コピペしました。
帳票で以下のコードでは正常にドロップダウンするのです。
Private Sub cbo仕入先ID_GotFocus()
Me!cbo仕入先ID.Dropdown
End Sub
入力後、サブフォームで以下のコードの時は、一瞬だけドロップダウンして、
すぐ、消えます。しかし、2行目からは正常にドロップダウンするのです。
Private Sub cbo商品ID_GotFocus()
Me.cbo商品ID.Dropdown
End Sub
[cbo商品ID]の値集合ソースは
SELECT T商品マスタ.商品ID, T商品マスタ.商品名, T商品マスタ.仕入先ID
FROM T商品マスタ
WHERE (((T商品マスタ.仕入先ID)=[parent]![cbo仕入先ID]))
ORDER BY T商品マスタ.商品名;
です。
以下は、サブフォームを使用せず、表形式のフォームなのですが、
先頭行でのみ、一瞬だけドロップダウンして、すぐ消えます。
これも同様に2行目からは正常にドロップダウンします。
Private Sub cbo食材ID_GotFocus()
Me.cbo食材ID.Dropdown
End Sub
[cbo食材ID]の値集合ソースは
SELECT T食材.食材名, T食材分類.食材分類名, Format([㌍],"@@@") AS カロリー, T食材.食材ID, [×Q食材1].食材名のカウント
FROM (×Q食材1 RIGHT JOIN T食材 ON [×Q食材1].食材ID = T食材.食材ID) INNER JOIN T食材分類 ON T食材.食材分類ID = T食材分類.食材分類ID
ORDER BY [×Q食材1].食材名のカウント DESC , T食材.食材名;
です。
今まで、コピーしたり、新規にも何度となく試したのですが
だめでした。私ではお手上げです。
どちらも2行目以降は正常にドロップダウンするのです。
他には、特に変わった設定はしてないと思います。
どちらもフォーカス取得後以外にイベントはありません。
hatenaさんが未経験なことか、私に起こるとはなんとも不思議です。
その仕様は私もよく使いますが、そのような現象は経験ないですね。
新規にフォームを作成して、同様の設定をしても現象が再現しますか。
現状のコンボボックスの設定、フォーカス取得時のコードを提示してもらえませんか。