Microsoft Access 掲示板

views
4 フォロー
6,283 件中 4,401 から 4,440 までを表示しています。
8
ポンタ 2020/11/09 (月) 16:38:04 0029a@1c915

教えていただいたVBAで全て書き直したところ下記のエラーが出ます。

INSERT INTO ステートメントに、認識できないフィールド「11」があります。名前が正しいことを確認して、再度実行してください。

ちなみに11というのは maxIDと同じ値になっています。

7
ポンタ 2020/11/09 (月) 16:06:34 0029a@1c915 >> 6

ありがとうございます。今回クエリで作ったもののSQLで、自動でカッコがついてしまっていたのですが、SQL画面で外そうとすると
「INSERT INTOステートメントの構文エラーです」と表示され、保存できませんでした。

6

[DMax("主キーフィールド", "メイン")]
の部分は、[]で囲まずに、
DMax("主キーフィールド", "メイン")
に修正してください。

[]で囲むとフィールド名して認識されます。

13
hhmmj553 2020/11/09 (月) 13:46:41 19f3a@6b5ef

すみません。
開いた時に最初にフォーカスするのがコンボボックスで
その時、症状がでるのは、分かっていることでした。

なにぶん、長期間にわたり、解決しなかった事が
一瞬で解決してしまった事に、戸惑っています。

12
hhmmj553 2020/11/09 (月) 13:38:39 19f3a@6b5ef

本筋から外れるかもしれませんが、

もう一つの帳票は、コンボボックスにフォーカスする前に
日付を入力するようになっているため、そこでは正常にドロップダウンして、
サブフォームを入力する場合は、最初にコンボボックスにフォーカスします。

一つの入力フォームしか、見せていないのに
なぜ、開いた時最初にフォーカスするのがコンボボックスの時に症状がでると
判断できたのか、知りたいです。

5
ポンタ 2020/11/09 (月) 12:57:50 0029a@1c915

コードに一部ミスがありましたので記載しなおします。
また、エラーもDMamxと記載してしまいましたが、DMaxの書き間違いです。スミマセン

INSERT INTO  サブ( フィールド1,フィールド2,… [DMax("主キーフィールド", "メイン")], フィールド11 )
SELECT .サブ[フィールド1], サブ.[フィールド2],…, サブ.リンクフィールド, フィールド11
FROM サブ
WHERE (((サブ.リンクフィールド)=[forms]![メイン]![主キーフィールド]));
4
ポンタ 2020/11/09 (月) 12:52:25 0029a@1c915

VBAを教えていただいたのですが、accessのクエリで作成してみようと思ったところつまづいてしまいました。
メインはうまく追加できるのですが、サブの追加クエリがエラーで止まってしまいます。
(エラーを飛ばしてメインだけ作成されたりもする)

