2016-01-29 54 views
1

嘗試從Excel工作表導入數據並追加到Access表中。它讀取第一個值並追加它,但出於某種原因,第二個值不會被解釋爲數據。從Excel中導入的數據未附加到Access中

我認爲這是data4變量的格式問題,或者它在qs行中被調用的方式。任何幫助?

Public Sub Import2(FileName As Variant) 
    Dim wb As Object, ws As Object 
    Dim xl As Object 
    Set xl = CreateObject("excel.Application") 
    Dim qs As String 

    Dim oConn As Object 
    Set oConn = CreateObject("adodb.connection") 
    oConn.ConnectionString = "Provider=microsoft.ACE.OLEDB.12.0; Data Source=C:\Users\Robert\desktop\testMAF.xlsm; Extended Properties=Excel 12.0 XML; hdr=no" & ";" 

    'Open workbook specified in previous procedure and import data from specified cells 
    Set wb = xl.Workbooks.Open(FileName) 
      Set ws = wb.worksheets("For Export") 
      data1 = ws.cells(2, 1) 
      Data2 = ws.cells(2, 2) 
      Data3 = ws.cells(2, 3) 
      Data4 = ws.cells(2, 4) 
      'Continues to ...Data62 = ws.cells(2 , 62) 


    'The following commented code works, entering a date into the Formdate field on the MAF table 
    'qs = "INSERT INTO MAF (FormDate) VALUES (#" & data1 & "#)" 

    'However, when I expanded it to include the second field (below)it will not enter the value into the table. 
    'The locals window shows qs=...Values(#1/4/2010#,Postflight) which is what I want to append 
    'but when qs is executed, I am prompted, "Enter Parameter Value for Postflight" 


    qs = "INSERT INTO MAF (FormDate,SN) VALUES (#" & data1 & "#," & Data4 & ")" 

    DoCmd.RunSQL (qs) 


    End Sub 
+1

不知道你的Access版本,但爲什麼不直接使用[TransferSpreadsheet方法(https://msdn.microsoft.com/en-us/library/office/ff844793.aspx )?否則,您需要將所有「數據」變量標註爲Access中每個字段的確切數據類型。在Excel和Access之間獲取數據類型非常麻煩,必須謹慎對待,否則會發生爆炸。我發現'TransferSpreadsheet'更容易,即使我必須首先格式化excel列(我的意思是通過代碼)。 –

回答

1

之前和文本價值「飛行後」之後添加引號(這是包含在Data4變量的值)...

qs = "INSERT INTO MAF (FormDate,SN) VALUES (#" & data1 & "#,'" & Data4 & "')" 
                  ^   ^

可以使故障排除更容易如果您使用變量來保存INSERT聲明...

Dim strInsert As String 
strInsert = "INSERT INTO MAF (FormDate,SN) VALUES (#" & data1 & "#,'" & Data4 & "')" 
Debug.Print strInsert '<- view this in Immediate window; Ctrl+g will take you there 
CurrentDb.Execute strInsert, dbFailOnError 

但是,如果切換到INSERT的參數查詢,或者如果使用DAO.Recordset.AddNew將該行添加到MAF表中,報價問題會少一些。

這裏是一個Recordset例子(未經測試)...

Dim db As DAO.Database 
Dim rs As DAO.Recordset 
Set db = CurrentDb 
Set rs = db.OpenRecordset("MAF", dbAppendOnly) 
With rs 
    .AddNew 
    !FormatDate.Value = data1 
    !SN.Value = Data4 
    .Update 
    .Close 
End With 
+0

謝謝,它修復了它。我的下一個項目是爲了這個確切的原因瞭解記錄集。我一次只需要一小步就能搞定這些東西! –

+0

不客氣。我添加了一個簡短的記錄集示例......您不需要爲日期/時間值的字符串值或'#'分隔符引號。 – HansUp

+0

另外,如果您可以像Scott建議的那樣使用'TransferSpreadsheet',則您將需要更少的代碼來導入Excel數據。 – HansUp