2011-12-12 34 views
1

我正在尝试创建一个模板,该模板将利用Access表中的数据,并允许用户选择Excel文件中的参数。此表中的记录数量正在减慢Excel文件的速度,并且我想根据用户选择减少导入的数据量。基于参数从Access表导入到Excel

Access表将有三列:
型号|线路|目录编号

我想进口的所有三列,但允许用户选择基于目录代码进口记录。

用户没有对sql表的读取或写入权限,因此我在每天结束时运行Access查询以创建可访问的Access表。

我有2007版本。这种类型的输入可能吗?

在此先感谢!

+0

这是可能的。你现在怎么做? – JimmyPena

+0

目前,我在每天结束时运行Access查询来更新表格。 Excel文件链接到Access中的该表以引入上面的三列。他们可以使用Excel中的过滤器,但速度很慢。 – user955289

+1

这不仅是可能的,ADO也不是特别困难:http://support.microsoft.com/kb/257819,还有一些在StackOverflow上发布的示例。您可以使用命令对象和参数来确保安全。 – Fionnuala

回答

2

从Access到Excel示例。

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 

''Access database 

strFile = "z:\docs\dbfrom.mdb" 

''This is the Jet 4 connection string, you can get more 
''here : http://www.connectionstrings.com/excel 

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

''Late binding, so no reference is needed 

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

cn.Open strCon 

'Rough idea 
intID = Sheet1.[A1] 

strSQL = "SELECT * " _ 
     & "FROM Test " _ 
     & "WHERE ID = " & intID 

rs.Open strSQL, cn, 3, 3 


''Pick a suitable empty worksheet for the results 

Worksheets("Sheet3").Cells(2, 1).CopyFromRecordset rs 

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

你可以做到这一点没有VBA,只需使用MS查询(工作在Office 2010中,我无法对证'07):

  • 在Excel中去的数据带和点击在From other sources图标
  • 点击From Microsoft Query
  • 选择MS Access Database*
  • 浏览并选择您的数据库。
  • 在向导中选择需要导入
  • 下一个页面上选择要上
  • 过滤器中选择你需要的过滤器类型的列列,即Equals
  • 而不是选择一个值在下框中输入[Parameter please Bob]
  • 输入您排序的下一个页面上
  • 选择Return data to Microsoft Excel并完成

MS Query将询问您的参数,然后Excel会询问您如何以及在哪里需要数据。并且您的过滤数据将会出现。

现在每次刷新数据时都会再次询问参数,以便您轻松更改。

p.s.如果您不想要“编程”答案,请询问superuser.com