0

Excel スプレッドシートから毎月の更新を取得する必要がある Access データベースがあります。スプレッドシートには、データベース テーブルと一致しない意味のある列見出しがあります。さらに、データをマージするか追加するかを確認する必要があります。したがって、スプレッドシートからデータセットを取得し、ループしてデータの処理方法をコードに決定させたいと考えています。スプレッドシートの構造と正確に一致する Access で一時テーブルを作成し、これに DoCmd.TransferSpreadsheet acImport を入力し、自分の作業を行ってから削除することができます。

これは最も簡単な方法ですか、それとも次のようなことができますか:

strQuery = "SELECT * FROM [Excel 8.0;HDR=YES;DATABASE=" _
   & Chr(34) & fromFile & Chr(34) & "].[sheet1]"

Set rs = CurrentDb.OpenRecordset(strQuery)

このコードは次のエラーを生成します: 更新できません。データベースまたはオブジェクトは読み取り専用です

4

2 に答える 2

0

アクセスで新しいテーブルを作成し、最初にすべてのExcelデータをそのテーブルにコピーすると、すべてが正常かつ高速に機能するようになると思います

宜蘭

于 2013-08-15T20:54:30.187 に答える
0

DOA レコードセットではなく、ADO を使用する必要があると思います。ADO では、参照を追加する必要があります (遅延バインディングを使用しない場合)。ADO には .Edit メソッドがないなど、ADO のプロパティとメソッドの一部は DAO とは異なります。

Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H0001

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")

objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=C:\Scripts\Test.xls;" & _
        "Extended Properties=""Excel 8.0;HDR=Yes;"";" 

objRecordset.Open "Select * FROM [Sheet1$]", _
    objConnection, adOpenStatic, adLockOptimistic, adCmdText

Do Until objRecordset.EOF
    Wscript.Echo objRecordset.Fields.Item("Name"), _
        objRecordset.Fields.Item("Number")
    objRecordset.MoveNext
Loop

これは、より詳細な情報を入手できる MS の technet サイトから取得したものです: http://technet.microsoft.com/en-us/library/ee692882.aspx

于 2013-08-15T17:34:59.807 に答える