2012-09-20 35 views
1

我显然缺乏对excel查询的一些知识..我需要打印出一些自定义标签与每个工作人员的订购文章。如何查询内联excel表与vba?

在我的例子,我有2个表:

 [tabWorkers] 
     ID  Name 
     1   John 
     2   Patrick 


     [tabOrders] 
     ID  Article Amount 
     1   Shoe  2 
     1   T-Shirt 5 
     2   T-Shirt 3 

我循环通过tabWorker和对于每个工作我想查询我的tabOrders表:SELECT * FROM tabOrders WHERE ID = 1

我想要什么

语法例如:

Dim row As Range 
    For Each row In [tabWorkers].Rows 
     myID = row.Columns(row.ListObject.ListColumns("ID").Index).Value 

     Write(row.Columns(row.ListObject.ListColumns("Name").Index).Value & " has ordered...<p>") 

     For Each (Article, Amount) In "SELECT * FROM tabOrders WHERE ID ='" & myID & "'") 
     Write(Amount & " x " & Article & "<br>") 
     Next 

    Next 
+0

我能过滤器适用于我的表的末尾$: [ tabOrders] .ListObject.Range.AutoFilter字段:= 1,Criteria1:= myID 但当循环[tabOrders] .Rows,我仍然得到我所有的行.. –

+0

只回应您的评论,但看看'SpecialCells (xlCellTypeVisible)'范围对象的方法。 – markblandford

回答

0

我以前用过this解决方案对大数据集,它工作得很好,只要标签上的数据是明确界定

基本上设置参考ADO然后定义到工作表的连接,记得在每个工作表的名称:)

Dim cn as ADODB.Connection 
Dim rs as ADODB.Recordset 
Dim strSQL as String 

Set cn = New ADODB.Connection 
cn.ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & ActiveWorkbook.Path & Application.PathSeparator & ActiveWorkbook.Name 

cn.Open 

strSQL = "Select Distinct [Name] From [tabWorkers$] Order by [Name]" 

Set rs = New ADODB.Recordset 
rs.Open cn, strSQL, adOpenStatic, adLockReadOnly 

'// then use the recordset 
for each ....... 

rs.Close