みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ExcelのデータをAccessのテーブルへインポートできない

Access VBA超初心者です。
Excelのデータの任意の列のデータをAccessの既存テーブルの任意のフィールドへインポートしたいのですが
既存Excelシートの構成は例のようにデータベース形式でないため試行錯誤しています。

Excelシートの構成は1~2行は空行、3行目と4行目にフィールド名がはいっており
セルの結合は使われていません。
データは5行目から開始されています。

   <例>
列番号 |A列|B列|C列|D列|E列|
3行目 |     季節    |  |
  4行目 | 春 |夏 |秋 |冬 |  |
  5行目 |aa |bb |100 |200 |300 |


まず、以下の手順1と手順2を考えました。

----------------------------------------------------

◇目的
上記<例>のE列のデータを既存Accessテーブルにインポートしたい。

◇Accessの事前準備
フィールド名だけ指定し、レコードは空の状態の[a]テーブルを作成しました。

◆手順1
AccessからExcelをオブジェクトとして開き、[a]テーブルへ列単位でコピーする()

◆手順2
[a]テーブルから条件にあうレコードを別テーブル[b]のフィールドへインポートする
(SQL文)
----------------------------------------------------


まず、手順1のコードをネット検索を参考にして以下のようにしました。
最後に「入力しました」とメッセージが表示されるもののaテーブルにデータがインポートされません。
特にエラーメッセージも表示されません。
どなたか親切にアドバイス頂ける方がいらっしゃいましたらどうぞお願いします。m(__)m


----------------------------------------------------
Public Sub エクセルインポート()

Dim xlApp As Object, xlBook As Object, xlSheet As Object, Wcell As Object
Set xlApp = CreateObject("Excel.Application")

Set xlBook = xlApp.Workbooks.Open("¥Excelファイル保存場所パス\Excelファイル.xls")
Set xlSheet = xlBook.Worksheets("Excelシート名")
Set Wcell = xlSheet.Range("a1")


Dim intNo As Integer
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Set cn = CurrentProject.Connection
rs.Open "a", cn, adOpenKeyset, adLockOptimistic

xlApp.Application.Visible = True

intNo = 5
Do Until rs.EOF
rs!フィールド名1 = xlApp.Application.Cells(intNo, 1).Value
rs!フィールド名2 = xlApp.Application.Cells(intNo, 2).Value
rs!フィールド名3 = xlApp.Application.Cells(intNo, 3).Value
    ~
    rs!フィールド名21 = xlApp.Application.Cells(intNo, 21).Value

Loop

xlBook.Close
xlApp.Visible = False
Set xlBook = Nothing


rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

MsgBox "入力しました"

End Sub
----------------------------------------------------

投稿日時 - 2007-11-01 20:03:54

QNo.3481002

すぐに回答ほしいです

質問者が選んだベストアンサー

rsに対して addnew とか update してますか?

投稿日時 - 2007-11-01 20:47:48

補足

>rsに対して addnew とか update してますか?
あ、すみません。していませんでした。
どこに記述すればよいですか・・。

投稿日時 - 2007-11-01 20:53:30

お礼

ご回答ありがとうございました。
アドバイスのように下記内容にしましたら一応「読み込む」ことはできました。

「少数を丸めたために、データが切り捨てられました.」という実行時エラーが出てきましたので、明日じっくり再検討します。
おかげさまで少し前に進むことができました。
本当にありがとうございました。m(__)m

その後の経過も明日以降またご報告させて頂きます。


-------------------
Dim intNo As Integer
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Set cn = CurrentProject.Connection
rs.Open "a", cn, adOpenKeyset, adLockOptimistic

rs.AddNew
xlApp.Application.Visible = False

intNo = 5 'Excelデータの取得開始行番号
Do Until rs.EOF

rs.MoveFirst
rrs!フィールド名1 = xlApp.Application.Cells(intNo, 1).Value
rs!フィールド名2 = xlApp.Application.Cells(intNo, 2).Value
rs!フィールド名3 = xlApp.Application.Cells(intNo, 3).Value
    ~
    rs!フィールド名21 = xlApp.Application.Cells(intNo, 21).Value

rs.Update
rs.MoveNext
intNo = intNo + 1
Loop

投稿日時 - 2007-11-01 21:18:43

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問