Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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数据库匹配?_Excel_Ms Access_Vba - Fatal编程技术网

如何将Excel中的数据与Access数据库匹配?

如何将Excel中的数据与Access数据库匹配?,excel,ms-access,vba,Excel,Ms Access,Vba,我正在使用Excel和Access 365进行记录 我有大约100000个账号的信息,对于Excel来说太多了,无法有效处理。我把它们放进了通道 在Excel中,我有一个大约10个帐号的列表。这个列表每天都在变化。如何将Access中的帐户信息输入Excel?如果我能够在Excel中保存所有内容,我将使用索引匹配,那么从Access中获取信息的等价物是什么?这可能需要VBA才能有效地完成 循环浏览帐号,并针对每个帐号查询Access数据库(使用ADO)并仅返回每个帐号所需的数据。这可能需要VBA

我正在使用Excel和Access 365进行记录

我有大约100000个账号的信息,对于Excel来说太多了,无法有效处理。我把它们放进了通道


在Excel中,我有一个大约10个帐号的列表。这个列表每天都在变化。如何将Access中的帐户信息输入Excel?如果我能够在Excel中保存所有内容,我将使用索引匹配,那么从Access中获取信息的等价物是什么?

这可能需要VBA才能有效地完成


循环浏览帐号,并针对每个帐号查询Access数据库(使用ADO)并仅返回每个帐号所需的数据。

这可能需要VBA有效地执行


循环浏览帐号,并针对每个帐号查询Access数据库(使用ADO),只返回每个帐号所需的数据。

