Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Access 2016)
データプロバイダーを初期化できませんでした。
投稿日時: 21/10/19 13:35:33
投稿者: takado0310

アクセス超初心者です。
 
マクロで
データ登録画面でデータを入力後
 
レコードの保存

ウインドを閉じる

再クエリー
 
の順でマクロを実行しているのですが、
 
【データプロバイダーを初期化できませんでした】
 
のエラーメッセージが出てうまくいきません、
(データは入力されているようです。)
 
どうすればよいのでしょうか
教えてください。
 
よろしく、お願いします。
 
 

回答
投稿日時: 21/10/19 14:46:10
投稿者: Suzu

takado0310 さんの引用:
マクロで
データ登録画面でデータを入力後
 
レコードの保存

ウインドを閉じる

再クエリー

 
 
どこで 【データプロバイダーを初期化できませんでした】 のエラーが出ていますか?
再クエリのマクロを削除して エラーが出なければ 再クエリ にてエラーが発生していますよね?
             エラーが出るのであれば、更に ウィンドを閉じる を削除してみる
                → この様な手順で、どこでエラーになっているか 確認できますよね?
 
多分 ですが、再クエリ にて エラーが発生しているのでは?
 
その前提で なおかつ、そのマクロが、データ登録画面 上のボタンクリックに指定されている として
 
 
レコード保存 と ウィンドを閉じる は、データ登録画面(フォーム)に対しての操作ですよね?
では、フォームが閉じた後、再クエリ は どのオブジェクトに対しての操作のつもりでしょうか?
 
 
マクロでは、アクティブな オブジェクト に対しての 操作となります。
登録画面 を閉じたら、何がアクティブオブジェクトになりますか?
そのオブジェクトがアクティブな状態で、リボン中の 再クエリ は 押せる状態ですか?
 
 
目的が
1. 一覧 フォームがあり、その一覧フォームから、登録画面を 表示。
2. 登録画面 にて、データを入力後 フォームを閉じる。
3. 登録画面 が 閉じたので、一覧フォームを アクティブにし
  一覧フォーム上に、登録画面 にて入力したデータを表示させたいが為、再クエリを行う
なのであれば
 
 
レコードの保存

ウインドを閉じる

一覧フォーム を選択

(一覧フォーム 上の とこかのコントロールにフォーカスを移す)

再クエリー
 
の順にしてみてください。

投稿日時: 21/10/20 12:14:41
投稿者: takado0310

SUZUさん
 
丁寧で細かいところまでのアドバイス
ありがとうございます。
 
SUZUさんの言うとおり再クエリのところで
エラーが出ていたようです。
エラーは、出なくなりましたが、データ
が更新されません。テーブルのデータは
更新されています。
フォームのソースは、クエリーを使って
います。
 
フォームは、【F_メイン】という名前で
フォームヘッダには、販売担当者、応対
日付、訪問先のテキストボックスで
検索ボタンと解除ボタンがあります。
検索ボタンと解除ボタンはVBAで動いて
います。
 
フォームフッターには登録ボタンが
あります。そのフォームの中の新規
登録ボタンは、
 
レコードの保存

ウインドを閉じる

コントロールの移動

再クエリー
 
となっています。
 
よろしくお願いいたします。
 
 
 

回答
投稿日時: 21/10/20 14:33:26
投稿者: Suzu

1. 画面構成 を提示ください。
 
  ご説明の内容では
  【F_メイン】 が名称として出てきました。
    ヘッダーに、VBA 処理用の 各テキストボックスと、『検索』『解除』2つのボタンがある。
    フッターに、今回のマクロ の割り当てられた 『新規登録』ボタンがある。
 
   名称に、メイン があると言うことは メイン/サブ形式 のフォーム
    のメインフォームと言うことですか?
 
 
2. 

引用:
レコード保存 と ウィンドを閉じる は、データ登録画面(フォーム)に対しての操作ですよね?
では、フォームが閉じた後、再クエリ は どのオブジェクトに対しての操作のつもりでしょうか?

 
 【F_メイン】のフッターに そのボタンがあると言うことは、
 【F_メイン】に対しての 閉じる命令になるはずです。
 
  マクロ実施後、その【F_メイン】フォームは閉じるのですか?
 
  ウィンドを閉じる は、どのオブジェクトを閉じる意図で入れたのかを示してください。 
  また、その意図通りに動作するのでしょうか?
  
 
