2017-09-08 5 views
0

私はこのフォーラムを初めて利用しています。私は参照用に使用しているコードを添付します。これはいつも私のために働いています。Excel VBAでレコードをAccessテーブルに転送する

ExcelからAccessテーブルにデータを転送するのにExcel vbaを使用しています。何らかの理由で、コードが "rs"まで完全に実行されているように見えますが、値の追加をスキップしてrs.Closeに直接行きます。私には、私には奇妙なエラーメッセージもありません。コードのサンプルが含まれています。

誰かがいくつかの提案をいただければ、私は大いに感謝しています!

Dim db As Database, rs As Recordset, r As Long 

'ESTABLISH DATABASE AND TABLE LOCATION - PRODUCTION 
'Prod environment location 
'Set db = OpenDatabase("C:\!PITF Docs\Forecasting and Planning\Collection\PITF_Collection.accdb") 
' open the database 
Set db = OpenDatabase("C:\!PITF Docs\Forecasting and Planning\Collection\PITF_Collection.accdb") 
Set rs = db.OpenRecordset("Upload_InternalLabor", dbOpenTable) 

' get all records in a table 
r = 2 ' the start row in the worksheet 
Do While Abs(Range("HZ" & r)) > 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("Class") = Range("DO" & r).Value 
     .Fields("New_Hire") = Range("DP" & r).Value 
     .Fields("Name") = Range("DQ" & r).Value 
     .Fields("Role") = Range("DR" & r).Value 
     .Fields("Expense_Driver") = Range("DS" & r).Value 
     .Fields("Comments") = Range("DT" & r).Value 
     .Fields("Salary") = Range("DU" & r).Value 
     .Fields("Hire_Date") = Range("DV" & r).Value 
     .Fields("42741") = Range("DW" & r).Value 
     .Fields("42755") = Range("DX" & r).Value 
     .Fields("42769") = Range("DY" & r).Value 
     .Fields("42783") = Range("DZ" & r).Value 

     .Fields("Submitter") = Range("HW" & r).Value 
     .Fields("Timestamp") = Range("HX" & r).Value 
     .Fields("Total") = Range("HY" & r).Value 
     .Fields("Abs") = Range("HZ" & 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 
+0

ループがループしていないと思われます。 'With rs'(ブレークポイントをクリックしてF9を押します)にブレークポイントを投げて、プロシージャを実行して、そのラインでブレークするかどうかを確認できますか?そうでなければ、あなたのループ状態が異常終了しています。Abs(Range( "HZ2"))> 0' – JNevill

+0

DAOを使用していますか?次に、 'Dim db as DAO.Database'を' rs'と同じように指定します。また、 'dbOpenTable'の代わりに' dbOpenDynaset'を試してください –

+0

うーん...それは壊れるようには見えません...ただset rs = Nothingに続きます。 (私はF8を使ってそれを踏んだ)。どのように修正するための任意の提案?前にも触れましたが、私はこのコードをいくつかの他のワークシートに使用しましたが、問題は一度もありませんでした。ありがとうございます –

答えて

0

テーブルが同じ列の順序で設定されている場合は、文字通り1回限りコピーできます。

一時的なものではなく、Accessデータベースの場合は、External DataセクションでExcelファイルをリンクし、両方のテーブルにあるキーに基づいてUPDATEまたはAPPENDクエリを実行できます。

  1. あなたはただ、他のテーブルのように扱うことができExcelファイルをリンクしたら
  2. クリックOK

Link to the data source by creating a linked tableラジオボタンを選択し、ウィザード

  • File nameを選択します。

  • +0

    残念ながら、このファイルは実用的な文書になりますので、一度だけではありません。ありがとう、結構です。 –

    +0

    更新を確認してください。 –

    関連する問題