我将来自一系列Excel VBA计算的数据存储为VBA代码中的变量。我想在代码的最后做的是将这些变量中的数据作为新记录传输到MS Access数据库中。
Access数据库已存在且已准备就绪。我是否必须将变量中的数据放入工作表的单元格中,然后才能将它们传输到Access?
以下是我尝试存储在数据库中的VBA代码中的变量示例(变量名对应于数据库列标题)
Dim customerName As String
Dim customerAge As Integer
Dim customerSpend As Double
customerName = "Tim"
customerAge = 26
customerSpend = 12876
到目前为止,这是我设法编写的代码,用于尝试传输数据,但我仍然坚持使用'范围'部分,因为它们是变量,而不是一系列细胞:
Dim strPath As String
Dim objAccess As Object
strPath = "C:\db1.accdb"
Set objAccess = CreateObject("Access.Application")
Call objAccess.OpenCurrentDatabase(strPath)
objAccess.Visible = True
Call DoCmd.TransferSpreadsheet(acImport, acSpreadsheetTypeExcel12, CustomerDetails, Range)
如何将存储在VBA代码中的变量中的数据传输到Access数据库中的相应列以创建新记录?
答案 0 :(得分:1)
目前,您将Access视为其MS Office 前端 GUI应用程序,而不是可以接收SQL调用的关系后端数据库。 DoCmd.TransferSpreadsheet
是一种Access应用程序方法,需要您不使用的已保存的Excel电子表格。
但是,您可以使用SQL追加查询将变量值传递到Access表中。而且不仅仅是Access,任何像VBA这样的应用层代码都可以连接到像Access这样的数据库,并使用SQL附加/更新/删除表数据。下面使用DAO(默认的Access数据库API)演示,使用行业最佳的查询参数化实践。
Sub RunSQL()
Dim objAccess As Object
Dim db As Object, qdef As Object
Dim strPath As String, strSQL As String
Dim customerName As String, customerAge As Integer, customerSpend As Double
customerName = "Tim": customerAge = 26: customerSpend = 12876
strPath = "C:\db1.accdb"
' OPEN ACCESS APPLICATION
Set objAccess = CreateObject("Access.Application")
objAccess.OpenCurrentDatabase strPath
' OPEN INTERNAL DATABASE
Set db = objAccess.CurrentDb
' PREPARE STATEMENT
strSQL = "PARAMETERS [nameparam] TEXT(255), [ageparam] INTEGER, [spendparam] DOUBLE;" _
& " INSERT INTO CustomerDetails ([name], [age], [spend]);"
' BUILD TEMP QUERYDEF
Set qdef = db.CreateQueryDef("", strSQL)
' BIND PARAMS TO VARIABLES
qdef!nameparam = customerName
qdef!ageparam = customerAge
qdef!spendparam = customerSpend
' EXECUTE ACTION QUERY
qdef.Execute
Set qdef = Nothing
Set db = Nothing
Set objAccess = Nothing
End Sub