2017-09-22 68 views
2

訪問鏈接的表所以我現在有這樣的代碼創建多個與VBA

Public Sub DoTrans() 

    Set cn = CreateObject("ADODB.Connection") 

    dbPath = Application.ActiveWorkbook.Path & "\db1.accdb" 
    dbWb = Application.ActiveWorkbook.FullName 
    dbWs = Application.ActiveSheet.Name 

    scn = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & dbPath 
    dsh = "[" & Application.ActiveSheet.Name & "$]" & "namedrange1" 

    cn.Open scn 
    ssql = "INSERT INTO Table1 ([fdName], [fdOne], [fdTwo]) " 
    ssql = ssql & "SELECT * FROM [Excel 8.0;HDR=YES;DATABASE=" & dbWb & "]." & dsh 

    cn.Execute ssql 

End Sub 

但這插入到現有Access表。我希望能夠修改這個來創建鏈接表,基於我在Excel中命名的範圍列表,以便所有命名範圍都將轉換爲Access中的表格。格式化不是問題,因爲我知道所命名範圍的格式可以在Access中用作表格。

有沒有辦法輕鬆做到這一點?

+0

您是否嘗試過TransferSpreadsheet方法? – June7

回答

2

INSERT INTO追加到現有的表,SELECT .... INTO創建新的。

如果你想重寫查詢到SELECT INTO,這將是如此簡單:

ssql = "SELECT * INTO Table1 " 
ssql = ssql & "FROM [Excel 8.0;HDR=YES;DATABASE=" & dbWb & "]." & dsh 

注意,如果你想覆蓋它,您首先需要刪除表。

你的問題有幾個子問題。我可以在ADO中的特定列上創建鏈接,但是您沒有顯示出嘗試,也沒有分享足夠的信息來編寫適用的答案。

2

樣品闡述的TransferSpreadsheet方法:

Dim sNT as String, sWB as String, sRN as String
sNT = "Table1"
sWB = "C:\MyWorkBook.xls"
sRN = "namedrange1"
DoCmd.TransferSpreadSheet acLink, , sNT, sWB, True, sRN

這已在MS-接入的模塊,在運行。

+0

好的貢獻,但是試着用你能夠從這個例子中推導出來的所有空白來填充空格(例如'sNT =「Table1」',因爲它在示例中是'Table1'。另外請注意,你可以使用' Access.Application'對象(例如'Dim accApp As New Access.Application
accApp.OpenCurrentDb dbPath
accApp.DoCmd.TransferSpreadSheet')。它需要引用Microsoft Access xx.0對象庫。 –

+1

感謝您的意見,編輯帖子!我的確忘記了accApp技巧;-) – JonRo