質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Office 365

Office 365は、マイクロソフトが販売している企業向けクラウドベースのグループウエアサービス。電子メールや予定表、Webサイト構築、オンラインストレージ、ビデオ会議などビジネスで必要な機能を備えています。クラウドサービスのため、自社での専用サーバーの設置の必要がないことが特徴です。

Q&A

解決済

1回答

473閲覧

Access フィールドが見つからないのエラー

uemiy

総合スコア2

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Office 365

Office 365は、マイクロソフトが販売している企業向けクラウドベースのグループウエアサービス。電子メールや予定表、Webサイト構築、オンラインストレージ、ビデオ会議などビジネスで必要な機能を備えています。クラウドサービスのため、自社での専用サーバーの設置の必要がないことが特徴です。

0グッド

0クリップ

投稿2024/02/21 02:28

実現したいこと

[実行したいこと]
①フォーム上で氏名検索
②該当する氏名のレコードをサブフォームにフィルターを実行して表示

[条件]
①フォーム名「面談シート」
②フォームに設置してあるサブフォーム名「面談履歴」
③氏名入力するテキストボックス「氏名入力」
④クリックする検索ボタンのラベル「検索ボタン」
⑤Meコードの一切使用禁止

[備考]
①フォーム「面談シート」のソースはテーブル「面談履歴」です

発生している問題・分からないこと

検索ボタンをクリックし、VBAを実行させると、
「指定した式で参照されている'面談履歴'フィールドが見つかりません」と表示されます。

エラーメッセージ

error

1実行時エラー'2465': 2指定した式で参照されている'面談履歴'フィールドが見つかりません。

該当のソースコード

VBA

1Private Sub 検索ボタン_Click() 2 ' データベースのオブジェクトを取得 3 Dim db As DAO.Database 4 Set db = CurrentDb 5 6 ' SQLクエリを作成 7 Dim strSQL As String 8 strSQL = "SELECT * FROM 面談履歴 WHERE 氏名 = '" & Forms("面談シート").Controls("氏名入力") & "';" 9 10 ' サブフォームのフィルターを設定して表示 11 With Forms("面談シート").Controls("面談履歴").Form 12 .RecordSource = strSQL 13 .Requery 14 End With 15 16 ' データベースオブジェクトを解放 17 Set db = Nothing 18End Sub

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

同様の質問が見つかりません。
GPTにも質問してみましたが、どのコード内容を反映させても同じような返答・エラーが起きます。

補足

詳細を記載したつもりですが、不足している部分がございましたら、リクエストをください

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

②フォームに設置してあるサブフォーム名「面談履歴」

With Forms("面談シート").Controls("面談履歴").Form
の部分ですが、Controlsとあるようにここで指定する名前は、サブフォーム名ではなく、サブフォームコントロール名でないとそのエラーになりますが、その点は大丈夫でしょうか。

サブフォームコントロール名はサブフォームを埋め込んでいるコントロールの名前です。確認方法は下記を参考に。

サブフォームとサブフォームコントロールの違いとは? - hatena chips


蛇足ですが、サブフォームの RecordSource にSQLを設定するだけなら、 「データベースのオブジェクトを取得」する必要はありません。

また、フィルターをかけるなら、Filterプロパティを利用するのでもいいでしょう。

vba

1Private Sub 検索ボタン_Click() 2 '抽出条件式を設定 3 Dim strFilter As String 4 strFilter = "氏名 = '" & Forms("面談シート").Controls("氏名入力") & "';" 5 6 ' サブフォームのフィルターを設定して表示 7 With Forms("面談シート").Controls("サブフォームコイトロール名").Form 8 .Filter = strFilter 9 .FilterOn = True 10 End With 11 12End Sub

投稿2024/02/21 03:25

hatena19

総合スコア33808

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uemiy

2024/02/28 02:24