INSERT INTO  サブ( フィールド1,フィールド2,… [DMax主キーフィールド", "メイン")], フィールド11 )
SELECT .サブ[フィールド1], サブ.[フィールド2],…, サブ.リンクフィールド, フィールド11
FROM サブ
WHERE (((サブ.リンクフィールド)=[forms]![メイン]![主キーフィールド]));

エラー内容
⇒INSERT INTO ステートメントに、認識できないフィールド'DMamx(・・・・)'があります。名前が正しいことを確認して、再度実行してください。

力不足で申し訳ありません。ご助言宜しくお願いいたします。

11
hhmmj553 2020/11/09 (月) 11:50:02 19f3a@6b5ef

開いた時最初にフォーカスするのがコンボボックスの時に症状がでるとの指摘が
的を射ていました。

私は、まったく気づきませんでした。

なぜかは、分かりませんが、問題は解決しました。

ありがとうございました。

6
亞紀姐 2020/11/09 (月) 11:26:19 3a4ba@2da9b >> 4

hatenaさま>
なるほどです…
もし今後、変更が必要になった際には頑張ってフィールドごと変えてみます(関連する年齢計算とか在職年数とかの変更を考えるとちょっと気が遠くなりましたが(^-^;;

ありがとうございました。

5
亞紀姐 2020/11/09 (月) 11:23:02 3a4ba@2da9b >> 3

hirotonさん>
ありがとうございます!
希望通りの挙動になりました。
助かりました。

また何かありましたらどうぞよろしくお願いします。
ありがとうございました。

10
hhmmj553 2020/11/09 (月) 09:47:55 19f3a@6b5ef

すみません。
今、新しい仕入データを入力すると
やはり、ドロップダウンしませんでした。

9
hhmmj553 2020/11/09 (月) 09:34:23 19f3a@6b5ef

ひとつ変化がありました。

なんと、Enter に変更した仕入伝票のサブフォームの明細入力が
一行目からドロップダウンしました。

指摘された時は、ドロップダウンしなかったのですが、
今、新しいデータを入力すると、ドロップダウンしました。

送信した 食事明細入力.accdb はドロップダウンしないことは
一度確認しましたが、なんだか訳が分かりません。

8

送信ファイル、拝見しました。
開いたときに最初にフォーカスがくるのがコンボボックスのとき、症状がでるようです。

txt時刻の「タブストップ」を「はい」にすると開いたときこれに最初にフォーカスがきますので、その後、コンボボックスにフォーカスを移動するようにすればいいでしょう。

ただし、開く時イベントでフォーカス移動しても同じ症状になるので、タイマーイベントを使って少し遅らせてフォーカス移動させるようにすれば、コンボボックスのリストを開いた状態にできます。

txt時刻
 タブストップ いいえ

フォーム
 タイマー時 [イベント プロシージャ] 
 タイマー間隔 0

Private Sub Form_Timer()
    Me.TimerInterval = 0 'タイマー時イベント停止
    Me.cbo食材ID.SetFocus
End Sub

「開く時」のイベントプロシージャのコードは「読み込み時」(Form_Load)のイベントプロシージャに移動して、下記のように修正してください。

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

修正済みファイルは下記からダウンロードできます。

修正ファイル

3
ポンタ 2020/11/09 (月) 08:01:13 f1ed8@377eb

ありがとうございます!クエリの中身までVBAで記載する勉強にもなりました。

7
hhmmj553 2020/11/09 (月) 06:31:49 19f3a@6b5ef

仕入データのあるものは、控えました。
もう一つの、日々の食事データを入力しているものを
送信しました。よろしくお願いします。

6
名前なし 2020/11/09 (月) 06:12:37 30f77@6b5ef

わかりました。
ただ、仕入先等の情報がありますので
今日中には、データを作って送信します。

5

こちらで現象を再現できないので、実際のファイルを見ないと原因の特定は難しいですね。

症状の出るAccessファイルを送信してもらえたら原因が特定できるかもしれません。

よろしければ右カラムの下にあるファイル送信フォームから送信もらえますか。

4
hhmmj553 2020/11/09 (月) 05:17:34 19f3a@6b5ef

2つとも
フォーカス取得時イベント(Enter)
に変更してみましたが、同じでした。
そして、2行目からは正常にドロップダウンします。

3

フォーカス取得後イベント(GotFocus)をフォーカス取得時イベント(Enter)に変更したらどうなりますか。
私の場合は、Enter を使っています。

2
hhmmj553 2020/11/08 (日) 21:23:26 19f3a@6b5ef

以下の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さんが未経験なことか、私に起こるとはなんとも不思議です。

1

その仕様は私もよく使いますが、そのような現象は経験ないですね。
新規にフォームを作成して、同様の設定をしても現象が再現しますか。

現状のコンボボックスの設定、フォーカス取得時のコードを提示してもらえませんか。

2
hatena 2020/11/07 (土) 10:45:35 修正

追加クエリでカレントレコードのメイン、サブ共にオートナンバーのID部分以外を追加する。
といった感じで可能でしょうか。

それで可能ですよ。

まずは、メインの方を追加してから、サブを追加という順番になります。
メインを追加した後で、オートナンバーのIDの最大値(=追加したレコードのID)を取得して、
サブの外部キーの値にします。

下記のような感じのコードになります。

    Dim sSQL As String
    
    sSQL = "INSERT INTO メイン (フィールド1, フィールド2, ・・ ) " & _
           "SELECT フィールド1, フィールド2, ・・  FROM メイン " & _
           "WHERE 主キーフィールド=" & Me.主キーフィールド
    CurrentDb.Execute sSQL, dbFailOnError
    
    
    Dim maxID As Long
    maxID = DMax("主キーフィールド", "メイン")
    
    sSQL = "INSERT INTO サブ (" & maxID & ", フィールド1, フィールド2, ・・ ) " & _
           "SELECT リンクフィールド, フィールド1, フィールド2, ・・  FROM サブ " & _
           "WHERE リンクフィールド=" & Me.主キーフィールド
    CurrentDb.Execute sSQL, dbFailOnError
4

ちなみになのですが、年月のみの表示(卒業年月など)のデータで
オプショングループを選択しない状態でも入力することもあるのですが、
入力されたデータの書式(西暦か和暦)通りの書式で
yyyy年m月かge年m月と表示することはできるのでしょうか?

その場限りでなく、レコード移動したりフォームを閉じてから開いても、入力時の書式を保存しておきたいということなら、
日付/時刻型のフィールドでは無理ですね。テキスト型にするか、別に西暦か和暦かを保存しておくフィールドが必要になります。

3
hiroton 2020/11/07 (土) 08:26:45 e2316@f966d

単票フォームですよね?

TextBox.Text property (Access)

入力中の文字列はTextプロパティで参照できるので1文字目が数字かそうでないかで書式を変更すればいいかな?

Private Sub 日付_AfterUpdate()
    With Me.日付
    If IsNumeric(Left(.Text, 1)) Then
        .Format = "yyyy年m月"
    Else
        .Format = "ge年m月"
    End If
    End With
End Sub
2
亞紀姐 2020/11/06 (金) 20:29:46 3a4ba@81907 >> 1

hirotonさま>
ありがとうございます。
自分で書いておいて、IFがあるのをすっかり見落としていました…
確かに今私が行いたい挙動にはいらない部分でした。

>&&99\年99\月99\日;0;_
ありがとうございます!

>実際にどんな入力をするんですか?
提出された履歴書を元に入力しますが、履歴書に書かれているデータが和暦だったり西暦だったりするので、どちらでも入力できるようにしたいと希望があったのです。

おかげさまでどちらでも入力できるようになりました。
ありがとうございます。

ちなみになのですが、年月のみの表示(卒業年月など)のデータで
オプショングループを選択しない状態でも入力することもあるのですが、
入力されたデータの書式(西暦か和暦)通りの書式で
yyyy年m月かge年m月と表示することはできるのでしょうか?
(現在は入力は上記のように自由に選べますが、入力後フォーカスが移動したら、入力がどのような書式だったとしても、表示は指定の書式の表示になります)

もしご教示いただけたら助かります。
よろしくお願いします。

1
ポンタ 2020/11/06 (金) 16:35:16 0029a@1c915

追加クエリで対応しようとトライしていましたが、不可能な気がしてきました。
メインとサブがある部分で引っかかってしまいます。
どのような方法があるかご教示いただけると助かります。

1
hiroton 2020/11/06 (金) 16:12:28 修正 f9f49@f966d

例えば西暦入力に切り替えようとします

        If Not IsNull(Me.雇保加入年月日) Then '//[雇保加入年月日]にデータがあれば下記を実行
            With Me.雇保加入年月日
                .InputMask = "9999\年99\月99\日;0;"
                .Format = "yyyy年m月d日"
            End With
        End If

新規入力(データがない状態)だと実行されないコードですがそこは大丈夫ですか?

生年月日だけは

        Case 1
            With Me.生年月日
                .InputMask = "9999\年99\月99\日;0;_"
                .Format = "yyyy年m月d日"
            End With
            If Not IsNull(Me.入社月日) Then

で、条件判定がないので常に切り替わります。それぞれのIfが何をしたいのか確認してみてください

1.和暦でも西暦でもどちらでも入力可能な定型入力型というのはあるのでしょうか?

TextBox.InputMask property (Access)

&&99\年99\月99\日;0;_

で、どちらでも入力できるはずですが実際にどんな入力をするんですか?

1
ポンタ 2020/11/06 (金) 16:01:42 0029a@1c915

プロパティの「印刷時の縮小」を「はい」にすると、空の場合詰めて印刷されます。
どうでしょうか。

10
トマト 2020/11/06 (金) 11:27:22 0029a@1c915 >> 8

なるほど!よくわかりました。便利なものができそうです。ありがとうございました!!

9
hiroton 2020/11/06 (金) 11:19:19 f9f49@f966d

同じ内容を入力したくないなら更新後処理規定値を変更するようにすればいいです

Private Sub 種類_AfterUpdate()
    Me!種類.DefaultValue = Me!種類
End Sub

さらに、登録済みデータ(Tデータとする)から種類を選択したいなら登録済みデータからリストを作ってしまえばいいです。フォームを開いた後に追加されたデータはリストに表示されないのでフォーカス取得時にリストを更新するようにします

値集合ソース:SELECT 種類 FROM Tデータ GROUP BY 種類 ORDER BY 種類;
値集合タイプ:テーブル/クエリ
入力チェック:いいえ

Private Sub 種類_AfterUpdate()
    Me!種類.DefaultValue = Me!種類
End Sub

Private Sub 種類_Enter()
    Me!種類.Requery
End Sub

登録済みデータのうち一部を表示したいとかだとやっぱり値リストやそれ用に別なテーブルを作る必要があります

8

上記の設定だけで編集は可能になりますが、リスト項目編集フォームの方で新規レコードへ移動、既定値をコンボボックスに入力した値に設定などをするようにすると使いやすいものにできますね。

7

③までで、あってますよ。
あと、「入力チェック」を「はい」、「値リストの編集の許可」を「はい」に設定しておけばOKです。
下記も参考にしてください。

■T'sWare Access Tips #471 ~コンボボックスから値集合ソース編集画面を表示する方法~

6
トマト 2020/11/06 (金) 10:39:36 0029a@1c915

ありがとうございます。
早速作ってみたのですが、理解しきれていないようです。
①新しくリスト項目のテーブルを作成
②①を基にフォームを作成
③利用したいコンボボックスを選択してプロパティ「リスト項目編集フォーム」から該当のフォームを選択。
④?
④からがわかりませんでした…(③までも間違っているでしょうか)

自宅にあったプロパティ辞典にも乗っておらず…
辞典をパラパラしながらふと思ったのですが、そもそも今回の質問についてですが
何のために行っているかというと、グループ名設定のためになります。
レポートにするときのグループ分けのため、レコード毎に同じグループを入力するのが面倒なので、コンボボックスを設置していました。
(サブに1個ずつと、メインからはチェックしたものに一括で入れるためのコンボボックス)

グループ名設定となると、他に良い方法があったりしますでしょうか…?

以上お手数をおかけいたします。宜しくお願いいたします。

7
hiroton 2020/11/06 (金) 10:35:54 f9f49@f966d

参考に挙げたものは基本的なところなのであとはExcel VBAの知識が必要になります

大まかな書式(罫線や塗りも含め)はテンプレートとしてExcelファイルを作っておき、VBAでシートのコピーや行、セルのコピーで書式を整形して、そうしたらデータを流し込む
こんな流れになると思います。書式の設定からVBAでやってもいいんですが、いずれにせよその部分はEXCEL VBAの知識で組み立てることになります。記述自体はACCESS VBAの上でもできますよ(諸注意あり)という具合ですね

というわけで、「書式の整形がうまくいきません」ならExcel(Excel VBA)の問題になるので情報の調べ方に気を使ってみてください

2
  • 抽出条件引数の位置がおかしい
  • "AND"の前に半角空白が必要
  • ""が余分

車庫IDが数値型の場合なら、

DoCmd.OpenReport "L書類", acViewPreview, ,"車庫ID=" & Me.ID & " AND 印刷=True"

車庫IDがテキスト型の場合なら、

DoCmd.OpenReport "L書類", acViewPreview, ,"車庫ID='" & Me.ID & "' AND 印刷=True"
1
tokinaito 2020/11/06 (金) 09:57:50 10f3b@f6db2

DoCmd.OpenReport "L書類", acViewPreview, "車庫ID=" & Me.ID & "AND 印刷=True"""
すみません自己解決しました。印刷のところをコントロールソースにしたらうまくいきました。

5

テーブルなら、「リスト項目編集フォーム」に値集合ソースのテーブルをレコードソースとするフォームを設定すると、「値リストの編集」をクリックするそのフォームが表示されます。これだとVBAなしでできます。

ListItemsEditForm プロパティ (Access) | Microsoft Docs

hirotonさん紹介のNotInListイベントを使うとVBAが必要ですか、もっと使いやすいUIを構築できます。

ComboBox.NotInList event (Access)

6
ポンタ 2020/11/06 (金) 09:19:29 0029a@1c915 >> 5

色々と参照ページを教えていただき、ありがとうございます。1つずつ紐解いていけば必ず作成できるんですよね…
聞きなれないワード(バインディング)にビビっていますが、なんとか地道に作成していきたいと思います。ありがとうございました!

4
ポンタ 2020/11/05 (木) 21:57:12 0029a@1c915 >> 3

レポートの作成が落ち着いてきたため、Excelへの出力を考えています。
かなり難しそうですね…
無理かもしれませんが・・・イメージを教えてください。

①アクセスから該当のデータをクエリからエクセルにエクスポート(サブとメインあわせて2つ)
②エクセルから2つのデータを取り込み、任意の配置を行う。
④配置されたデータから判断して罫線を引く。色を塗る。

このようなVBAの流れになりますでしょうか。
アクセスでエクスポートして、続きはエクセルのVBAでしょうか。

以上よろしくお願いいたします。