3. 
引用:
再クエリのところでエラーが出ていたようです。
エラーは、出なくなりましたが、データが更新されません。
テーブルのデータは更新されています。
フォームのソースは、クエリーを使っています。

 
エラーが出なくなったのは、マクロから、再クエリ を消したから という認識で良いのでしょうか?
 
データが更新されません との事ですが、どこの データを更新したいのですか?
 
直前に、ウィンドを閉じる命令を入れていますから
レコードを表示しているのであろう【F_メイン】は閉じているはずです。
 
となれば、【F_メイン】と、そのレコードソースたるテーブル以外の
どのオブジェクト のデータが更新されない とおっしゃっているのでしょうか?
 
もし、そのオブジェクトが既に 画面上にあるのであれば、
その更新のための 再クエリ は先に マクロから、再クエリを消しているのですから、
更新命令を出していませんから、更新されなくて当然なのではありませんか?
 
 
4. 
引用:
検索ボタンと解除ボタンがあります。検索ボタンと解除ボタンはVBAで動いています。

 
 そのVBAの内容を提示ください。
 
 
いろいろと 推測は出来るのですが、ご説明に矛盾がない状態の推測ではない状態です。
まずは、事実を提示頂きたいです。

投稿日時: 21/10/20 17:56:22
投稿者: takado0310

 
 
1. 画面構成 を提示ください。
  
  ご説明の内容では
  【F_メイン】 が名称として出てきました。
     ヘッダーに、VBA 処理用の 各テキストボックスと、『検索』『解除』2つのボタンがある。
     フッターに、今回のマクロ の割り当てられた 『新規登録』ボタンがある。
  
   名称に、メイン があると言うことは メイン/サブ形式 のフォーム
    のメインフォームと言うことですか?
 
●メイン/サブ形式では、ありません。
 
・フォームヘッダーのイメージ                    ボタン  ボタン
       ____       ____      ___   ___ _____
担当者名  |非連結 |訪問年月日 |非連結| 訪問先|非連結|  |検索| |解除|
      ----------       ---------     --------   -------- ------
ラベル ID  営業担当者  訪問年月日 訪問先
・詳細
    ID  営業担当者  訪問年月日 訪問先
 
・フォームフッターのイメージ
     _____
     |登録|
     -------
   
2. 
引用:
レコード保存 と ウィンドを閉じる は、データ登録画面(フォーム)に対しての操作ですよね?
では、フォームが閉じた後、再クエリ は どのオブジェクトに対しての操作のつもりでしょうか?
 
  
 【F_メイン】のフッターに そのボタンがあると言うことは、
  【F_メイン】に対しての 閉じる命令になるはずです。
  
  マクロ実施後、その【F_メイン】フォームは閉じるのですか?
●【F_メイン】の画面は閉じません
  
  ウィンドを閉じる は、どのオブジェクトを閉じる意図で入れたのかを示してください。 
   また、その意図通りに動作するのでしょうか?
●登録ボタンで開いた新規登録画面です。
 動作します。
3. 
 
引用:
再クエリのところでエラーが出ていたようです。
エラーは、出なくなりましたが、データが更新されません。
テーブルのデータは更新されています。
フォームのソースは、クエリーを使っています。
 
  
エラーが出なくなったのは、マクロから、再クエリ を消したから という認識で良いのでしょうか?
 ●再クエリは、消していません。
データが更新されません との事ですが、どこの データを更新したいのですか?
 ●【F_メイン】の詳細データです。
直前に、ウィンドを閉じる命令を入れていますから
 レコードを表示しているのであろう【F_メイン】は閉じているはずです。
 ●閉じているのは登録ボタンでリンクしている新規登録画面です。
 
となれば、【F_メイン】と、そのレコードソースたるテーブル以外の
 どのオブジェクト のデータが更新されない とおっしゃっているのでしょうか?
  
もし、そのオブジェクトが既に 画面上にあるのであれば、
その更新のための 再クエリ は先に マクロから、再クエリを消しているのですから、
 更新命令を出していませんから、更新されなくて当然なのではありませんか?
●再クエリは消していません。
   
4. 
 
引用:
検索ボタンと解除ボタンがあります。検索ボタンと解除ボタンはVBAで動いています。
 
  
 そのVBAの内容を提示ください。
 
 
●検索ボタン_VBA
Private Sub cmd_click()
Dim ct As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strfil As String
 