返信が遅くなり申し訳ありません ご回答ありがとうございます。 SQLの件、助かりました。 サブフォームの件も早速試してみました。 hatena19さんの通り、サブフォームコントロール名を指定していませんでした。 最初のエラーはなくなりましたが、 次は 「実行時エラー'3075': クエリ式'氏名=";'の構文エラー」 が表示されました。 .Filter = strFilterの部分に黄色いマーカーがひかれました。 もしよろしければ、構文エラーについてもご教示いただけますと幸いです。 よろしくお願いいたします
hatena19

2024/02/28 05:29

修正後のコードをコピーして質問に追記してください。 私の回答のコードにしたのならそのようなエラーにはならないはずですので。
uemiy

2024/02/28 08:05 編集

Private Sub 検索ボタン_Click() '抽出条件式を設定 Dim strFilter As String strFilter = "氏名 = '" & Forms("面談シート").Controls("氏名入力") & ";" ' サブフォームのフィルターを設定して表示 With Forms("面談シート").Controls("面談履歴のサブフォーム").Form .Filter = strFilter .FilterOn = True End With End Sub
hatena19

2024/02/29 00:53

strFilter = "氏名 = '" & Forms("面談シート").Controls("氏名入力") & ";" これを下記に修正してください。 strFilter = "氏名 = '" & Forms("面談シート").Controls("氏名入力") & "';" 最後の : の前に ' が必要です。
uemiy

2024/02/29 05:13

Private Sub 検索ボタン_Click() '抽出条件式を設定 Dim strFilter As String strFilter = "氏名 = '" & Forms("面談シート").Controls("氏名入力") & "';" ' サブフォームのフィルターを設定して表示 With Forms("面談シート").Controls("面談履歴のサブフォーム").Form .Filter = strFilter .FilterOn = True End With End Sub 修正しました。が、またもや表示されました。 エラーは全く同じです。 何度もすみません。 よろしくお願いいたします。
hatena19

2024/02/29 06:45

下記ではどうでしょう。 strFilter = "氏名 = '" & Forms("面談シート").Controls("氏名入力") & "'" 最後の ; を削除
uemiy

2024/02/29 07:40

ご回答ありがとうございます。 「実行時エラー'3464':  抽出条件でデータ型が一致しません。」 修正しましたが、別のエラーが表示されました。 デバッグでは.FileterOn = Trueの部分に黄色のマーカーがひかれています。 Private Sub 検索ボタン_Click() '抽出条件式を設定 Dim strFilter As String strFilter = "氏名 = '" & Forms("面談シート").Controls("氏名入力") & "'" ' サブフォームのフィルターを設定して表示 With Forms("面談シート").Controls("面談履歴のサブフォーム").Form .Filter = strFilter .FilterOn = True End With End Sub
hatena19

2024/02/29 09:00

[面談履歴]テーブルの[氏名]フィールドのデータ型は何になってますか。
uemiy

2024/03/01 00:59

数値型です。 別テーブルに社員マスタを作成しており、ルックアップウィザードで社員マスタを参照しています。
hatena19

2024/03/01 02:01

氏名入力のテキストボックスには氏名を入力していると思いますので、テキストと数値ではデータ型が異なるのでエラーになりますね。 氏名フィールドは社員マスタの主キーフィールドとリンクしているフィールドだということですね。 対処法はいろいろありますが、社員マスタの主キーフィールド名が 社員ID として、 簡単なのはコードを下記に修正する strFilter = "氏名 = " & DLookup("社員ID","社員マスタ", "社員ID=" &Forms("面談シート").Controls("氏名入力") お勧めは、氏名入力テキストボックスをコンボボックスにして、設定を氏名フィールドのルックアップの設定と同じにする方法です。 その場合は、コードは下記になります。 strFilter = "氏名 = " & Forms("面談シート").Controls("氏名入力") この方法だとユーザーは氏名を入力することもできますし、リストから選択することもできます。 自動拡張を「はい」に設定しておけば、途中まで入力すれば一致するデータまで拡張してくれますので入力か楽になります。
uemiy

2024/03/01 06:51

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問