• ベストアンサー

コンパイルエラーが出ます。助けて下さい。

初歩的な質問ですみません。 参考書を参考に検索するVBAを書いたのですが、 12行目のFindfirstの所で、「コンパイルエラー:メソッドまたはデータメンバが見つかりません」 というメッセージが出てしまいます。 VBAは、下記の通りです。 宜しくお願いします。 ******************************************************************************************************************************************** Private Sub 検索_Click()   Dim kaizen_rs As Recordset   Dim field_name As String   Dim find_txt As String   Dim criteria As String   field_name = "提案内容"   find_txt = InputBox("検索したい文字を入力してください。")   criteria = field_name & "='" & find_txt & "'"   Set kaizen_rs = CurrentDb.OpenRecordset("管理/提案テーブル", dbOpenDynaset)   kaizen_rs.FindFirst criteria     If kaizen_rs.NoMatch Then       MsgBox find_txt & "は見つかりません"     Else       Do Until kaizen_rs.NoMatch         MsgBox find_txt & "を" & kaizen_rs.AbsolutePosition + 1 & "レコード目で見つけました。"         kaizen_rs.FindNext criteria       Loop     End If End Sub ******************************************************************************************************************************************************

質問者が選んだベストアンサー

  • ベストアンサー
  • palmmy
  • ベストアンサー率38% (841/2170)
回答No.7

criteria = field_name & " like '*" & find_txt & "*'" likeの前にブランクが必要です。

_shino_
質問者

お礼

できました(>_<) ありがとうございました。

その他の回答 (6)

  • palmmy
  • ベストアンサー率38% (841/2170)
回答No.6

criteria = field_name & "like '*" & find_txt & "*'" かな

_shino_
質問者

補足

