VBA excel导出访问

Posted

技术标签:

【中文标题】VBA excel导出访问【英文标题】:VBA excel export to access 【发布时间】:2018-05-22 16:06:08 【问题描述】:

您好,我正在尝试编写一个宏,该宏从 Excel 表单中获取用户输入并将其添加到访问表中。使用以下代码:

   Dim cnn As ADODB.Connection
   Dim rst As ADODB.Recordset
   Dim wsh As Excel.Application
   Set cnn = "db.accdb.connection"
   Set rst = New ADODB.Recordset
   rst.Open "table", cnn, adOpenKeyset, adLockOptimistic, adCmdTableDirect
   With rst
   .AddNew
   .Fields("column1").Value = textboxvar
   .Update
   End With

使用之前定义的 textboxvar。但它不起作用,我不知道为什么。

【问题讨论】:

这一行:Set cnn = "db.accdb.connection" 毫无意义。你那里有有效的代码,你是想隐藏私人信息(比如你的 accdb 文件的位置和密码),还是你真的想这样做? 正如@ErikvonAsmuth 提到的Set cnn = "db.accdb.connection" 在这种情况下基本上没有任何意义。您很可能希望将其更改为 Set cnn = CreateObject("ADODB.Connection")。为了将来参考,.Open 方法要求第二个输入是可变命令对象。 Won't work 意味着什么 - 错误消息、错误结果、没有任何反应? 【参考方案1】:

找了很久。该线程中投票最多的帖子已经回答了这个问题: Using Excel VBA to export data to MS Access table

只需更新它即可与 Access 2016 一起使用:

Public Sub UploadExcel()

Set cn = CreateObject("ADODB.Connection")
dbPath = 'type your database path in here

dbWb = Application.ActiveWorkbook.FullName
dbWs = Application.ActiveSheet.Name

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

ssql = "INSERT INTO TableName ([Field1], [Field2], [Field3]) "
ssql = ssql & "SELECT * FROM [Excel 8.0;HDR=YES;DATABASE=" & dbWb & "]." & dsh

cn.Execute ssql

End Sub

【讨论】:

【参考方案2】:

声明、设置、打开连接的示例:

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; DataSource='C:\path\databasename.accdb'"
rs.Open "SELECT * FROM MyTable", cn, adOpenKeyset, adLockOptimistic

【讨论】:

以上是关于VBA excel导出访问的主要内容,如果未能解决你的问题,请参考以下文章

如何用VBA将excel表导出成文本类型的文件?

将 Access VBA 记录集导出到 Excel 中的单行

VBA 将 Excel 范围导出到特定目录和文件名

通过vba将特定的excel范围导出为jpeg

使用 VBA 将数据从 Excel 导出到 Access

MS Access导出联合查询到Excel,VBA问题