Set ct = CurrentProject.Connection
rs.CursorLocation = adUseClient
 
rs.Open "Q_販売担当者で抽出", ct, adOpenDynamic, adLockOptimistic
 
 
If (combo.Column(1) > "0") Then
 
a1 = 1
 
End If
 
If (商品区分 > "0") Then
 
a2 = 3
 
End If
 
 
If (訪問年月日 > "0") Then
 
a3 = 5
 
End If
 
suma = a1 + a2 + a3
 
 
If (suma = 1) Then
 
strfil = "[営業担当者]='" & combo.Column(1) & "'"
 
ElseIf (suma = 3) Then
 
strfil = "[訪問先詳細_(管理会社名・物件名等)]='*" & 商品区分 & "*'"
 
ElseIf (suma = 5) Then
 
strfil = "[訪問年月日] >='" & 訪問年月日 & "'"
 
ElseIf (suma = 4) Then
 
strfil = "[営業担当者]='" & combo.Column(1) & "'" & "And [訪問先詳細_(管理会社名・物件名等)]='*" & 商品区分 & "*'"
 
ElseIf (suma = 6) Then
 
strfil = "[営業担当者]='" & combo.Column(1) & "'" & "And [訪問年月日] >='" & 訪問年月日 & "'"
 
ElseIf (suma = 8) Then
 
strfil = "[訪問先詳細_(管理会社名・物件名等)]='*" & 商品区分 & "*'" & " and " & "[訪問年月日] >='" & 訪問年月日 & "'"
 
ElseIf (suma = 9) Then
 
strfil = "[営業担当者]='" & combo.Column(1) & "'" & " and [訪問先詳細_(管理会社名・物件名等)]='*" & 商品区分 & "*'" & " and " & "[訪問年月日] >='" & 訪問年月日 & "'"
 
 
 
End If
rs.Filter = strfil
 
Set Me.Recordset = rs
rs.Close
Set rs = Nothing
ct.Close
Set ct = Nothing
 
End Sub
ご説明に矛盾がない状態の推測ではない状態です。
まずは、事実を提示頂きたいです。
 
●解除ボタン_VBA
 
Private Sub 解除_Click()
 
Dim ct As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strfil As String
 
Set ct = CurrentProject.Connection
rs.CursorLocation = adUseClient
 
rs.Open "Q_販売担当者で抽出", ct, adOpenDynamic, adLockOptimistic
 
 
 
[Forms]![F_メイン]![商品区分] = ""
 
[Forms]![F_メイン]![combo] = ""
 
[Forms]![F_メイン]![訪問年月日] = ""
 
 
 
DoCmd.ShowAllRecords
 
Set Me.Recordset = rs
rs.Close
Set rs = Nothing
ct.Close
Set ct = Nothing
 
'Me.FilterOn = False
'Me.Requery
End Sub
  
 以上です、よろしくお願いします。

投稿日時: 21/10/21 10:17:53
投稿者: takado0310

SUZUさん
 
前回のコメントでお礼が抜けていました。
いつも丁寧なアドバイスありがとうございます。
 
前回のコメントでVBAのコードを提示しましたが、
何分超初心者ですので恥ずかしいコードですみません
 
よろしく、お願いします。

回答
投稿日時: 21/10/22 09:37:09
投稿者: Suzu

フォームが二つあり
【F_メイン】 帳票フォーム
--------------------------------------------------------------------------
  ヘッダー
    テキストボックス等    『担当者名』『訪問年月日』『訪問先』
    コマンドボタン            『検索』『解除』
  詳細セクション
    〜〜〜〜
  フッター
    コマンドボタン『登録』
--------------------------------------------------------------------------
 
【新規登録】 フォーム
--------------------------------------------------------------------------
  コントロール 複数
  コマンドボタン
    マクロ レコードの保存 → ウインドを閉じる →再クエリー
--------------------------------------------------------------------------
となっている
 
と言うことで良いですか?
(説明のマクロが、【F_メイン】にあると認識していました)
 
 
まず、前提として
再クエリ は フォームのレコードセットを再取得する命令です。
 
今回の【F_メイン】フォームについて
レコードソースに、クエリ『Q_販売担当者で抽出』を指定してあるかも知れませんが
 
『検索』ボタンの動作として
フォームに設定してあるレコードソースのクエリ『Q_販売担当者で抽出』とは別に、
1. クエリ『Q_販売担当者で抽出』 レコードセットとして開き、
2. 抽出条件により、フィルターを設定しレコード抽出
3. そのレコードセットを、フォームのレコードセットとして設定する
   (ここで、フォームの レコードソースは設定してあっても
    そのレコードソース は無効となり、レコードセット にて設定したソースが有効となります)
 
『解除』ボタンの動作として
  フォームに設定してあるレコードソースのクエリ『Q_販売担当者で抽出』
  『検索』にて設定したレコードセット
  どちらとも違う レコードセットを
1. クエリ『Q_販売担当者で抽出』をレコードセットとして開く
2. そのレコードセットを、フォームのレコードセットとして設定する
   (先の『検索』同様
    フォームの レコードソースは設定してあっても、そのレコードソース は無効
    『検索』にて設定したレコードセットも無効
    『Q_販売担当者で抽出』を新たに開きレコードセットとして開き渡しています
      レコードソースとしては一致する事になります)
となっています。
 
 
つまり、フォームのレコードソース とは別接続にて フォームのレコードセットを与えている状態です
 
『検索』を押し、抽出条件が適用された状態で 再クエリを発行しても
『検索』の条件はそのままで 再クエリがされます。
その『検索』の条件 に合致しない レコードを入力した場合、表示されません。
 
また、稀にではありますが、
レコードソース接続したフォームにて入力/編集/削除したレコードを
ADOやDAOを介して接続し、レコードを参照しようとするとき
タイムラグが発生し、参照できない場合があります。
 
 
レコードソース接続  【F_メイン】 【新規登録】  接続:A
              ↓     ↓
ソーステーブル       あるテーブル
              ↑     ↑
ADOレコードセット接続  『検索』  『解除』    接続:B
 
上記の 接続:A と、接続:B  にてお互いに編集した場合、
その内容を取得するのにタイムラグが発生する可能性があります。
 
 
よって、検索を行うのであれば 別接続のレコードセットを使わずに
フォームのフィルター機能を使えば良いと思います。
 
 
Private Sub cmd_click()
 Dim strfil As String
 
 If (combo.Column(1) > "0") Then a1 = 1
 If (商品区分 > "0") Then a2 = 3
 If (訪問年月日 > "0") Then a3 = 5
 suma = a1 + a2 + a3
 
 Select Case suma
  Case 1
   strfil = "[営業担当者]='" & combo.Column(1) & "'"
  Case 3
   strfil = "[訪問先詳細_(管理会社名・物件名等)]='*" & 商品区分 & "*'"
  Case 4
   strfil = "[営業担当者]='" & combo.Column(1) & "'" & "And [訪問先詳細_(管理会社名・物件名等)]='*" & 商品区分 & "*'"
  Case 5
   strfil = "[訪問年月日] >='" & 訪問年月日 & "'"
  Case 6
   strfil = "[営業担当者]='" & combo.Column(1) & "'" & "And [訪問年月日] >='" & 訪問年月日 & "'"
  Case 8
   strfil = "[訪問先詳細_(管理会社名・物件名等)]='*" & 商品区分 & "*'" & " and " & "[訪問年月日] >='" & 訪問年月日 & "'"
  Case 9
   strfil = "[営業担当者]='" & combo.Column(1) & "'" & " and [訪問先詳細_(管理会社名・物件名等)]='*" & 商品区分 & "*'" & " and " & "[訪問年月日] >='" & 訪問年月日 & "'"
 End Select
 
 If Len(strfil) >0 Then
  Me.Filter = strfil
  Me.FilterOn = True
 End If
End Sub
 
Private Sub 解除_Click()
 Me.FilterOn =False
 Me![商品区分] = ""
 Me![combo] = ""
 Me![訪問年月日] = ""
 Me.Filter = ""
End Sub

回答
投稿日時: 21/10/22 13:47:53
投稿者: Suzu

suma は、抽出時の 条件の 適用先を決める為の変数だったのですね。
 
・コントロールに 値があれば適用
・全ての 条件は AND
 
なであれば、
1. 初めから、 AND を付けて 抽出条件の為の文字列を作り、
2. コントロールの値のある無し で条件式 に繋ぐかを判断
3. 最後に 文頭の 「 AND 」を切った 文字列を 条件式にすれば良いです。
 
 

引用:
Dim strfil As String
 
  If Len(combo) > 0 Then strfil = strfil & " AND [営業担当者]='" & combo & "'"
  If Len(商品区分) > 0 Then strfil = strfil & " AND [訪問先詳細_(管理会社名・物件名等)] LIKE '*" & 商品区分 & "*'"
  If Len(訪問年月日) > 0 Then strfil = strfil & " AND [訪問年月日] >='" & 訪問年月日 & "'"
 
  If Len(strfil) > 0 Then
    strfil = Mid(strfil, 5)
' Debug.Print strfil
    Me.Filter = Mid(strfil, 5)
    Me.FilterOn = True
  End If

投稿日時: 21/11/01 14:21:39
投稿者: takado0310

SUZUさん
 
お礼が遅れてすみませんでした。
いつもありがとうございます。
 
>1. 初めから、 AND を付けて 抽出条件の為の文字列を作り、
>2. コントロールの値のある無し で条件式 に繋ぐかを判断
>3. 最後に 文頭の 「 AND 」を切った 文字列を 条件式にすれば良いです。
  
こんな、書き方があるんだ。すっきりしていますね。
ありがとうございます。
 
再クエリについては私の理解不足と知識の無さがが問題で理解できません。
SUZUさんが丁寧に解説されていますが、すみません。
いろいろ試したのですが、F_メインにある登録ボタンで新規登録画面を開きデータ内容を入力し新規
登録画面にある登録ボタンを押下してからF_メインの帳票を更新したいのですがうまくいきません。
(データを入力後ここで再クエリを実行しています)
再度F_メインにある検索ボタンを押下するとデータ内容は更新されて表示されます。
何が問題なのでしょうか?
 
よろしくお願いします。
 
 
 

投稿日時: 21/11/01 14:33:57
投稿者: takado0310

新規登録画面にある登録ボタンのVBAは以下のとおりです。
 
 
 
 
Private Sub 新規登録_Click()
 
Dim ct As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strfil As String
 
Set ct = CurrentProject.Connection
rs.CursorLocation = adUseClient
 
On Error Resume Next
 
 
 
'rs.Open "【様式】活動日報 (新)1", ct, adOpenDynamic, adLockOptimistic
rs.Open "Q_販売担当者で抽出", ct, adOpenDynamic, adLockOptimistic
 
Set Me.Recordset = rs
 
'rs.AddNew
 
'rs!ID = Me!ID
rs!営業担当者 = Me!営業担当者
rs!訪問年月日 = Me!訪問年月日
'rs!対応時間 = Me!対応時間
rs!訪問先区分 = Me!訪問先区分
rs!訪問先詳細 = Me!訪問先詳細
rs!物件ID = Me!物件ID
rs!訪問先担当者名 = Me!訪問先担当者名
rs!訪問目的 = Me!訪問目的
rs!訪問目的詳細 = Me!訪問目的詳細
rs!コメント欄 = Me!コメント欄
 
rs.Update
 
MsgBox ("追加しました")
 
DoCmd.Close acForm, "F_新規登録"
 
rs.Close
 
 
DoCmd.GoToControl Forms!F_メイン!営業担当者
 
 
Me.[Forms]![F_メイン]![営業担当者].Requery
 
Set rs = Nothing
 
ct.Close
 
Set ct = Nothing
 
End Sub

回答
投稿日時: 21/11/02 08:51:00
投稿者: Suzu

いままで「マクロ」とのお話で、「マクロ」オブジェクト での話をしていた つもりなのですが、
コードに、レコードの保存、Requery が あります。
 
1. 「マクロ」オブジェクトではなく、掲載のコードを マクロ とおっしゃっておいでですか?
 
2. 1. が正しい場合、
  【データプロバイダーを初期化できませんでした】 が表示されるのは
    Me.[Forms]![F_メイン]![営業担当者].Requery
   の部分でしょうか?
 
3. 新規登録_Click のフォームについて、
  これは、
    フォームの レコードソース は 空白
    フォーム上の各コントロールのコントロールソース も 空白
   でしょうか?
 
   それとも、
   Set Me.Recordset = rs
   があると言うことは連結フォーム?
 
   でも上記を行った直後に、
 
   rs!営業担当者 = Me!営業担当者
     (中略)
   rs!コメント欄 = Me!コメント欄
   rs.Update
 
   を行っていますから、
    フォーム上のコントロールの値をレコードセットに渡し、UpDateしています。
 
   3-1)連結フォームでなく、レコードセットを使い レコードを保存している理由はなんでしょうか?
 
   3-2)レコードセットを使用しレコードを保存しているにも関わらず、
      自フォームのレコードセットプロパティーに、
       レコードセットを セットしているのは何故でしょいう?
 
     3-1)、3-2) の質問の意味が分からないのであれば、
     普通の連結フォームにしない理由を教えてください。

投稿日時: 21/11/02 15:15:11
投稿者: takado0310

SUZUさん
ありがとうございます。
いつもお世話になっています。
 
1. 「マクロ」オブジェクトではなく、掲載のコードを マクロ とおっしゃっておいでですか?
 ●「マクロ」オブジェクトです。
  しかし、再クエリでエラーが出るので再クエリーはマクロから削除しました。
  今は、F_新規登録ファムを開くだけのマクロになっています。
  それで、F_新規登録の登録ボタンのVBAから再クエリーを行いたいです。
  
3-1)、3-2) の質問の意味が分からないのであれば、
     普通の連結フォームにしない理由を教えてください。
 ●F_メインの詳細で全体を把握し新規登録画面のコメント欄にたくさんの文章を打ち込み見やすくたい
 ためです。(今は登録画面ですが、『編集』、『削除』ボタンも作成しました。)
 質問の答えになっていますか?

回答
投稿日時: 21/11/04 09:16:22
投稿者: Suzu

引用:
1. 「マクロ」オブジェクトではなく、掲載のコードを マクロ とおっしゃっておいでですか?
 ●「マクロ」オブジェクトです。
  しかし、再クエリでエラーが出るので再クエリーはマクロから削除しました。
  今は、F_新規登録ファムを開くだけのマクロになっています。
  それで、F_新規登録の登録ボタンのVBAから再クエリーを行いたいです。

 
マクロオブジェクトからの 再クエリ命令は消している
F_新規登録 の登録から、F_メイン ![営業担当者] の 再クエリを行いたい
 
と言うことですね。
 
 
引用:
3-1)、3-2) の質問の意味が分からないのであれば、
     普通の連結フォームにしない理由を教えてください。
 ●F_メインの詳細で全体を把握し新規登録画面のコメント欄にたくさんの文章を打ち込み見やすくたい
 ためです。(今は登録画面ですが、『編集』、『削除』ボタンも作成しました。)
 質問の答えになっていますか?

 
答えにはなっていないです。
 
Accessのフォームの利点として。
 フォーム上のコントロールに
 そのコントロールの『コントロールソース』 に指定したフィールドの値を表示を表示します。
 その時のフィールドは、コントロールの『レコードソース』に指定した テーブル/クエリ から
 フィールド を探します。
 
その状態で、
 コントロールに値を入れ
  ・レコード保存命令
  ・再クエリ
  ・次のレコードへの移動
 を行うと レコードが保存されます。
 
対して、今回の場合
 F_新規登録
 F_メイン
  どちらにおいても、
 
 Set Me.Recordset = rs
 
 がある事で、
 フォームの レコードソース 設定は無視され、
 rs にて取得したフィールドの値がコントロールに表示される事になります。
 
どちらかと言えば、普通 ではない方法なのです。
 
普通は、そんな事を行わず
 
Private Sub 新規登録_Click()
  DoCmd.RunCommand acCmdSaveRecord
  DoCmd.Close acForm, "F_新規登録"
 
  [Forms]![F_メイン].SetForcus
  [Forms]![F_メイン]![営業担当者].Requery
End Sub
 
で事足りる事が多いです。
 
 
 
引用:
2. 1. が正しい場合、
  【データプロバイダーを初期化できませんでした】 が表示されるのは
    Me.[Forms]![F_メイン]![営業担当者].Requery
   の部分でしょうか?

 
については、いかがでしょうか?
多分、コンパイルエラーになっていると思います。
 
Private Sub 新規登録_Click()
 (中略)
Me.[Forms]![F_メイン]![営業担当者].Requery
 (中略)
End Sub
 
この 「Me」は、このコードを記載しているフォームを指します。
 
ですので、フォーム【 F_新規登録 】 を指します
そのフォーム上に、【F_メイン】関係のオブジェクトはありませんからエラーになります。
 
行うとすれば
[Forms]![F_メイン]![営業担当者].Requery
です。

投稿日時: 21/11/05 17:03:18
投稿者: takado0310

SUZUさん
 
いつも丁寧な解説でありがとうございます。
何か、知らないけど以下のコードで私がしたっかった
ことが、できるようになりました。
本当に超初心者の私に付き合ってくれましてありがとう
ございました。
また、よろしくお願いします。
 
 
ありがとうございました。
 
 
 
 
 
 
Sub 新規登録_Click()
 
Dim ct As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strfil As String
 
Set ct = CurrentProject.Connection
rs.CursorLocation = adUseClient
 
'On Error Resume Next
 
 
 
'rs.Open "【様式】活動日報 (新)1", ct, adOpenDynamic, adLockOptimistic
rs.Open "Q_販売担当者で抽出", ct, adOpenDynamic, adLockOptimistic
 
Set Me.Recordset = rs
 
'rs!ID = Me!ID
rs!営業担当者 = Me!営業担当者
rs!訪問年月日 = Me!訪問年月日
rs!コメント欄 = Me!コメント欄
 
rs.Update
 
DoCmd.SetWarnings True
 
MsgBox ("追加しました")
 
 
rs.Close
 
 
Set rs = Nothing
 
ct.Close
 
Set ct = Nothing
 
'Dim ct As New ADODB.Connection
'Dim rs As New ADODB.Recordset
'Dim strfil As String
 
Set ct = CurrentProject.Connection
rs.CursorLocation = adUseClient
 
rs.Open "Q_販売担当者で抽出", ct, adOpenDynamic, adLockOptimistic
 
 
DoCmd.GoToControl "営業担当者"
 
 
 
strfil = ""
 
If Len(Forms.F_メイン.combo.Column(1)) > 0 Then strfil = strfil & " AND [営業担当者]='" & Forms.F_メイン.combo.Column(1) & "'"
  If Len(Forms.F_メイン.商品区分) > 0 Then strfil = strfil & " AND [訪問先詳細] LIKE '*" & Forms.F_メイン.商品区分 & "*'"
  If Len(Forms.F_メイン.訪問年月日) > 0 Then strfil = strfil & " AND [訪問年月日] >='" & Forms.F_メイン.訪問年月日 & "'"
  
  If Len(strfil) > 0 Then
    strfil = Mid(strfil, 5)
 'Debug.Print strfil
' Me.Filter = Mid(strfil, 5)
' Me.FilterOn = True
  End If
 
 
rs.Filter = strfil
 
 
Set Forms.F_メイン.Recordset = rs
 
DoCmd.Close acForm, "F_新規登録"
 
 
End Sub

回答
投稿日時: 21/11/08 08:54:45
投稿者: Suzu

動いたとの事なので、おめでとうございます。
 
Set Me.Recordset = rs は、そのままにしたのですね。
 
一つだけ。

Set Me.Recordset = rs
 
'rs!ID = Me!ID
rs!営業担当者 = Me!営業担当者
rs!訪問年月日 = Me!訪問年月日
rs!コメント欄 = Me!コメント欄

 
から、
フォーム上の 営業担当者、訪問年月日、コメント欄 には既に値が入っている事と思います。
それらのコントールの値をレコードセット経由にて保存(※1)されます。
 
これらのコントロールに、
 コントロールソース設定されている場合、このフォームは連結フォームと言うことになります。
 
連結フォームの場合、フォームに対し以下の事を行うとレコードの保存がされる事になります。
・保存処理を行ったとき
・フォームのレコード移動時
・フォームの再クエリ実行時
・フォームを閉じる時
 
よって 最後の、
DoCmd.Close acForm, "F_新規登録"
で、フォームが閉じられる事になり、レコードの保存(※2)がなされる事になります。
 
連結フォームの場合、※1、※2 の 2か所で レコードの保存処理が行われ
レコードの重複保存がなされる事になります。
 
連結フォームなのであれば
 
'rs!ID = Me!ID
rs!営業担当者 = Me!営業担当者
rs!訪問年月日 = Me!訪問年月日
rs!コメント欄 = Me!コメント欄
 
rs.Update
は余計な処理です。
 
非連結フォームなのであれば
Set Me.Recordset = rs

 
が余計な処理になります。
 
見直しを掛けた方が良いでしょう。

投稿日時: 21/11/08 16:16:54
投稿者: takado0310

SUZUさん
 
ありがとうございます。
親切な指導ありがとうございます。
今後、SUZUさんから教えてもらったことを基本に
見直しをかけていきたいと思います。
 
とりあえず、動いたので解決済みにさしていただきます。
 
ありがとうございました。