よくAccessのVBA説明を見ると「CurrentDbは変数などにキャッシュしましょう」と書いてあります。なぜかというと、CurentDbはメソッドであり、毎回オブジェクトを生成しています。これはどんな影響があるのでしょうか。
以下で実験できます。
Private Sub Test()
CurrentDb.Execute "select * into test1 from msysobjects"
'0件と表示される
Debug.Print CurrentDb.RecordsAffected
With CurrentDb
.Execute "select * into test2 from msysobjects"
'件数が表示される
Debug.Print .RecordsAffected
End With
End Sub
上記test1のテーブル作成クエリではCurrentDbを使ってオブジェクトを生成するので、直前にあるアクションクエリの実行結果に関係無く0件と表示されます。
test2についてはWithで生成オブジェクトを保持しているので、正しい件数が表示されます。もちろんWithではなくオブジェクト変数に代入することでも実現可能です。
CurrentDbの表記を「CurrentDb()」と書けばわかりやすいと思います。
ちなみに、MSysObjectsはAccess内で使われる隠しテーブルで、たとえばAccess内にあるテーブルの一覧を取得する場合などに便利です。