使用VBA在Access中创建多个链接表

时间:2017-09-22 15:04:54

标签: excel vba ms-access adodb linked-tables

所以我目前有这个代码

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中用作表。

有没有办法轻松做到这一点?

2 个答案:

答案 0 :(得分:2)

INSERT INTO附加到现有表格,SELECT .... INTO会创建新表格。

如果您想将该查询重写为SELECT INTO,那么就像这样简单:

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

请注意,如果要覆盖它,首先需要删除该表。

您的问题有几个问题。我可以在特定列的ADO中创建链接,但您没有展示尝试,也没有分享足够的信息来编写适用的答案。

答案 1 :(得分: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-access中的模块中运行。