次の方法で共有

実行時エラー91 オブジェクト変数またはWithブロック変数が設定されていませんと表示される

Anonymous
2020-01-11T02:45:45+00:00

お世話になります。

上記の件、下記のようにVBAを組みましたが

Set文の所で、標記のエラーが出ます

Private Sub コマンド16_Click()

 Dim strFilter As String

 Dim dbs As Recordset

 '[テキスト19]の値が Null でも空文字列でもない場合

If Nz(Me![テキスト19], "") <> "" Then

     '[実施日]の AND 条件を追記

    strFilter = strFilter & _

                 " AND (実施日='" & Me![テキスト19] & "')"

End If

 '[テキスト17]の値が Null でも空文字列でもない場合

If Nz(Me![テキスト17], "") <> "" Then

     '[契約月1]の OR 条件を

    '一括りにした AND 条件を追記

    strFilter = strFilter & _

                 " AND (" & _

                 "受付No Like '*" & Me![テキスト17] & "*'" & _

                 ")"

End If

 '変数 strFilter の 6 文字目以降の文字列を抜き出す

'(ことにより、先頭の " AND " を取り除く)

strFilter = Mid(strFilter, 6)

Set dbs = dbs.OpenRecordset("データ", dbOpenDynaset)

     Me.Bookmark = rs.Bookmark

     Me!実施日 = rs!実施日

     Me!受付No = rs!受付No

  ・

  ・

  ・

     Me!判定 = rs!判定

どのようにすればよいでしょうか

ご教示お願いいたします。

Microsoft 365 と Office | アクセス | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2020-01-28T04:44:36+00:00

やっと、ご希望のことの全容がほぼつかめました。

まず、質問のコードはまったく無意味なコードですので、捨てましょう。

あと、その入力フォームが連結か非連結がまだ不明ですが、連結にした方がコードがシンプルになりますので、連結にしましょう。

フォームのレコードソースにテーブル名を設定して、各テキストボックスのコントロールソースにフィールド名を設定しておきます。

ただし、実施日、受付No 入力用のテキストボックスは非連結にしておきます。これはデータ入力用でなく、データ検索用の役割を持たせますので。また、検索用だということをユーザーに分かり安くするために、フォームヘッダーに配置するといいでしょう。このテキストボックスの名前を「txt実施日」「txt受付No」とします。

フォームのプロパティは下記のように設定しておきます。

データ入力用 はい

フィルターの使用 いいえ

これでフォームを開いたとき、新規データ入力用として開きます。

「txt受付No」の入力規則は削除して起きて、更新後処理に下記のイベントプロシージャを設定します。

Private Sub txt受付No_AfterUpdate()

Dim strFilter As String

strFilter = "実施日=#" & Me.txt実施日 & "# AND 受付No=" & Me.txt受付No]

If DCount("受付No","アンケートデータ",)=0 Then

Me.実施日.Value = Me.txt実施日

Me.受付No.Value = Me.txt受付No

Else

Me.Filter = strFilter

Me.FilterOn = true

Me.DataEntry = False

End If

End Sub

これで、「txt実施日」「txt受付No」を入力してEnterキーを押せば、

該当レコードがなければ、新規レコード登録、あれば、該当レコードが表示されて更新できるようになります。

あとは、もう少しユーザーインターフェイスを工夫して入力しやすくしたり、入力ミスを防ぐようにするといいでしょう。

「txt実施日」「txt受付No」が入力されるまでは、他のコントロールは入力不可にしておくとか、

「txt受付No」は、コンボボックスにしておいて、リストを「txt実施日」で絞り込んだものにしておくとか、すると登録済みのデータの再入力はリストから選択するだけですみます。

"次へ"コマンドボタンのイベントプロシージャは下記のコードで登録後、新規レコードへ移動します。

DoCmd.GoToRecord , , acNewRec

Me.DataEntry = True

Me.txt受付No = Null

この回答は役に立ちましたか?

1 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

16 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Makapu 92,110 評価のポイント ボランティア モデレーター
    2020-01-13T10:23:48+00:00

    distrusterさん

    Dim dbs As Database で「コンパイルエラー ユーザ定義型が定義されていません」となる場合は、[参照設定]で「Microsoft DAO X.X Object Library」にチェックを入れます。


    Dim rst As Recordset

    ~

      Me.Bookmark = rs.Bookmark

      Me!実施日 = rs!実施日

    rst と rs の違いですね。(すみません、後半部分までは確認しておりませんでした。)

    Dim rs As Recordset と修正するとどうでしょう。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2020-01-13T05:37:51+00:00

    Makapu様

    お世話になります。

    ご回答ありがとうございます。

    Dim dbs As Database

    Dim rst As Recordset  だと

    プロジェクトではなくユーザー定義型を措定してくださいと言われました。

    今は下記の通りにしていますが・・・

    Private Sub コマンド16_Click()

     Dim strFilter As String

     Dim rst As Recordset

    If Nz(Me![テキスト19], "") <> "" Then

      strFilter = strFilter & _

                     " AND (実施日='" & Me![テキスト19] & "')"

    End If

    If Nz(Me![テキスト17], "") <> "" Then

      strFilter = strFilter & _

                     " AND (" & _

                     "受付No Like '*" & Me![テキスト17] & "*'" & _

                     ")"

    End If

    strFilter = Mid(strFilter, 6)

    Set dbs = CurrentDb

    Set rst = dbs.OpenRecordset("データ", dbOpenDynaset)

      Me.Bookmark = rs.Bookmark

         Me!実施日 = rs!実施日

     ・

     ・

    Me.Bookmarkで、オブジェクトが必要ですと言われてしまいました。

    どのようにすれば、回避できるでしょうか?

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Makapu 92,110 評価のポイント ボランティア モデレーター
    2020-01-11T15:40:46+00:00

    distrusterさん、こんにちは。

    Dim dbs As Recordset

    Set dbs = dbs.OpenRecordset("データ", dbOpenDynaset)

    ↑ここでしょうか。

    Dim dbs As Database

    Dim rst As Recordset

    Set dbs = CurrentDb

    Set rst = dbs.OpenRecordset("データ", dbOpenDynaset)

    <参考>

    https://tsware.jp/tips/tips_423.htm

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  4. Anonymous
    2020-01-11T02:48:26+00:00

    下記で間違いがありましたので

    修正いたします

    '[テキスト17]の値が Null でも空文字列でもない場合

    If Nz(Me![テキスト17], "") <> "" Then

         '[受付No]の OR 条件を

        '一括りにした AND 条件を追記

        strFilter = strFilter & _

                     " AND (" & _

                     "受付No Like '*" & Me![テキスト17] & "*'" & _

                     ")"

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません