Excel 使用Access作为ODBC数据库
这就是我想做的: 我需要整合来自不同工作组的每周预测excel模板。我已经为他们创建了一个表格,用于填写他们所有的预测项目/差异,以进行计划/解释。 在这一点上,我在excel模板上有一个按钮,它将所有数据一行一行地放在表单旁边的常规统一表格中。 我想做的是,当所有内容都在统一excel表中之后,他们单击另一个按钮,并使用ODBC连接到我的access数据库,让它为我将数据附加到access中的表中?我以前听说过这样做,但我不知道怎么做 我首先在excel中尝试,转到“数据”选项卡下的“来自其他来源”,单击“来自Microsoft Query”,然后执行选择我的access数据库作为数据源的步骤,然后执行这些步骤,直到出现一个按钮,我单击该按钮时显示“在Microsoft Query中查看数据或编辑查询”但是,我不知道如何使用ODBC连接将excel工作表中的数据附加到access数据库 谁能帮我弄清楚怎么做?将有多个组从excel模板附加到此access数据库。如果我能做到这一点,访问将是我跟踪所有数据的一种简单方法 谢谢 使用ADO连接(参见connectionString.com)。这些步骤是:Excel 使用Access作为ODBC数据库,excel,ms-access,odbc,vba,Excel,Ms Access,Odbc,Vba,这就是我想做的: 我需要整合来自不同工作组的每周预测excel模板。我已经为他们创建了一个表格,用于填写他们所有的预测项目/差异,以进行计划/解释。 在这一点上,我在excel模板上有一个按钮,它将所有数据一行一行地放在表单旁边的常规统一表格中。 我想做的是,当所有内容都在统一excel表中之后,他们单击另一个按钮,并使用ODBC连接到我的access数据库,让它为我将数据附加到access中的表中?我以前听说过这样做,但我不知道怎么做 我首先在excel中尝试,转到“数据”选项卡下的“来自其他
cn.Open Constructing以下是我在其他人的帮助下回答上述问题的答案:
Sub ADOFromExcelToAccess()
' exports data from the active worksheet to a table in an Access database
' this procedure must be edited before use
Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long
' connect to the Access database
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _
"Data Source=Path to the database;"
' open a recordset
Set rs = New ADODB.Recordset
rs.Open "Forecast_Items", cn, adOpenKeyset, adLockOptimistic, adCmdTable
' all records in a table
r = 3 ' the start row in the worksheet
Do While Len(Range("Q" & r).Formula) > 0
' repeat until first empty cell in column A
With rs
.AddNew ' create a new record
' add values to each field in the record
.Fields("UserName") = Range("O" & r).Value
.Fields("Forecast_Date") = Range("P" & r).Value
.Fields("Area") = Range("Q" & r).Value
.Fields("Description_Item") = Range("R" & r).Value
.Fields("Account") = Range("S" & r).Value
.Fields("RRDD") = Range("T" & r).Value
.Fields("CostCenter") = Range("U" & r).Value
.Fields("Fleet") = Range("V" & r).Value
.Fields("ForecastAmount") = Range("W" & r).Value
.Fields("PlanAmount") = Range("X" & r).Value
.Fields("VarianceForecast") = Range("Y" & r).Value
.Fields("Explanation") = Range("Z" & r).Value
' add more fields if necessary...
.Update ' stores the new record
End With
r = r + 1 ' next row
Loop
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
我拥有的另一个代码是,如果出现错误,则应该批处理全部或无。但是,当出现错误时,它仍然在编写成功通过的代码
Sub ADOFromExcelToAccess()
If MsgBox("This Button Will Submit all Data in the Table to the Right & Clear the Table! Are you sure?", vbYesNo) = vbNo Then Exit Sub
' exports data from the active worksheet to a table in an Access database
' this procedure must be edited before use
Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long
' connect to the Access database
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _
"Data Source=Filepath.mdb;"
' open a recordset
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open "Forecast_Items", cn, adOpenKeyset, adLockBatchOptimistic, adCmdTable
' all records in a table
r = 3 ' the start row in the worksheet
Do While Len(Range("Q" & r).Formula) > 0
' repeat until first empty cell in column A
With rs
.AddNew ' create a new record
' add values to each field in the record
.Fields("UserName") = Range("O" & r).Value
.Fields("Forecast_Date") = Range("P" & r).Value
.Fields("Area") = Range("Q" & r).Value
.Fields("Description_Item") = Range("R" & r).Value
.Fields("Account") = Range("S" & r).Value
.Fields("RRDD") = Range("T" & r).Value
.Fields("CostCenter") = Range("U" & r).Value
.Fields("Fleet") = Range("V" & r).Value
.Fields("ForecastAmount") = Range("W" & r).Value
.Fields("PlanAmount") = Range("X" & r).Value
.Fields("VarianceForecast") = Range("Y" & r).Value
.Fields("Explanation") = Range("Z" & r).Value
' add more fields if necessary...
End With
r = r + 1 ' next row
Loop
rs.UpdateBatch 'injects full table from excel into access at the same time, eliminating possible errors with inserting certain rows over others
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
MsgBox ("Data was Submitted Successfully!")
Exit Sub
End Sub
是否可以让用户将数据输入Access表单而不是Excel用户表单?@HansUp由于许多组无法访问相同的文件路径,因此分发Access数据库似乎比分发Excel文件更困难。这还可能使多人更容易将数据写入数据库。Curre我让他们复制并粘贴数据到链接的“列表”中在sharepoint上访问数据库,但这不是一个很好的方法。我喜欢这个想法,你能给我一个更具体的链接来查找这些信息吗?很多信息对我来说都是新的,我一直在浏览ConnectionString.com试图找到一些相关的东西。但我不知道什么是相关的,哈哈。我一直都是阅读“了解连接字符串”之类的内容,但之后会有什么好处呢?有很多选择。我在上面添加了一些代码。如果您需要更多帮助,这里有一个很有希望的示例:非常感谢!我找到了一种方法,我会在几分钟后将其粘贴到这里!您给了我这个想法,然后我继续研究!谢谢!现在我想知道如何在excel中创建一个可搜索的下拉框,在这个下拉框中我还可以使用某种数据验证。不过我还有一个问题。因为我的代码是逐行写入的,有没有办法确保在写入之前导入完整的表?例如,如果前两行数据很好,并且t写入它们,但它进入下一行,数据在某种程度上出现了问题,它没有写入,我们可以在写入之前检查完整的代码,这样我就不会只获取部分数据吗?是的。将记录集的LockType设置为adLockBatchOptmistic,删除For循环中的.Update行,然后执行rs.BatchUpdate af这是一个循环。