基本的なことですがVBAからテーブルを作成したいと考えています。
今自宅でAccess2016を使っています。
VBAを使ってAccessへテーブルを新規作成したいと思い、下のようなソースコードを書いてみました。
すると、作成はされているのですが、アプリケーションのナビゲーションウィンドウへテーブルが表示されません。
特にエラーは特に何も出ません。
作成されていないと思い、再度実行すると、今度はエラーが発生します。
既にテーブルは存在すると言われます。
VBEの上書きボタンを押すと、ここでナビゲーションウィンドウにテーブルが表示されます。
ググったのですが、私が書いたコードと同じような内容ばかりでした。
保存がされないと表示がされないのかなとも思いましたが、保存をしないとアプリ側に表示されないというのもおかしいなと思いました。
以上より、
以下の2点教えて頂けますでしょうか。
- 何故この様な事が起きるのか?
内部でどのような動きになっているのか良く理解できていません。
Office系のアプリケーションだからこの様なことがあるのでしょうか?
アプリケーションへの更新処理の部分がうまく行ってないのかなと感じているのですが、良くわかっていません。
- どういったコードの書き方が良いのか
AccessではDAOオブジェクトかADOXでないとテーブル作成ができないとのことでした。
今回ADOXは使いたくないので、DAO一択かなと思っています。
そうすると、CreateTableDefsを使うしか方法はないのかなと思っています。
他にもこの様なモヤモヤが起こらないような書き方はあるのでしょうか?
もし有れば教えて下さい。
ソースコード
VBA
1Option Compare Database 2Option Explicit 3 4Sub createTable() 5 6 On Error GoTo Sub_Error 7 8 Dim dbs As DAO.Database 9 Dim table As DAO.TableDef 10 11 Set dbs = CurrentDb() 12 Set table = dbs.CreateTableDef("Sample1") 13 14 With table 15 .Fields.Append .CreateField("F1", dbInteger) 16 .Fields.Append .CreateField("F2", dbDate) 17 .Fields.Append .CreateField("F3", dbInteger) 18 dbs.TableDefs.Append table 19 dbs.TableDefs.refresh 20 21 End With 22 23Sub_Exit: 24 dbs.Close 25 Exit Sub 26 27Sub_Error: 28 MsgBox "エラー番号:" & Err.Number & vbCrLf & "エラーの種類:" & Err.Description, vbExclamation 29 GoTo Sub_Exit 30 31End Sub 32
その他
ADOやDAOを用いたAccessのお勧めの書籍などありましたら、教えて頂けるとありがたいです。
補足情報(FW/ツールのバージョンなど)
職場ではAccess2013、今後テスト時は2010を用意
自宅ではAccess2016を仕様しています。
現場ではAccess2010で実行しないといけません。
追記
F5キーをVBE側で押下した後、アプリケーション画面に戻りF5キーを押下すると、テーブルが表示されました。
そこで、Application.RefreshDatabaseWindowという一文を追加し、全体を下記の様にしたところ、表示されました。
画面の更新がされていなかっただけということでしょうか?
VBA
1Option Compare Database 2Option Explicit 3 4Sub createTable() 5 6 On Error GoTo Sub_Error 7 8 Dim dbs As DAO.Database 9 Dim table As DAO.TableDef 10 11 Set dbs = CurrentDb() 12 Set table = dbs.CreateTableDef("Sample5") 13 14 With table 15 .Fields.Append .CreateField("F1", dbInteger) 16 .Fields.Append .CreateField("F2", dbDate) 17 .Fields.Append .CreateField("F3", dbInteger) 18 19 End With 20 21 dbs.TableDefs.Append table 22 Application.RefreshDatabaseWindow 23 24Sub_Exit: 25 Set table = Nothing 26 dbs.Close 27 Set dbs = Nothing 28 Exit Sub 29 30Sub_Error: 31 MsgBox "エラー番号:" & Err.Number & vbCrLf & "エラーの種類:" & Err.Description, vbExclamation 32 GoTo Sub_Exit 33 34End Sub 35

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/04 02:26 編集
2018/02/04 05:44
2018/02/04 05:55
2018/02/04 06:04
2018/02/04 08:37
2018/02/04 12:56 編集
2018/02/04 09:37