2014-05-20 90 views
0

我试图存储和检索在Excel中输入到Excel中的数据。我是一个Access新手,并已在前端的Excel程序,导致我驱动从Excel导入。我已经成功地想出了如何将Excel命名范围保存到所需的Access表中,但是现在我需要弄清楚如何将该Access表中的特定数据返回到Excel中。我知道我可以简单地使用Excel中的“获取外部数据”功能将整个Access表导入到Excel中,但我需要只能根据预先确定的一组参数将表的特定部分导入到Excel中。这可能吗?使用Excel作为前端将特定的Access表数据导入到Excel中

作为该程序的背景,基本上它存储了零件编号运行的数据。我不仅需要将新的零件运行保存到Access数据库中(我想到了这一点),而且还需要能够将以前的零件编号从Access运回Excel以执行进一步的分析。这就是为什么我需要弄清楚如何只导入表的特定部分。我不确定哪些代码,如果有的话,我可以发布,因为我基本上是从头开始寻找代码;但如果您认为您需要从我的Excel程序中获取任何代码,我很乐意提供它。谢谢你的帮助。下面是代码:

Sub GetSpecData() 
Application.ScreenUpdating = False 
'******************************************************************************* 
'Open the connection to the data source. 
Set Connection = New ADODB.Connection 
Connection.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & "Data Source=\\Server2013\network_shared\QC SHARED\Databases\P&Q_Tracking_Data_Storage.mdb;" 
'******************************************************************************* 
'Create the new RecordSet. 
Set Recordset = New ADODB.Recordset 
With Recordset 
'Define the appropriate Filter(s) and notify the user of the selection criteria. 
    Src = "Select * from Raw_Data where Tag = 'GHI' " 
    Src = Src & "or Tag = 'DEF' " 
    Src = Src & "or Tag = 'LMN'" 
    .Open Source:=Src, ActiveConnection:=Connection 
    'Write the field names. 
    For ODCol = 0 To .Fields.Count - 1 
     Tracking.Sheets("Selected Past Data").Range("B7").Offset(0, ODCol).Value = .Fields(ODCol).Name 
    Next 
    'Write the recordset. 
    Tracking.Sheets("Selected Past Data").Range("B7").Offset(1, 0).CopyFromRecordset Recordset 
End With 
Set Recordset = Nothing 
Connection.Close 
Set Connection = Nothing 
'******************************************************************************* 
'Create and format the table from the Recordset. 
With Tracking.Sheets("Selected Past Data") 
    DataLastRow = .Range("A" & Rows.Count).End(xlUp).row 
    .ListObjects.Add(xlSrcRange, Range("B7:M" & DataLastRow), , xlYes).Name = "INC2tbl" 
    .ListObjects("INC2tbl").ShowTotals = True 
End With 
Application.ScreenUpdating = True 
'******************************************************************************* 

末次

在下面的评论谷歌搜索的建议后,我有几个问题。首先,上面的代码似乎通过三个键过滤访问数据:GHI,DEF和LMN。我解释正确吗?第二,它说:“选择*从Raw_Data其中标签='GHI'”,因为这是在引号中,这不是实际的代码将被执行,是正确的?这只是一个提示或类似的东西,对吗?

+0

google for“excel vba adodb.connection access database”。这会帮助你。 – Jzz

+0

下面是我为这个过程创建的子。在Google上线之后,我仍然从我在网上找到的代码中进行调整。我有一些关于它的问题。 – jlynn303

+0

更新了上面的原始问题以包含有关它的代码和问题。谢谢。 – jlynn303

回答

0

SELECT * FROM TABLE;输出到TABLEName.EXL FORMAT sql;

+0

请您用实际的代码详细说明这一点吗?谢谢。 – jlynn303

0

首先,上面的代码似乎通过三个 键来过滤访问数据:GHI,DEF和LMN。我解释正确吗? 其次, 它说:“选择*从Raw_Data其中标签='GHI'”,因为 用引号引起,这不是实际的代码将被执行, 正确?这只是一个提示或类似的东西,对吗?

第一个和第二个问题密切相关,所以我会作为一个答案。这里的基本思想是有一个到你定义的数据库的连接(在Connection.Open语句中)。这个连接本身并没有做什么,建立连接。与数据库的实际通信是用特定的语言完成的,名为SQL(有许多方言,但为了简单起见,现在称之为SQL)。因此,您的代码使用VBA语言,但与数据库的通信是在SQL中完成的。 VBA代码必须生成SQL语句(并且这些是字符串,因此您需要引号)。这就是Src变量的含义;和SQL语句。在这种情况下:

"Select * from Raw_Data where Tag = 'GHI' or Tag = 'DEF' or Tag = 'LMN'" 

我觉得这不是教你SQL的地方,但是网上有很多关于它的信息。这条语句的作用是:

从表格“Raw_Data”中选择所有列,但仅选择Tag列中具有'GHI','DEF'或'LMN'的数据行。

所以从表“part_numbers”接收所有数据,你将不得不使用:

"SELECT * FROM part_numbers;" 

如果您需要导入只列“COL_1”和“COL_2”,你可以使用:

"SELECT col_1,col_2 FROM part_numbers;" 

如果您需要导入只列 “COL_1” 和 “COL_2”,只有行以 “PART_ID” 低于1000,你可以使用:

"SELECT col_1,col_2 FROM part_numbers WHERE part_id < 1000;" 

就是这样。现在,如果您的记录集(将其视为包含所请求数据的数组)已查询数据库,则可以循环它来解析数据。喜欢的东西:

Set Recordset = Connection.Execute(Src) 
Do until Recordset.EOF 
    debug.print Recordset!col_1 
    Recordset.movenext 
loop 

同样,谷歌是这样的:“VBA擅长ADODB访问”,你会打很多的例子。

+0

非常感谢@Jzz。这确实有帮助。 – jlynn303

0

在研究了SQL代码格式之后,我对这个主题有了更多的了解。谢谢您的帮助。