2012-02-01 26 views
1

INSERT INTOコマンドを使用して、Excel 2007ファイルからAccess 2007ファイルにデータを書き込もうとしています。データは、Tool_Selector.xlsm Excelファイルの "NewProj"ワークシートに含まれており、 "Tool_Database.mdb"ファイルに書き込む必要がありますが、残念ながら私はいくつかの異なるエラーを受け取りました..これは現在私が持っているものですINSERT INTOを使用してアクセスデータベースにデータを書き込む

私は、個々のセルの値を転送する必要が Insert Data from Excel into Access using VBA

Sub AddData() 
    Dim Cn As ADODB.Connection 
    Set Cn = New ADODB.Connection 

    Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Tools_Dev\_Tool_Selector\Tool_Selector.xlsm;Extended Properties=Excel 8.0;" _ 
     & "Persist Security Info=False" 

    Cn.Execute "INSERT INTO Project_Names IN 'D:\Tool_Database\Tool_Database.mdb' SELECT * FROM Worksheets("NewProj").Range("A2").Value" 

    Cn.Close 
    Set Cn = Nothing 
End Sub 
私はこのスレッドからコードを得ました。

ありがとうございました。

+0

私はこの Cn.Execute "INSERT INTO Project_Names IN 'とD:\ Tool_Database \ Tool_Database.mdb' SELECT * FROMワークシートことを知っている"。レンジ "値です( "NewProj)(" A2)" ですブレーク...どのように特定のセルまたは行のセルを選択できますか? – thebiglebowski11

+2

これが役立つかどうかを確認してください:http://stackoverflow.com/questions/5122582/run-access-query-from-excel-and-pass-paramerts-to-the-query/5122667#5122667 – Fionnuala

+0

いい人。 – thebiglebowski11

答えて

2

問題は、SQLステートメントでVBAコードを使用していることです。次の行は、コンパイルが、実行時に失敗します:あなたは、.Range、および.Valueのワークシート()のVBA関数を使用作るときは、SELECT文ではまだだから

Cn.Execute "INSERT INTO Project_Names IN 'D:\Tool_Database\Tool_Database.mdb' SELECT * FROM Worksheets("NewProj").Range("A2").Value" 

それが失敗しました。 IIRCでは、シートから特定の範囲を選択するためにSQL構文を使用できるはずです。そのための適切な構文は次のようになります。あなたが特定の範囲をしたい場合は

"SELECT * FROM [Sheet$]" 

あなたが試してみた:

"SELECT * FROM [Sheet$A1:C20]" 

この上のMicrosoftの記事がであります:あなたはより多くのを探しているならhttp://support.microsoft.com/kb/257819 ExcelでのADOの使用に関する情報Scripting Guysはまた、数年前にそれを理解するのに役立つまともな記事を書きました:http://technet.microsoft.com/en-us/library/ee692882.aspx

あなたの問題を解決するのに役立ちます。しかし、私はあなたに警告の一言を残します。私は最初にこのコードを使用していたときに既に開いているExcelスプレッドシートを照会するときに、本当に奇妙な問題に遭遇したことを覚えています。すでに開いていたExcelスプレッドシートを照会していた場合、メモリがリークしてExcelにメモリが不足して使用できなくなるという問題が発生します。この問題を解決する唯一の方法は、Excelを完全に閉じることでした。また、ADO参照が適切に閉じられているかどうかは問題ではなかった。

実際には、私はそれをダブルチェックして、ここではバグに関する記事:http://support.microsoft.com/default.aspx?scid=kb;en-us;319998&Product=xlwです。

0

それは私のソリューションは、接続文字列でプロバイダを変更した2007年

へのOffice 2003からのアップグレード時に、私がかつて持っていた問題に似て聞こえます。あなたは近代的なオフィスのバージョンを使っているので、私はそれがあるべきだと思う:

Provider=Microsoft.Ace.OLEDB.12.0; 

あなたは同様にその拡張プロパティに見たいと思うかもしれません。私はExcel 8.0がExcel '97ファイルであることを知っています。 Excel 2010が14.0

関連する問題