0
'Create the recordset
Set dbRecordset = New ADODB.Recordset
dbRecordset.CursorLocation = adUseServer
dbRecordset.Open Source:="Table1", _
ActiveConnection:=dbConnection, _
CursorType:=adOpenDynamic, _
LockType:=adLockOptimistic, _
Options:=adCmdTable

'dbRecordset.AddNew


dbRecordset(Cells(2, 3).Value) = Cells(1, 1).Value

dbRecordset.Update

'Close the connections.
dbRecordset.Close
dbConnection.Close

Excelからのアクセスにデータを保存する機能を備えたアプリケーションを作成しようとしています(アクセスを使用したことはありません)。それらを接続し、値をデータベースに送信することができました。私が抱えている問題は、上記のコードにあると思います。dbRecordset(Cells(2, 3) は、値が行/レコード 2 フィールド 3 に移動する必要があるように見えますが、(2,3) に書き込みます。(1,1) に書き込もうとすると、エラーが発生します。必要なデータを移動する for each ループを記述できると思いますが、どこに移動するのかわかりません。

これをすべて回避できるのは、アクセスが Excel から組み込まれている DoCmd.TransferSpreadsheet メソッドをトリガーできる場合です。(sql, shell?) のようなものを書くための構文がわかりません。ループよりもはるかに高速になるため、doCmdコマンドを書く場所の正しい方向を教えていただければ幸いです。

4

1 に答える 1

0

これを少しいじります。Excel から実行できます。

Sub LoadSheet()
Dim accappl As Access.Application
Dim strpathdb As String
Dim strpathxls As String
Dim myrange As String, myrow1 As String, myrow2 As String

myrow1 = Range("a1").End(xlDown).End(xlDown).Row
myrow2 = Range("a1").End(xlDown).End(xlDown).End(xlDown).Row

myrange = ActiveSheet.Name & "!A" & myrow1 & ":H" & myrow2

'path to the database
strpathdb = "X:\cre\dep\STRAT_PLAN\StratPlan.mdb"
'path to the upload file
strpathxls = ActiveWorkbook.FullName
Set accappl = New Access.Application

accappl.OpenCurrentDatabase strpathdb

accappl.DoCmd.TransferSpreadsheet transfertype:=acImport, _
            tablename:="Tbl_Growth_Metric", _
            Filename:=strpathxls, Hasfieldnames:=True, _
            Range:=myrange, SpreadsheetType:=5
            'The Spreadsheet type = 5 specifies an Excel 5.0/7.0 file
            'format

MsgBox "All records are loaded"

accappl.Quit

End Sub
于 2013-06-17T19:50:41.797 に答える