EXCELからAccessテーブルの有無判定及び新規作成
日報をEXCELで作成しACCESSへ登録してますが、年初めにテーブルの差替え行っています。
ACCESSとEXCELで何れも差替えを可能にしてますが、ACCESSで差替え後だとエラーになってしまいます。
それを回避する為、テーブルの有無を検索判定の方法が分りません。
自分なりに作成したのですが、予約済みエラーが発生してしまいます。
Sub 保存_Click()
Dim ACC As Object
Dim ACCC As ADODB.Connection
Dim ACCR As ADODB.Recordset
Dim SQL As String
Dim DelSQL As String
Dim CpySQL As String
Set ACC = Access.Application
Set ACCC = New ADODB.Connection
Set ACCR = New ADODB.Recordset
Const ACCpath = "D:\日報DB.mdb"
SQL = "SELECT * FROM [日報]"
DelSQL = "DELETE * FROM [日報];"
CpySQL = "SELECT * INTO [;Database=D:\日誌DB.mdb].[日報(" & Year(Now) - 1 & "年)] FROM [日報]"
'Accessレコードへ接続し開く
ACCC.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & ACCpath
ACCR.Open SQL, ACCC, adOpenStatic, adLockOptimistic
'新年新規テーブル作成
ACCR.MoveFirst
If ACCR.Fields("日付").Value <= DateSerial(Year(Now), 1, 1) Then
If DCount("*", "MsysObject", "[Name]='日報(' & Year(Now) - 1 & '年)' And [Type]=1") = 0 Then ←エラー
ACCC.Execute CpySQL
ACCC.Execute DelSQL
End If
End If
' オブジェクト開放
ACCC.Close
Set ACCR = Nothing
Set ACC = Nothing
End Sub
宜しくお願いします。
No.2ベストアンサー
- 回答日時:
#1です。
検索してみると、下記URLのページの下の方に、
「テーブルの存在をチェック」のコードが載っております。
http://tuka.s12.xrea.com/index.xcg?p=ADO#p15
やっている事は、ADOでテーブルのリストを取得して、引数の文字列と比較して、存在有無を戻していますので、#1の回答の応用編となります。
ご自分でアレンジするのが面倒なら、こちらで如何でしょうか。
回答有難う御座います。
参照した所、ファンクション内に記載されていない引数が有り、不明点がいくつか有りますが、勉強になりました。
色々と検証して見ます。
有難う御座いました。
No.3
- 回答日時:
ExcelからオートメーションでAccessを操作する場合です。
DcountはMDBファイルそのものをAccessで開いていないと使えません。
MsysObjects(複数形に)
『日報』というひな形テーブルはあるのですよね。
mitarashi さんが二番目に紹介されたリンク先、ナイスだと思います。
下の方だけではなく全部目を通すのをお勧め。
以下はご参考までに。
Sub test()
'Microsoft Access xx.xx Object Library に参照設定
Dim ACC As New Access.Application
ACC.OpenCurrentDatabase "D:\日誌DB", False '←Trueの場合は開けなかった場合にエラー処理要、
'True にしてエラー処理も入れた方が確実
If ACC.DCount("*", "MsysObjects", "[Name] = '日報(" & Year(Now) - 1 & "年)'" & " And [Type]=1") = 0 Then
ACC.DoCmd.CopyObject "日報(" & Year(Now) - 1 & "年", acTable, "日報"
ACC.CurrentDb.TableDefs.Refresh
ACC.CurrentDb Execute("delete * from 日報(" & Year(Now) - 1 & "年") '念のためのレコード削除?なの
End If
ACC.CloseCurrentDatabase '開いたAccessが無くなっているのをタスクマネージャで確認を
End Sub
※なお全角半角に限らず『()』カッコはトラブルの元になりかねないので
日報_yyyy年 などにしておいた方が良いと思います。
http://support.microsoft.com/kb/826763/ja
回答有難う御座います。
DBを開いて検証した所、別な所でエラーになってしまいました。
色々と検証して見ます。
有難う御座いました。
No.1
- 回答日時:
こちらでADOでテーブルのリストを取得する方法を回答しておりますが、これを応用して所定のテーブルの有無を判定してはいかがでしょうか。
ご参考まで。http://okwave.jp/qa/q7072249.html
この回答への補足
参考資料有難う御座います。
しかし、そこまでの応用するのは困難に思えます。
テーブルのリストの取得以外の方法で、検索する事は可能ですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
2つのテーブルに共通するレコ...
-
最新日のデータのみ抽出するク...
-
Accessでリストの並び順を変更...
-
access vbaにてテンポラリーテ...
-
ACCESS テーブルを見比...
-
ACCESSユニオンクエリから新テ...
-
アクセス 部分一致の抽出
-
Accessのテーブルで、リンク?...
-
Accessのリンクされたテーブル...
-
Acccessで2つのテーブルから1...
-
テーブルに表示されているもの...
-
ACCESSでABC判定をしたい
-
html、テーブル内にテーブル。...
-
ACCESSでリンクテーブルのデー...
-
Access 2000、ユニオンクエリー...
-
外部MDBのリンクテーブルの...
-
ACCESS テーブルを見比...
-
クエリで同一テーブルの複数回...
-
ACCESS初心者 - 同一テーブルの...
-
access2000・・テーブルをデー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
2つのテーブルに共通するレコ...
-
最新日のデータのみ抽出するク...
-
Acccessで2つのテーブルから1...
-
テーブルに表示されているもの...
-
access vbaにてテンポラリーテ...
-
ACCESSユニオンクエリから新テ...
-
Accessのリンクされたテーブル...
-
Accessでリストの並び順を変更...
-
ACCESS テーブルを見比...
-
accessについて(超初心者です)
-
クエリで同一テーブルの複数回...
-
ACCESSでテーブルをコピーしよ...
-
アクセス 部分一致の抽出
-
accessのテーブルを閉じたとき...
-
AccessVBAで任意の複数リンクテ...
-
Accessのテーブルで、リンク?...
-
Microsoft Access 「Form」のボ...
-
アクセスVBA現在開いている全て...
-
access2000・・テーブルをデー...
-
クエリで編集できるようにした...
おすすめ情報