ADOを使用してExcelで作成したデータをACCESS97で作成したmdbファイルに書き込む処理を行いたいと思います。
書籍を見ながらコードを記述しているのですが、1,2,の項目については問題なく処理ができるのですが、最後のmdbファイルへの書き込み処理がどうしてもうまくいきません。
主に出力されるエラーは「現在のプロバイダはIndex機能に必要なインターフェイスをサポートしていません。」というものです。いろいろ試行錯誤したのですが解決できませんでした。
やはりACCESS97で作成したmdbファイルだからダメなのでしょうか?
原因と対処方法を教えていただければ幸いです。よろしくお願いします。以下はmdbファイルへの書き込みのサンプルコードです。
Dim myFile As String
Dim myTbl As String
Dim myRng As Range
Dim myCon As New ADODB.Connection
Dim myRS As New ADODB.Recordset
Dim i As Integer
myFile = ThisWorkbook.Path & "\sampleDB.mdb"
myTbl = "社員"
Set myRng = ThisWorkbook.Worksheets(1).Range("A1").CurrentRegion
With myCon
.Provider = "Microsoft.Jet.OLEDB.4.0"
'Access(Jet)用のOLE DBプロバイダを使用
.Open myFile
End With
myRS.Open myTbl, myCon, adOpenStatic, adLockPessimistic, adCmdTableDirect
myRS.Index = "社員ID"
For i = 2 To myRng.Rows.Count
myRS.Seek myRng(i, 1).Value
If myRS.EOF Then myRS.AddNew
For j = 1 To myRng.Columns.Count
myRS.Fields(myRng(1, j).Value).Value = myRng(i, j).Value
Next
Next
myRS.Update
myRS.Close
Set myRS = Nothing
myCon.Close
Set myCon = Nothing
No.3ベストアンサー
- 回答日時:
全く、うろ覚えのまま書きなぐったものでバグ含みの可能性大です。
しかし、質問者のコードを整理する上では役に立つかも知れません。
少し、風通しがよくなったと思います。
Private Sub CommandButton2_Click()
Dim I As Integer
Dim J As Integer
Dim M As Integer
Dim N As Integer
Dim myRng As Range
Dim dbsCurrent As DAO.Database
Dim rstEmployee As DAO.Recordset
Const conMDB = ThisWorkbook.Path & "\sampleDB.mdb"
Const conTABLE = "社員"
Const conINDEX = "社員ID"
Set myRng = ThisWorkbook.Worksheets(1).Range("A1").CurrentRegion
Set dbsCurrent = DBEngine.Workspaces(0).OpenDatabase(conMDB)
Set rstEmployee = dbsCurrent.OpenRecordset(conTABLE)
With rstEmployee
.Index = conINDEX
M = myRng.Rows.Count
For I = 2 To M
.Seek myRng(I, 1).Value
If .NoMatch Then
.AddNew
N = myRng.Columns.Count - 1
For J = 0 To N
.Fields(J).Value = myRng(I, J).Value
Next J
.Update
End If
Next I
.Close
End With
dbsCurrent.Close
End Sub
※未検証ですので、あくまでも参考程度に!
No.4
- 回答日時:
s_husky です。
早速のバグ修正です。
For J = 0 To N
.Fields(J).Value = myRng(I, J + 1).Value
Next J
No.2
- 回答日時:
Microsoft.Jet.OLEDB.4.0プロバイダでしたら、
通常はJet3.5(Access97)形式のMDBファイルに問題なく書き込めます。
開発環境やそのテーブルがリンクテーブルなのか不明ですが、
http://support.microsoft.com/default.aspx?scid=k …
>やはりACCESS97で作成したmdbファイルだからダメなのでしょうか?
http://www.accessclub.jp/bbs6/0006/das1276.html
などを参考にしてみてください。
'個人的には、Seekメソッドをお使いならば、DAOをお薦めします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【VBA】複数CSVの特定範囲を1つ...
-
HTMLまたはJavaScriptでフ...
-
0バイトのテキストファイル
-
【Excel VBA】取り込んだファイ...
-
エディットボックスの内容をテ...
-
リソースファイルを認識してく...
-
開いているXLSファイルが読み取...
-
ディレクトリのサイズの取得
-
2GB以上のファイルを扱う方法
-
インタープリンタとファイルコ...
-
C# ファイルサイズの取得(ファ...
-
accessでクエリをExcelにエクス...
-
CSVファイルの時刻の形式について
-
Excel VBAが徐々に遅くなる
-
ATTファイルってどうやって開け...
-
ストリームについて。
-
ハングル語のテキスト変換で困...
-
バイナリファイルの区別
-
EXCEL VBAでプリントイメージフ...
-
COBOL、項目末尾に空白がある場...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【Excel VBA】取り込んだファイ...
-
0バイトのテキストファイル
-
VBAで、JPG写真の撮影日時を読...
-
HTMLテキストリンクでExcelファ...
-
Eclipseで検索ができなくなった
-
【VBA】複数CSVの特定範囲を1つ...
-
2GB以上のファイルを扱う方法
-
C++によるファイル送受信プログ...
-
VB6.0のメモリリークについて
-
vbaの構文の修正相談(xmlファ...
-
サイトマップにサブドメインを...
-
BASP21のファイルアップロード...
-
ディレクトリのサイズの取得
-
msgget()で指定するkey値について
-
ファイル更新日取得
-
main関数のコマンドライン引数...
-
<input type="file" で初期値...
-
C++.NET 2003 「空のドキュメ...
-
RPGでメッセージファイル利用
-
Indy FTP サーバー上のファイル...
おすすめ情報