3

我有一个大的 excel 表,看起来类似于:

date       |  name  |  age  |  type
10/10/2012 | James  |  12   |  man 
11/10/2012 | Jane   |  50   |  woman 
12/10/2012 | Freddy |  2    |  dog
13/10/2012 | Bob    |  23   |  man
14/10/2012 | Mary   |  34   |  woman 

我想要做的是创建一个新的、动态生成的表格来显示所有的男人。

在 SQL 中,这将是一个同步:"SELECT * FROM table WHERE type='men'". 我以前从未在 excel 中使用过 VBA(尽管我是一位经验丰富的 PHP/Javascript 程序员,并且在 MS Access 中使用过 VBA),所以我正在寻找初学者的说明来帮助我入门。也许有人可以推荐一个简单的教程或博客文章来完成我需要做的事情?

4

1 回答 1

6

我花了一天的大部分时间,但我已经弄清楚了。这是代码:

Sub Excel_QueryTable()

Sheet2.Cells.ClearContents

Dim oCn As ADODB.Connection
Dim oRS As ADODB.Recordset
Dim ConnString As String
Dim SQL As String

Dim qt As QueryTable

ConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\t.xlsm;Extended Properties=Excel 8.0;Persist Security Info=False"
Set oCn = New ADODB.Connection
oCn.ConnectionString = ConnString
oCn.Open

SQL = "Select * from [Sheet1$] WHERE type='man'"

Set oRS = New ADODB.Recordset
oRS.Source = SQL
oRS.ActiveConnection = oCn
oRS.Open

Set qt = Worksheets(2).QueryTables.Add(Connection:=oRS, _
Destination:=Range("A1"))

qt.Refresh

If oRS.State <> adStateClosed Then
oRS.Close
End If

If Not oRS Is Nothing Then Set oRS = Nothing
If Not oCn Is Nothing Then Set oCn = Nothing

End Sub

要使其在您自己的工作簿上运行,您需要将Data Source路径更改为您正在使用的文件的名称。

[Sheet1$]查询中是您从中选择的工作表的名称(留在 中$)。

Worksheets(2)是您在其中创建动态表的工作表的编号。

此外,您需要通过在 Excel 中的 VBA 编辑器中启用其中一个Microsoft Active X Data Objects库。Tools>References

于 2012-11-29T15:08:41.973 回答