そうですね。 *を検索したい文字の両方に付けないと 部分検索できないですよね(^^ゞ でも、訂正して実行したら、 演算子がありませんという エラーが出てしまいます。 そこで、デバックすると kaizen_rs.FindFirst criteria の部分が黄色くなります。 何が原因なのでしょうか。 教えてください。よろしくお願いします。

noname#20001
noname#20001
回答No.5

違ってたらごめんなさい。初心者です。 criteria = field_name & "like'" & find_txt & "'" ↑LIKEのあとにスペースが要りませんか?

_shino_
質問者

補足

ありがとうございます。 私もす~ごく初心者なので、 分からない部分が多いので、みんなのお力を借りたいと思っています。 スペースが入っていました。 でも、訂正して実行したら、 演算子がありませんという エラーが出てしまいます。 デバックすると kaizen_rs.FindFirst criteria の部分が黄色くなってしまいます。 何が原因なのでしょうか。

  • palmmy
  • ベストアンサー率38% (841/2170)
回答No.4

  criteria = field_name & "='" & find_txt & "'" だと一致したデータですよね? 部分的に一致だと like *xxx* とかにしたいといけなくないですか?

_shino_
質問者

補足

そうですね。 参考書に習って、 criteria = field_name & "like'" & find_txt & "'" にしてみたんですけど、 syntax error(missing operation) in expression. というエラーが起こっちゃいました。 一難去ってまた一難です。トホホ。

  • palmmy
  • ベストアンサー率38% (841/2170)
回答No.3

Visual Basic for Application Microsoft Access ‥ OLE Automation Microsoft DAO ‥ か Visual Basic for Application Microsoft Access ‥ Microsoft DAO ‥ OLE Automation でコンパイルしてみてください。 DAOが上の方に無いとエラーが出ます。

_shino_
質問者

補足

コンパイルエラーが出なくなりました!! 高順位に、教えてもらってないものが入ってました。 ありがとうございます。 しかし。。。テーブルに存在する文字を検索しても、検索に引っかかりません。 もし宜しかったら、一緒に考えてくださいませんか。

  • palmmy
  • ベストアンサー率38% (841/2170)
回答No.2

Microsoft Accessなのは分かりましたよ^^; で、モジュールを開いて、 [ツール][参照設定]を開くとどうなっていますか?

_shino_
質問者

補足

あっ、すみません。。。 Microsoft DAO 3.6 object Library になってます。

  • palmmy
  • ベストアンサー率38% (841/2170)
回答No.1

参照設定はどうなっていますか? Visual Basic for Application Microsoft Access ‥ OLE Automation Microsoft DAO ‥ になってますか?

_shino_
質問者

補足

すみません。書き忘れました。 Microsoft Access です。 宜しくお願いします。

関連するQ&A

  • アクセスでコードを使って日付からレコードの検索ができません。

    Dim rs As DAO.Recordset Set rs = Me.RecordsetClone rs.FindFirst "生年月日 = #1968/05/03#" 上の場合は問題ないのですが、次の様に、捜そうとする日付を変数にするとどうしても rs.NoMatch = true になってしまいます。 どうしてでしょうか。アクセスは2002、OSは2000です。 Dim Abc As Date Abc = "1968/05/03" rs.FindFirst "生年月日 = " & Abc

  • 課題制作で悩んでいます。 コンパイルエラー

    VBの初心者です。 課題制作で悩んでいます。 どうやら"obj"の部分が選択されているのでここが原因なんですが、宣言がされていないみたぃなのですがどうやって組みなおせば良いですか? Private Sub CommandButton3_Click() Dim lngYLine As Long Dim intXLine As Integer Dim objHit As Object Dim strFind As String '検索文字列の取得 strFind = 検索者氏名 Set obj = Worksheets("成績集計").Cells.Find(strFind) If obj Is Nothing Then MsgBox "見つかりませんでした。" Exit Sub Else '見つかった場所を取得 lngYLine = Worksheets("成績集計").Cells.Find("成績集計").Row intXLine = Worksheets("成績集計").Cells.Find("成績集計").Colum '見つかった場所を表示(テキストの場合) 検索結果.txt = 検索結果 & vbCrLf & CStr(lngYLine) + "行目の" & CStr(intXLine) & "列目" End If End Sub

  • SQLSERVERからデータを取得する方法

    SQLSERVERに商品テーブルを作り ACCESSにローカルテーブル(下記の例では入力テーブル)を 作りました。 ACCESS VBAで ACCESSのローカルテーブルを1件ずつ読み SQLSERVERの商品テーブルを検索したいのですが 下記の例 どちらが処理スピードが速いのですか? なお下記以外にも処理スピードが速い方法が あったら教えてください。 ●例1 Dim db As DATABASE Dim rs As Recordset   dim rt as Recordset Set db = CurrentDb Set rt = db.OpenRecordset("入力テーブル", dbOpenDynaset) sql = "SELECT 商品名 FROM 商品テーブル " sql = sql & "where 商品ID = '" & rt![商品ID] & "'" Set rs = db.OpenRecordset(sql) If rs.RecordCount = 0 Then MsgBox "NG" Else MsgBox rs![商品名] End If ●例2 Dim db As DATABASE Dim rs As Recordset   dim rt as Recordset Set db = CurrentDb Set rt = db.OpenRecordset("入力テーブル", dbOpenDynaset) Set rs = db.OpenRecordset("商品テーブル", dbOpenDynaset) rs.FindFirst "商品CD = '" & rt![商品CD] & "'" If rs.NoMatch Then MsgBox "NG" Else MsgBox rs![商品名] End If よろしくお願いします。

  • いつも参考にさせて頂いてます。

    いつも参考にさせて頂いてます。 Access2003で検索フォームを作成しています。 find系メソッドで検索を行い、フォームに表示させるのですが 該当データが複数あった場合の処理について質問させてください。 現在、該当データが複数あった場合、ループの中でfindnextを使用し msgboxにて次の該当データを表示させるかどうかという条件分岐をしています。 ただ、この方法だとmsgboxが画面の真ん中に出てしまうので 表示されたフォームが見ずらく、使い勝手が悪いのです・・・。 そこで自分で作成したmsgboxのようなフォームを作ったのですが どのようにしてそのフォームからの戻り値を受け取るのかと 処理の流れがわかりません。 わかる方いましたら教えてください。 宜しくお願いします。 Private Sub 検索_Click() Dim db As Database Dim rs As Recordset Dim str As String Dim msg As String Set db = CurrentDb Set rs = db.OpenRecordset("取引テーブル", dbOpenDynaset) str = "取引番号='" & Me.検索 & "'" rs.FindFirst str If rs.NoMatch = False Then Me.torihikiNo.Value = rs.Fields("取引番号") Me.torihikiDay.Value = rs.Fields("取引日") Me.kokyakuName.Value = rs.Fields("顧客名") Do Until rs.EOF rs.FindNext str If rs.NoMatch = False Then msg = MsgBox("該当データが複数存在します。次を表示しますか?" _ '←ここを変更したいのです。 , vbYesNo _ , "確認") Select Case msg Case vbYes Me.torihikiNo.Value = rs.Fields("取引番号") Me.torihikiDay.Value = rs.Fields("取引日") Me.kokyakuName.Value = rs.Fields("顧客名") Case vbNo Exit Do End Select Else MsgBox "該当データはこれ以上ありません。" Exit Do End If Loop Else Me.torihikiNo.Value = vbNullString Me.torihikiDay.Value = vbNullString Me.kokyakuName.Value = vbNullString MsgBox "該当するデータはありません。" End If rs.Close Set rs = Nothing db.Close Set db = Nothing End Sub

  • ExcelからAccessデータを検索するマクロ

    Excel、Accessとも初心者です。 下記を参考にさせて頂いております。 http://okwave.jp/qa/q441987.html これを、(1)~(3)に対応させたいのですが どのように書き換えればよろしいのでしょうか? (1)A1→ A列の最後まで (2)対応するレコードフィールド2   → 規定した複数のレコードフィールド     (例えば、フィールド3とフィールド5とフィールド8) (3)Excel, Accessともに2007です。 (4)検索の経過は表示させない  (少しでも早く処理したい。ひとつひとつ検索結果を表示すると遅くなると聞ききました) ・・・・・・・・・・・・・・・・・・・・・・・・・ Sub Macro1() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = OpenDatabase("c:\abc.mdb") Set rs = db.OpenRecordset("tbl_a", dbOpenDynaset) rs.FindFirst "[フィールド1]='" & Range("A1").Value & "'" If rs.NoMatch Then   Range("B1").Value = "" Else   Range("B1").Value = rs![フィールド2] End If rs.Close Set rs = Nothing Set db = Nothing End Sub ・・・・・・・・・・・・・・・・・・・・・・・・・ よろしくご教授お願いします。

  • プログラムが実行されません

    フォームは、メインフォームに業務No.(オートNo.)と日付(可視していない)と非連結で日付入力というフィールドがあり、日付でリンクしたサブフォームがありまあす。 日付入力フィールドにはDate関数でフォームを開いた時に今日の日付が表示されており、日付入力を変更すると他の日付も見られるようにしたいのですが、同じ日付を重複したくありません。 テーブルの業務No. インデックス→いいえ      日付  インデックス→いいえ に設定しておいて、 VBAで Private Sub 日付検索() Dim rs As Recordset Set rs = Me.Recordset.Clone rs.FindFirst "日付 = #" & Me.txt日付入力.Value & "#" If rs.NoMatch Then rs.AddNew rs!日付 = Me.txt日付入力.Value rs.Update Me.Requery rs.FindFirst "日付 = #" & Me.txt日付入力.Value & "#" Me.Bookmark = rs.Bookmark Else Me.Bookmark = rs.Bookmark End If rs.Close: Set rs = Nothing End Sub Private Sub txt日付入力_AfterUpdate() 日付検索 という風に書きました。 Windows98 Access2000で作成したものなのですが、作成をしたパソコンではうまく出来ます。WindowsMeでもうまく出来ます。でも違うパソコンでWindows98なのに、このプログラムは無視されて日付入力の値を変更すると値が重複されてしまいます。 なぜなのでしょうか? よろしくお願いします。

  • コンパイルすると「メソッドまたはデータメンバが見つかりません」

    Access2000です。 名前を「Me!txt名前」に入力して「cmd探す」をクリックすると「メソッドまたはデータメンバが見つかりません」 「rs.FilterOn = True」でデバッグが中止します。 どなたかアドバイスお願いします。 ------------------------------ Private Sub cmd探す_Click() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset   Dim strRet As String Set cn = CurrentProject.Connection rs.Open "Q_修正", cn, adOpenKeyset, adLockOptimistic strRet = "使用者氏名 Like'" & Me!txt名前 & "*'" rs.Filter = strRet rs.FilterOn = True ------------------------------

  • vbaにて、オブジェクトエラー

    ただいまvbaで、ユーザーフォームとテキストボックスを用いて、数字のからまで、でフィルタリングするvbaをつくっています。 オブジェクトエラーがでてしまうのですが、 ちゃんとsetを入れているのになぜ出てしまうのでしょうか? また、その他何かご指摘あればいただきたいです。 何卒宜しくお願い致します。 Sub 集計開始() Dim drng As Range Dim kara As String, made As String Dim cnt As Long ActiveSheet.AutoFilterMode = False Set drng = Range("A1").CurrentRegion kara = Val(usetform1.TextBox1.Text) made = Val(usetform1.TextBox2.Text) If kara <> "" And made = "" Then drng.Worksheets("●●●").AutoFilter Field:=15, Criterial1:=">=" & kara ElseIf kara = "" And made <> "" Then drng.Worksheets("●●●").AutoFilter Field:=15, Criterial1:="<=" & made ElseIf kara <> "" And made <> "" Then drng.Worksheets("kwzweb").AutoFilter Field:=15, Criterial1:=">=" & kara, _ Operator:=xlAnd, Criteria2:="<=" & made Else MsgBox "数字を入力してください" Exit Sub End If End Sub

  • Access2002のコンパイルエラーについて

    Access2002を使っていて、印刷ボタンを押したら、下記のような見たことのない画面になり、 「コンパイルエラー end function が必要です。」というメッセージが出てきました。 どなたか詳しい方、修復の方法を教えて下さい。 Private Function PfDataMake() As Boolean 'On Error GoTo Err_PfDataMake Dim St_Sql As String Dim Ln_Cnt As Long Dim Rs_Cnt As Recordset Dim Rs_Cnt2 As Recordset Dim In_Cnt As Long Dim End_Flg As Boolean Dim Code1 As Long Dim Gokei As Long Dim Gohan As Long Dim Okayu As Long Dim Josyoku As Long Dim Kizami As Long Dim ChoKizami As Long Dim GenEn As Long Dim Kome As String Dim Okazu As String Dim Enbun As String Dim Hiduke As Date Dim Youbi As String 'W_発注食数合計の初期化 St_Sql = "Delete From W_発注食数合計 ;" DoCmd.RunSQL (St_Sql) 'W_発注食数明細の初期化 St_Sql = "Delete From W_発注食数明細 ;" DoCmd.RunSQL (St_Sql) '///// 対象データを抽出 ///// St_Sql = "SELECT * " St_Sql = St_Sql & "FROM W_配食入力 " '/// 20060423追加 出力対象「前日キャンセル」追加 start /// 'St_Sql = St_Sql & "WHERE W_配食入力.キャンセル = 0" 'St_Sql = St_Sql & "WHERE (W_配食入力.キャンセル = 0) or (W_配食入力.キャンセル = 2)" St_Sql = St_Sql & "WHERE (W_配食入力.配達 <> 3) and (W_配食入力.配達 <> 4)" '/// 20060423追加 end /// St_Sql = St_Sql & " ORDER BY W_配食入力.利用者コード ;" '件数を取得 Set Rs_Cnt = CurrentDb.OpenRecordset(St_Sql) Ln_Cnt = Rs_Cnt.RecordCount End_Flg = False 'レコード無し判定 If Rs_Cnt.EOF = True Or Rs_Cnt.BOF = True Then End_Flg = True End If Gokei = 0 Gohan = 0 Okayu = 0 Josyoku = 0 Kizami = 0 ChoKizami = 0 GenEn = 0 'ループ処理 Rs_Cnt.MoveFirst Hiduke = Rs_Cnt("日付") Youbi = Rs_Cnt("曜日") Do Until Rs_Cnt.EOF = True Gokei = Gokei + 1 Select Case Rs_Cnt("米") Case 1 Gohan = Gohan + 1 Kome = " " Case Else Okayu = Okayu + 1 Kome = "おかゆ" End Select Select Case Rs_Cnt("おかず") Case 1 Josyoku = Josyoku + 1 Okazu = " " Case 2 Kizami = Kizami + 1 Okazu = "刻み" Case Else ChoKizami = ChoKizami + 1 Okazu = "超刻み" End Select Select Case Rs_Cnt("減塩") Case 1 Enbun = " " Case 2 GenEn = GenEn + 1 Enbun = "減塩" End Select Code1 = Rs_Cnt("利用者コード") St_Sql = "SELECT D_利用者.シメイ " St_Sql = St_Sql & "FROM D_利用者 " St_Sql = St_Sql & "WHERE D_利用者.利用者コード = " & Code1 St_Sql = St_Sql & " ORDER BY D_利用者.利用者コード ;" '件数を取得 Set Rs_Cnt2 = CurrentDb.OpenRecordset(St_Sql) Ln_Cnt = Rs_Cnt2.RecordCount St_Sql = "INSERT INTO W_発注食数明細 VALUES (" & Code1 & "," St_Sql = St_Sql & "'" & Rs_Cnt("利用者氏名") & "','" & Rs_Cnt2("シメイ") & "'," St_Sql = St_Sql & "'" & Rs_Cnt("主食") & "','" & Rs_Cnt("副食") & "'," St_Sql = St_Sql & "'" & Kome & "','" & Okazu & "','" & Enbun & "'" St_Sql = St_Sql & ") ;" DoCmd.RunSQL (St_Sql) Rs_Cnt.MoveNext Loop St_Sql = "INSERT INTO W_発注食数合計 VALUES ('" & Hiduke & "'," St_Sql = St_Sql & "'" & Youbi & "'," & Gokei & "," & Gohan & "," & Okayu & "," St_Sql = St_Sql & Josyoku & "," & Kizami & "," & ChoKizami & "," & GenEn St_Sql = St_Sql & ") ;" DoCmd.RunSQL (St_Sql) 'レコードセットの終了 Rs_Cnt.Close Rs_Cnt2.Close Exit Function Err_PfDataMake: Resume Next

  • Access2002のコンパイルエラーについて

    Access2002を使っていて、印刷ボタンを押したら、下記のような見たことのない画面になり、 「コンパイルエラー end function が必要です。」というメッセージが出てきました。 どなたか詳しい方、修復の方法を教えて下さい。よろしくお願いします。 Private Function PfDataMake() As Boolean 'On Error GoTo Err_PfDataMake Dim St_Sql As String Dim Ln_Cnt As Long Dim Rs_Cnt As Recordset Dim Rs_Cnt2 As Recordset Dim In_Cnt As Long Dim End_Flg As Boolean Dim Code1 As Long Dim Gokei As Long Dim Gohan As Long Dim Okayu As Long Dim Josyoku As Long Dim Kizami As Long Dim ChoKizami As Long Dim GenEn As Long Dim Kome As String Dim Okazu As String Dim Enbun As String Dim Hiduke As Date Dim Youbi As String 'W_発注食数合計の初期化 St_Sql = "Delete From W_発注食数合計 ;" DoCmd.RunSQL (St_Sql) 'W_発注食数明細の初期化 St_Sql = "Delete From W_発注食数明細 ;" DoCmd.RunSQL (St_Sql) '///// 対象データを抽出 ///// St_Sql = "SELECT * " St_Sql = St_Sql & "FROM W_配食入力 " '/// 20060423追加 出力対象「前日キャンセル」追加 start /// 'St_Sql = St_Sql & "WHERE W_配食入力.キャンセル = 0" 'St_Sql = St_Sql & "WHERE (W_配食入力.キャンセル = 0) or (W_配食入力.キャンセル = 2)" St_Sql = St_Sql & "WHERE (W_配食入力.配達 <> 3) and (W_配食入力.配達 <> 4)" '/// 20060423追加 end /// St_Sql = St_Sql & " ORDER BY W_配食入力.利用者コード ;" '件数を取得 Set Rs_Cnt = CurrentDb.OpenRecordset(St_Sql) Ln_Cnt = Rs_Cnt.RecordCount End_Flg = False 'レコード無し判定 If Rs_Cnt.EOF = True Or Rs_Cnt.BOF = True Then End_Flg = True End If Gokei = 0 Gohan = 0 Okayu = 0 Josyoku = 0 Kizami = 0 ChoKizami = 0 GenEn = 0 'ループ処理 Rs_Cnt.MoveFirst Hiduke = Rs_Cnt("日付") Youbi = Rs_Cnt("曜日") Do Until Rs_Cnt.EOF = True Gokei = Gokei + 1 Select Case Rs_Cnt("米") Case 1 Gohan = Gohan + 1 Kome = " " Case Else Okayu = Okayu + 1 Kome = "おかゆ" End Select Select Case Rs_Cnt("おかず") Case 1 Josyoku = Josyoku + 1 Okazu = " " Case 2 Kizami = Kizami + 1 Okazu = "刻み" Case Else ChoKizami = ChoKizami + 1 Okazu = "超刻み" End Select Select Case Rs_Cnt("減塩") Case 1 Enbun = " " Case 2 GenEn = GenEn + 1 Enbun = "減塩" End Select Code1 = Rs_Cnt("利用者コード") St_Sql = "SELECT D_利用者.シメイ " St_Sql = St_Sql & "FROM D_利用者 " St_Sql = St_Sql & "WHERE D_利用者.利用者コード = " & Code1 St_Sql = St_Sql & " ORDER BY D_利用者.利用者コード ;" '件数を取得 Set Rs_Cnt2 = CurrentDb.OpenRecordset(St_Sql) Ln_Cnt = Rs_Cnt2.RecordCount St_Sql = "INSERT INTO W_発注食数明細 VALUES (" & Code1 & "," St_Sql = St_Sql & "'" & Rs_Cnt("利用者氏名") & "','" & Rs_Cnt2("シメイ") & "'," St_Sql = St_Sql & "'" & Rs_Cnt("主食") & "','" & Rs_Cnt("副食") & "'," St_Sql = St_Sql & "'" & Kome & "','" & Okazu & "','" & Enbun & "'" St_Sql = St_Sql & ") ;" DoCmd.RunSQL (St_Sql) Rs_Cnt.MoveNext Loop St_Sql = "INSERT INTO W_発注食数合計 VALUES ('" & Hiduke & "'," St_Sql = St_Sql & "'" & Youbi & "'," & Gokei & "," & Gohan & "," & Okayu & "," St_Sql = St_Sql & Josyoku & "," & Kizami & "," & ChoKizami & "," & GenEn St_Sql = St_Sql & ") ;" DoCmd.RunSQL (St_Sql) 'レコードセットの終了 Rs_Cnt.Close Rs_Cnt2.Close Exit Function Err_PfDataMake: Resume Next