使用VBA将Access中的特定数据复制到Excel中的特定字段

使用VBA将Access中的特定数据复制到Excel中的特定字段,vba,excel,ms-access,Vba,Excel,Ms Access,我工作的人要求我改变他们现有的订单系统,因为它很旧,他们想更新。 因此,我按照他们的要求将表格移动到Excel,这样它就不会出现在订单上,但他们也需要它,这样当他们单击Excel表格上的“交易账户”按钮时,它会在Access中打开一个查询(全部完成),要求他们输入账户信息(公司名称)。当这是做了,它会带来所有的帐户信息,让他们看到,现在这是我卡住了。他们希望我能够将出现的信息复制到Excel文档中的交易账户字段中,这样他们就不必花时间手工输入,而我目前不知道如何做到这一点,因为我在这里没有使用V

我工作的人要求我改变他们现有的订单系统,因为它很旧,他们想更新。 因此,我按照他们的要求将表格移动到Excel,这样它就不会出现在订单上,但他们也需要它,这样当他们单击Excel表格上的“交易账户”按钮时,它会在Access中打开一个查询(全部完成),要求他们输入账户信息(公司名称)。当这是做了,它会带来所有的帐户信息,让他们看到,现在这是我卡住了。他们希望我能够将出现的信息复制到Excel文档中的交易账户字段中,这样他们就不必花时间手工输入,而我目前不知道如何做到这一点,因为我在这里没有使用VBA的经验。(可能听起来很傻,但我正在努力学习)


如果能更好地解释的话,我还可以提供图像。

可能有很多方法可以做到这一点。这里有一个

我正在使用Northwind数据库

在表1中使用以下向量:

10248
10249
10250
10251
10252
在Excel中运行以下脚本,结果将复制到Sheet2中。哦,别忘了设置对Microsoft ADO 2.8的引用

'Set db = ws.OpenDatabase("C:\your_path\Northwind.mdb")

Sub DAOParamTest()
Dim cn As Object
Dim rs As Object
Dim strFile As String
Dim strCon As String
Dim strSQL As String
Dim s As String
Dim i As Integer, j As Integer
Dim rCell As Range
Dim rRng As Range
Dim sht As Worksheet
Dim LastRow As Long
Dim MyCell As Range


''Access database

strFile = "C:\your_path\Northwind.mdb"

strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile & ";"

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

cn.Open strCon

'Rough idea
Set sht = ThisWorkbook.Worksheets("Sheet1")
Worksheets("Sheet1").Select
LastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row
Set rRng = Sheet1.Range("A1:A" & LastRow)

For Each MyCell In rRng
intID = MyCell

    strSQL = "SELECT * " _
           & "FROM [Order Details] " _
           & "WHERE OrderID = " & intID

    rs.Open strSQL, cn
        Worksheets("Sheet2").Select
        LastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row + 1
        Worksheets("Sheet2").Cells(LastRow, 1).CopyFromRecordset rs
    rs.Close

Next MyCell

''Tidy up
Set rs = Nothing
cn.Close
Set cn = Nothing

End Sub

这是另一个让你考虑的解决方案。


我用不同的解决方案回答了你的另一个问题。这里有另一种方法来做你想做的事情,使用查询。这很好,因为您可以像过滤器一样控制查询,并从该对象导入结果

' Set a reference to DAO 6.0

    Sub GetQuery()
        Dim dbs As DAO.Database
        Dim rst As DAO.Recordset
        Dim i As Long
        Dim wsh As Worksheet
        Set dbs = DBEngine.OpenDatabase("C:\your_path\Northwind.mdb")
        Set rst = dbs.OpenRecordset("Invoices")
        Set wsh = Worksheets("Sheet3")
        For i = 0 To rst.Fields.Count - 1
            wsh.Cells(1, i + 1).Value = rst.Fields(i).Name
        Next
        wsh.Range("A1").Resize(ColumnSize:=rst.Fields.Count).Font.Bold = True
        wsh.Range("A2").CopyFromRecordset rst
        rst.Close
        Set rst = Nothing
        dbs.Close
        Set dbs = Nothing
    End Sub

在Access和Excel之间来回移动听起来不是个好主意。Execl擅长显示查询、结果、创建漂亮的数据透视表和图表。但如果您想编辑数据,请坚持访问。你不能保持访问,使用表单和查询吗?我在这里说的是,如果进行全面的重新设计,你可能会过得更好。重新思考整个问题,规划整个过程,从头开始设计解决方案。你会从中学到更多,它会更快更容易维护。也许我可以试着在老板从西班牙回来后和他谈谈,看看他说什么。如果他这样做了,那就好了,因为我完全有能力设置访问权限。谢谢你的帮助(我不知道为什么人们会反对我:()我发现另一个问题是,我为之做这件事的人在访问方面没有太多经验(尽管我可以轻松设置工具提示)所以他们可能会对搬走这么重要的东西有点怀疑?如果你已经有了某种计划,你和老板相处的机会会更好。仔细想想,收集一些关于过程和使用的问题,也许会做出一个估计。非常感谢你的帮助!所以我采用了这种方法,但也有一些原因n我收到错误“未定义用户定义的类型”我不太确定我做错了什么。你是否设置了对DAO的引用?Alt+F11>工具>引用>Microsoft DAO 3.6对象库现在我有一个新问题,当我运行它时,我被告知参数太少,这是预期的,问题是查询在那里,以便用户可以搜索一家公司,例如“布里斯托尔机场”。我不太确定这意味着什么,因为我的标准是“输入公司名称”。我确实修复了其中一些错误,但是的,错误仍然存在。我可以发送一个截图