![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_04.png?5a7ff87)
VBAいじり始めて数日の超初心者です。
お知恵をおかしください。
ACCESS2000です
あいまい検索をしたデータを選択して入力までできるようにしたいと考えていますが、検索の時点でうまくいきません。
関係のある項目
テーブル1 「入力テーブル」
2 「M_商品」 ……「JANコード」
……「商品名」
フォーム1 「入力フォーム」→コマンドボタンで商品検索のフォームが開く
2 「商品検索」
3 「検索結果」……「JANコード」
……「商品名」
入力テーブルとM_商品にはリレーションシップがかけてあります。
「M_商品」の中の「商品名」にフィルタをかけ、入力フォーム内に入力したいです。
商品検索のフォームには
非連結のテキスト「txt商品名」と「一致選択」という名のオプショングループ(3つの選択があり、部分一致と前方一致と後方一致です)、検索用のコマンドボタン(cmd検索)があます。
これで検索を実行してみると、コンパイルエラー;SubまたはFunctionが定義されていません、とでて、VBA側のPrivate Sub cmd検索_Click() が黄色くなって、「TakeOut」がグレーになった状態なります。
No.2ベストアンサー
- 回答日時:
まず最初にVBEでデバックのコンパイルをするとエラー箇所が反転表示されますからそこをチェック。
Sub cmd検索_Click()が黄色く反転するのか。TakeOutがグレーで使用不可状態なのか。
補足を見るところ
VBでTakeOutがFunctionにもPrivate Sub内にも定義されていないということだと思いますが。
strSQLWhere = TakeOut(txt商品名, ",", "商品名", 1)
はフィルタの抽出条件(Where条件)ですよね。
DoCmd.OpenForm strFormName, acFormDS, "", strSQLWhere
でOpenFormメソッドのWhere条件欄にElseIfで分岐させたWhere句を配置してフォームを開く再にTakeOut(txt商品名, ",", "商品名", 1)が条件として合っているのか確認してください。(strFormNameで指定している検索結果フォームのOpenFormメソッドの引数にTakeOut(txt商品名, ",", "商品名", 1)をコピー等で配置してフォームが開けるのか?)
この回答への補足
有難うございます。
検索結果を表示するための式が全く作られていませんでした。
Function TakeOut(strName As String, str区切り As String, _
strFieldName As String, g As Integer)
'複数語句を可能にし、いずれかに一致する場合を検索する。
'部分、前方、後方一致をの選択機能も持たせる。
Dim VarSplit As Variant
Dim VarTemp As Variant
Dim a As Integer
Dim b As Integer
Dim c As Integer
Dim i As Integer
VarSplit = Split(strName, str区切り) ' --- A
'str区切りの個数を求める。
a = Len(strName)
For b = 1 To a
If Mid(strName, b, 1) = str区切り Then ' --- B
c = c + 1
End If
Next
VarTemp = Null '初期化
For i = 0 To c
If g = 1 Then
VarTemp = VarTemp & IIf(Not IsNull(VarTemp), " OR " & strFieldName & _
" LIKE ", strFieldName & " LIKE ") & "'*" & VarSplit(i) & "*'"
ElseIf g = 2 Then
VarTemp = VarTemp & IIf(Not IsNull(VarTemp), " OR " & strFieldName & _
" LIKE ", strFieldName & " LIKE ") & "'" & VarSplit(i) & "*'"
ElseIf g = 3 Then
VarTemp = VarTemp & IIf(Not IsNull(VarTemp), " OR " & strFieldName & _
" LIKE ", strFieldName & " LIKE ") & "'*" & VarSplit(i) & "'"
End If
Next
TakeOut = VarTemp
End Function
を貼り付けたら出来ました。
これで出てきた検索結果のひとつを選択して、入力フォームに反映させることって出来ますか?
No.4
- 回答日時:
開いているフォームにそのレコードを読み込むには
入力フォームがどのような構成かわかりませんが・・。
検索ボタンの記述内にフォーム名を宣言し定義して入力フォームにキーになる値を検索フォームの指定(取得)した値を代入させ入力フォームをRequeryさせればいけると思います。
一つの質問内ではなく別の質問でしてください。
No.3
- 回答日時:
>出てきた検索結果のひとつを選択して、入力フォームに反映させることって出来ますか
検索結果を表示するフォームを帳票フォーム型にして詳細部にボタンを一つ作りそのボタンをクリックすると入力フォームを開くようにします。入力フォームは特定のレコードを表示するように設定しレコードのキーとなるフィールド同士で連結すれば出来ます。
ボタン作成のウィザードで検索結果と入力フォームのレコードソースが該当すれば特定のレコードを表示する箇所がウィザードで表示されますので順次進めれば完成です。
この回答への補足
何度も有難うございます。
なるほど……。
入力時に、すでに入力フォームが開いてる状態で検索をかけているのですが、すでに開いたフォームに入力することは可能でしょうか?
No.1
- 回答日時:
cmd検索のクリックイベントにどのように記述したか不明ですが
TakeOutは関数?(記述不明のため)
TakeOutはFunctionにでも定義してあるのですか?
TakeOutをユーザー関数として定義していないので使えない。という事でエラーが出ているのではないですか?
商品名だけからあいまい検索をするなら部分一致とか前方一致とかではなく単純にLikeを使って部分一致だけにしても同じではないでしょうか。
VBでcmd検索_Click()のイベントがエラー出なくなるまで編集してコンパイルしてみてはいかがでしょう。
記述不明のためこのくらいしか回答できません。
この回答への補足
文字数制限で全部明記できませんでしたので、細くします。わかりにくくて申し訳ありません。
以下の構文を組んでみました(サンプルを元に直しただけなので、細かい意味はよくわかっていません。すみません)。
Private Sub cmd検索_Click()
On Error GoTo エラー
Dim strTableName As String
Dim strFormName As String
Dim strTxtName As String
Dim strSQLWhere As String
strTableName = "M_商品" 'テーブル名を指定します。
strFormName = "検索結果" '検索結果フォーム名を指定します。
If Not IsNull(Me.txt商品名) Then
If Me.一致選択 = 1 Then
strSQLWhere = TakeOut(txt商品名, ",", "商品名", 1)
ElseIf Me.一致選択 = 2 Then
strSQLWhere = TakeOut(txt商品名, ",", "商品名", 2)
ElseIf Me.一致選択 = 3 Then
strSQLWhere = TakeOut(txt商品名, ",", "商品名", 3)
End If
End If
If vbYes = MsgBox("結果を表示しますか?", vbCritical + vbYesNo) Then
DoCmd.OpenForm strFormName, acFormDS, "", strSQLWhere
End If
' Debug.Print strSQLWhere
Exit Sub
エラー:
MsgBox Err.Number & " : " & Err.Description
Exit Sub
End Sub
お分かりになりますでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
- 食べ物・食材 カルディにお詳しい方への質問 2 2023/01/10 21:05
- その他(プログラミング・Web制作) パイソンでのプログラミングについて 3 2022/08/11 20:31
- Access(アクセス) Access 複数条件検索の設定が上手く行きません 1 2022/07/22 20:37
- その他(Microsoft Office) Excelで総数量を変動させたい 2 2022/11/04 23:49
- その他(Microsoft Office) EXCEL VLOOKUPに関する質問 5 2023/02/08 11:38
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Excel(エクセル) エクセルでのVBA 2 2022/08/03 06:48
- ヤフオク! ヤフオク タイトル 隠し技? 裏技? 1 2023/04/25 06:09
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESSでVBAから選択クエリの抽...
-
クエリーの結果をフォームに表...
-
AccessでIDを入力したら他の項...
-
ACCESSで、EXCELのような、sumi...
-
アクセスのフォームに連番を表...
-
Accessクエリの抽出条件にフォ...
-
ACCESS2003のグループ化のエラ...
-
VarChar型をINT型に変換するには
-
サブフォームを利用したクエリ...
-
クエリ実行結果0件の場合のフ...
-
AccessのフォームをExcelに出力
-
アクセス フォーム上でのレコ...
-
AccessでログインIDを抽出条件...
-
ACCESS フォームで抽出したデー...
-
ACCESSのレポートにフォームの...
-
ACCESSで、フォームで抽出した...
-
Apacheを利用した検索
-
ACCESS 選択クエリーの抽出条件...
-
Accessのパラメータクエリ作成...
-
エクセルで、抽出したデータだ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSでVBAから選択クエリの抽...
-
AccessでIDを入力したら他の項...
-
クエリ実行結果0件の場合のフ...
-
ACCESSで、EXCELのような、sumi...
-
Accessクエリの抽出条件にフォ...
-
ACCESS2007 マクロ クエリのパ...
-
ACCESS2003のグループ化のエラ...
-
アクセスのフォームに連番を表...
-
ACCESS フォームで抽出したデー...
-
クエリーの結果をフォームに表...
-
VarChar型をINT型に変換するには
-
サブフォームを利用したクエリ...
-
ACCESS クエリのデザインビュ...
-
access クエリでIIF文で抽出条...
-
ACCESSで、フォームで抽出した...
-
アクセス2007 フォームでフィ...
-
Accessのパラメータクエリ作成...
-
Accessでフィルタの実行アクシ...
-
Access2016埋め込みマクロでの...
-
ACCESSのフォームでボタンを押...
おすすめ情報