我建议在Access中设置一个链接表,并运行SQL语句。比VBA中的循环简单得多

  • 开放存取
  • 创建与Excel工作表的链接表,这只不过是与工作表的连接信息;它实际上并不存储工作表中的记录
  • 这允许以下操作:

    • 从Access内部——运行查询,在Access表和链接的Excel表之间连接数据。您可以保存此类查询,将其用作表单或报表等的
      RecordSource
    • 来自Excel——您可以从Excel中打开ADO连接,并运行SQL语句连接Access表和链接的Excel工作表。然后,您可以使用Excel
      Range.CopyFromRecordset
      方法将这些结果粘贴到Excel工作表中

    我建议在Access中设置一个链接到Excel的表,并运行SQL语句。比VBA中的循环简单得多

  • 开放存取
  • 创建与Excel工作表的链接表,这只不过是与工作表的连接信息;它实际上并不存储工作表中的记录
  • 这允许以下操作:

    • 从Access内部——运行查询,在Access表和链接的Excel表之间连接数据。您可以保存此类查询,将其用作表单或报表等的
      RecordSource
    • 来自Excel——您可以从Excel中打开ADO连接,并运行SQL语句连接Access表和链接的Excel工作表。然后,您可以使用Excel
      Range.CopyFromRecordset
      方法将这些结果粘贴到Excel工作表中

    听起来你需要使用“In”子句。我在表2的A1:A5范围内有以下数据点

    Ryan
    Sam
    Timmy
    Tommy
    Teddy
    
    将下面的代码粘贴到模块中,并在VBE窗口的“工具”下设置对“Microsoft Active X Data Objects 2.8 Library”的引用

    Sub Import()
    
     Dim connect As ADODB.Connection
     Dim rec1 As ADODB.Recordset
     Dim wb As Worksheet
     Dim Wb2 As Worksheet
     Dim Param() As ADODB.Parameter
     Dim Command1 As ADODB.Command
     Dim lrow As Integer
     Dim i As Integer
     Dim ConcatSQL As String
    
    
     Set wb = ActiveWorkbook.Sheets("Sheet1")
     Set Wb2 = ActiveWorkbook.Sheets("Sheet2")
     lrow = Wb2.Range("A" & Wb2.Rows.Count).End(xlUp).Row
    
     'Concatenate desired range into one cell
     For i = 0 To lrow
     ConcatSQL = ConcatSQL & "'" & Wb2.Cells(i + 1, 1) & "'" & ","
     Next i
     ConcatSQL = "(" & Left(ConcatSQL, Len(ConcatSQL) - 1) & ")"
    
     'Open Command Object with One Paramter
     Set Command1 = New ADODB.Command
    
     With Command1
        .CommandText = " Select ID, Price from TABLE where ID IN " & ConcatSQL
        .CommandType = adCmdText
        .CommandTimeout = 600
     End With
    
    
     'Connect to Data Source
      Set connect = GetNewConnection 'Represents Private Function with Connection String
      Command1.ActiveConnection = connect
    
      Set rec1 = New ADODB.Recordset
      Set rec1 = Command1.Execute()
    
      'Paste Results
      wb.Activate
    
     With wb.QueryTables.Add(Connection:=rec1, Destination:=wb.Range("A1"))
     .Name = "data"
     .FieldNames = True
     .Refresh BackgroundQuery:=False
      End With
    
     'Close Connections
     rec1.Close
     connect.Close
     Set rec1 = Nothing
     Set connect = Nothing
    
     End Sub
    
    下面是一个屏幕截图,显示如何创建变量


    我100%确信您可以在Access中运行一个简单的查询,并将所述查询的结果导出到Excel。或者,保存该查询,并将对象中的记录导入Excel。当你进入你所描述的更大的数据集时,你可能想考虑使用不同的工具来完成这项工作。我想到了Python和R

    听起来你需要使用“In”子句。我在表2的A1:A5范围内有以下数据点

    Ryan
    Sam
    Timmy
    Tommy
    Teddy
    
    将下面的代码粘贴到模块中,并在VBE窗口的“工具”下设置对“Microsoft Active X Data Objects 2.8 Library”的引用

    Sub Import()
    
     Dim connect As ADODB.Connection
     Dim rec1 As ADODB.Recordset
     Dim wb As Worksheet
     Dim Wb2 As Worksheet
     Dim Param() As ADODB.Parameter
     Dim Command1 As ADODB.Command
     Dim lrow As Integer
     Dim i As Integer
     Dim ConcatSQL As String
    
    
     Set wb = ActiveWorkbook.Sheets("Sheet1")
     Set Wb2 = ActiveWorkbook.Sheets("Sheet2")
     lrow = Wb2.Range("A" & Wb2.Rows.Count).End(xlUp).Row
    
     'Concatenate desired range into one cell
     For i = 0 To lrow
     ConcatSQL = ConcatSQL & "'" & Wb2.Cells(i + 1, 1) & "'" & ","
     Next i
     ConcatSQL = "(" & Left(ConcatSQL, Len(ConcatSQL) - 1) & ")"
    
     'Open Command Object with One Paramter
     Set Command1 = New ADODB.Command
    
     With Command1
        .CommandText = " Select ID, Price from TABLE where ID IN " & ConcatSQL
        .CommandType = adCmdText
        .CommandTimeout = 600
     End With
    
    
     'Connect to Data Source
      Set connect = GetNewConnection 'Represents Private Function with Connection String
      Command1.ActiveConnection = connect
    
      Set rec1 = New ADODB.Recordset
      Set rec1 = Command1.Execute()
    
      'Paste Results
      wb.Activate
    
     With wb.QueryTables.Add(Connection:=rec1, Destination:=wb.Range("A1"))
     .Name = "data"
     .FieldNames = True
     .Refresh BackgroundQuery:=False
      End With
    
     'Close Connections
     rec1.Close
     connect.Close
     Set rec1 = Nothing
     Set connect = Nothing
    
     End Sub
    
    下面是一个屏幕截图,显示如何创建变量


    我100%确信您可以在Access中运行一个简单的查询,并将所述查询的结果导出到Excel。或者,保存该查询,并将对象中的记录导入Excel。当你进入你所描述的更大的数据集时,你可能想考虑使用不同的工具来完成这项工作。我想到了Python和R

    我不知道我可以在Excel和Access之间使用VBA。我会的,谢谢。@user9544908请注意,您不仅限于在Excel主机下运行VBA;您可以使用任何支持自动化的语言—例如C#、Python、JScript、VBScript—使用ADO(或ADO.NET,对于.NET语言)连接到Access数据库,并通过Excel对象模型操作Excel工作簿。我不知道我可以在Excel和Access之间使用VBA。我会的,谢谢。@user9544908请注意,您不仅限于在Excel主机下运行VBA;您可以使用任何支持自动化的语言(例如C#、Python、JScript、VBScript),既可以使用ADO(或ADO.NET,对于.NET语言)连接到Access数据库,也可以通过Excel对象模型操作Excel工作簿。如何在不将所有100000行放入Excel的情况下实现这一点?换句话说,如何根据单元格数据更改查询?@user9544908已更新。如何在不将所有100000行放入Excel的情况下更改查询?换句话说,如何根据单元格数据更改查询?@user9544908已更新。