Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 使用Access作为ODBC数据库_Excel_Ms Access_Odbc_Vba - Fatal编程技术网

Excel 使用Access作为ODBC数据库

Excel 使用Access作为ODBC数据库,excel,ms-access,odbc,vba,Excel,Ms Access,Odbc,Vba,这就是我想做的: 我需要整合来自不同工作组的每周预测excel模板。我已经为他们创建了一个表格,用于填写他们所有的预测项目/差异,以进行计划/解释。 在这一点上,我在excel模板上有一个按钮,它将所有数据一行一行地放在表单旁边的常规统一表格中。 我想做的是,当所有内容都在统一excel表中之后,他们单击另一个按钮,并使用ODBC连接到我的access数据库,让它为我将数据附加到access中的表中?我以前听说过这样做,但我不知道怎么做 我首先在excel中尝试,转到“数据”选项卡下的“来自其他

这就是我想做的: 我需要整合来自不同工作组的每周预测excel模板。我已经为他们创建了一个表格,用于填写他们所有的预测项目/差异,以进行计划/解释。 在这一点上,我在excel模板上有一个按钮,它将所有数据一行一行地放在表单旁边的常规统一表格中。 我想做的是,当所有内容都在统一excel表中之后,他们单击另一个按钮,并使用ODBC连接到我的access数据库,让它为我将数据附加到access中的表中?我以前听说过这样做,但我不知道怎么做

我首先在excel中尝试,转到“数据”选项卡下的“来自其他来源”,单击“来自Microsoft Query”,然后执行选择我的access数据库作为数据源的步骤,然后执行这些步骤,直到出现一个按钮,我单击该按钮时显示“在Microsoft Query中查看数据或编辑查询”但是,我不知道如何使用ODBC连接将excel工作表中的数据附加到access数据库

谁能帮我弄清楚怎么做?将有多个组从excel模板附加到此access数据库。如果我能做到这一点,访问将是我跟踪所有数据的一种简单方法

谢谢

使用ADO连接(参见connectionString.com)。这些步骤是:

  • 在项目中设置对Microsoft ActiveX Data Objects 6.1库(或任何版本)的引用

  • Dim cn作为ADODB.Connection

  • 打开连接(谷歌搜索会告诉你怎么做)

  • 将Excel工作表中的值加载到数组中

  • 循环遍历数组并将每条记录插入表中。例如:

  • 执行“插入到SomeTable值(“&array(i,1)&“,”&array(i,2)&

    以上只是一个指南,在语法上可能并不完全正确

    编辑:

    用字符串表示

    conString=“Provider=Microsoft.ACE.OLEDB.12.0;数据源=C:\myFolder\myAccessFile.accdb; 持久化安全信息=False;”

    Set cn=New ADODB.Connection
    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这是一个循环。