代码之家  ›  专栏  ›  技术社区  ›  Austin

从Excel VBA导出数据以访问

  •  0
  • Austin  · 技术社区  · 6 年前

    我是access的新手,很难理解如何将access表/列/行格式与excel在VBA中导出相关联。

    我创建了一个名为 数据 和三列 食物、饮料、颜色

    Access Table

    我想导出这些单元格范围,以便从excel电子表格中访问:

    Foodrng = Workbooks(xlFile).Sheets("ToBeExported").Range("D6")
    Drinksrng = Workbooks(xlFile).Sheets("ToBeExported").Range("E6")
    Colorrng= Workbooks(xlFile).Sheets("ToBeExported").Range("B12:B21")
    

    网上的所有内容都说我应该使用这个,因为我的版本:

    strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;"
    

    我想使用 INSERT TO 格式化以写入我的数据库,因为我将对数据库列进行大量扩展,我觉得这是跟踪哪一列在哪里的最简单方法。

    strSql = "INSERT INTO Data (Food, Drinks, Color) VALUES (Foodrng, Drinksrng,Colorrng)"
    

    执行时,我总是遇到语法错误:

    Set rs = cn.Execute(strSql)
    

    使用上述方法导出到Access数据库的正确方法是什么?任何/所有信息都将非常有用,因为我是全新的访问权限

    我的完整代码:

        Foodrng = Workbooks(xlFile).Sheets("ToBeExported").Range("D6")
        Drinksrng = Workbooks(xlFile).Sheets("ToBeExported").Range("E6")
        Colorrng= Workbooks(xlFile).Sheets("ToBeExported").Range("B12:B21")
    
        Set cn = CreateObject("ADODB.Connection")
        strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source= C:\Users\User1\MyDBase.accdb"
        cn.Open strConnection
    
       strSql = "INSERT INTO Data (Food, Drinks, Color) VALUES (Foodrng, Drinksrng,Colorrng)"
    
        Set rs = cn.Execute(strSql)
        'MsgBox rs.Fields(0) & " rows in MyTable"
        rs.Close
        Set rs = Nothing
        cn.Close
        Set cn = Nothing
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Erik A    6 年前

    使用查询插入时,需要使用参数传递值。我强烈建议使用记录集而不是插入查询。

    普通插入查询一次只能插入一行。您需要调整代码,以便一次插入一行。您可以使用记录集,也可以对每一行执行查询。

    Foodrng = Workbooks(xlFile).Sheets("ToBeExported").Range("D6") 'Adjust ranges to select single cells
    Drinksrng = Workbooks(xlFile).Sheets("ToBeExported").Range("E6")
    Colorrng= Workbooks(xlFile).Sheets("ToBeExported").Range("B12:B21")
    
    Set cn = CreateObject("ADODB.Connection")
    strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Data Source= C:\Users\User1\MyDBase.accdb"
    cn.Open strConnection
    
    strSql = "INSERT INTO [Data] ([Food], [Drinks], [Color]) VALUES (?, ?, ?)"
    Dim cmd As ADODB.Command
    Set cmd = New ADODB.Command
    With cmd
        Set .ActiveConnection = cn
        .CommandText = strSql
        .Parameters.Append .CreateParameter(, adVarWChar, adParamInput, , foodRng) 'adVarWChar for text 
        .Parameters.Append .CreateParameter(, adInteger, adParamInput, , Drinksrng) 'adInteger for whole numbers (long or integer)
        .Parameters.Append .CreateParameter(, adInteger, adParamInput, , Colorrng)
        .Execute
    End With
    cn.Close
    
        2
  •  0
  •   Piotr Rodak    6 年前

    也许还有另一种或两种方法值得考虑。

    第一种方法是在Access中将Excel电子表格设置为链接表-也许可以使用VBA完成。这将节省您复制数据的需求。您还可以设置目标工作表并使用insert。。直接从ADODB中选择,将数据从Access插入Excel。

    第二,如果您的需求允许,则完全避免访问。Excel在一定程度上可以作为数据库使用,并支持SQL查询。 https://selectcompare.com/blogs/news/write-select-statements-for-excel-spreadsheets