2017-06-19 20 views
1

私はAccess 2013とExcel 2013を使用しています。参考文献に関しては、Microsoft Office 15.0 Accessデータベースエンジンオブジェクトライブラリを使用しています。VBAのINSERT INTOクエリ

私はVBAからINSERT INTOクエリを実行しようとしています。ワークシートには、このコードを使用して配列に変換する部品番号のリストがあります。

Function partArray() 
    Dim partList() As Variant 
    Dim partArr(10000) As Variant 
    Dim x As Long 

    partList = ActiveWorkbook.Worksheets("Parts").ListObjects("Parts").ListColumns("Part Number").DataBodyRange.Value 

    For x = LBound(partList) To UBound(partList) 
     partArr(x) = partList(x, 1) 
    Next x 

    partArray = partArr 

End Function 

私はINSERT INTOクエリを使用してこれらの部品番号をアクセス時にテーブルに入力しようとしています。どのように私はこれを行うことができます任意のアイデア?

+0

Accessに移動しようとしているExcelの行数はいくつですか? – Brad

+0

配列で直接行うことはできません。手動で入力する場合と同じように、ループを使用してINSERT文字列を作成する必要があります。 – SandPiper

+0

約1000行。したがって、aStringを作成し、配列の各エントリをループします。各ループで、aString&エントリ& "、"。それは働くだろうか?または、すべてのエントリを文字列に変換する必要がありますか? –

答えて

0

ExcelとAccessを接続するには、ADOを使用する必要があります。これは、VBEのツール/リファレンスのリファレンスになります。 ADOを使用すると、SQL文を実行できます。 Excelでテーブルを元のテーブルとして定義し、そのテーブルからデータを読み取り、レコードセットに格納して、そのレコードセットをAccessテーブルに書き込むことができます。インターネットにはたくさんの例があります。あなたはこれで始めることができます:https://www.exceltip.com/import-and-export-in-vba/export-data-from-excel-to-access-ado-using-vba-in-microsoft-excel.html

0

Whoa!あなたのアプローチは完全に間違っていると思います。このようなことを試してみてください。

Sub ADOFromExcelToAccess() 
' exports data from the active worksheet to a table in an Access database 
' this procedure must be edited before use 
Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long 
    ' connect to the Access database 
    Set cn = New ADODB.Connection 
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _ 
     "Data Source=C:\FolderName\DataBaseName.mdb;" 
    ' open a recordset 
    Set rs = New ADODB.Recordset 
    rs.Open "TableName", cn, adOpenKeyset, adLockOptimistic, adCmdTable 
    ' all records in a table 
    r = 3 ' the start row in the worksheet 
    Do While Len(Range("A" & r).Formula) > 0 
    ' repeat until first empty cell in column A 
     With rs 
      .AddNew ' create a new record 
      ' add values to each field in the record 
      .Fields("FieldName1") = Range("A" & r).Value 
      .Fields("FieldName2") = Range("B" & r).Value 
      .Fields("FieldNameN") = Range("C" & r).Value 
      ' add more fields if necessary... 
      .Update ' stores the new record 
     End With 
     r = r + 1 ' next row 
    Loop 
    rs.Close 
    Set rs = Nothing 
    cn.Close 
    Set cn = Nothing 
End Sub 

またはこれです。

Sub DAOFromExcelToAccess() 
' exports data from the active worksheet to a table in an Access database 
' this procedure must be edited before use 
Dim db As Database, rs As Recordset, r As Long 
    Set db = OpenDatabase("C:\FolderName\DataBaseName.mdb") 
    ' open the database 
    Set rs = db.OpenRecordset("TableName", dbOpenTable) 
    ' get all records in a table 
    r = 3 ' the start row in the worksheet 
    Do While Len(Range("A" & r).Formula) > 0 
    ' repeat until first empty cell in column A 
     With rs 
      .AddNew ' create a new record 
      ' add values to each field in the record 
      .Fields("FieldName1") = Range("A" & r).Value 
      .Fields("FieldName2") = Range("B" & r).Value 
      .Fields("FieldNameN") = Range("C" & r).Value 
      ' add more fields if necessary... 
      .Update ' stores the new record 
     End With 
     r = r + 1 ' next row 
    Loop 
    rs.Close 
    Set rs = Nothing 
    db.Close 
    Set db = Nothing 
End Sub 

もちろん、必要に応じてTransferSpreadsheetメソッドを使用することもできます。

Option Explicit 

Sub AccImport() 
    Dim acc As New Access.Application 
    acc.OpenCurrentDatabase "C:\Users\Public\Database1.accdb" 
    acc.DoCmd.TransferSpreadsheet _ 
      TransferType:=acImport, _ 
      SpreadSheetType:=acSpreadsheetTypeExcel12Xml, _ 
      TableName:="tblExcelImport", _ 
      Filename:=Application.ActiveWorkbook.FullName, _ 
      HasFieldNames:=True, _ 
      Range:="Folio_Data_original$A1:B10" 
    acc.CloseCurrentDatabase 
    acc.Quit 
    Set acc = Nothing 
End Sub