SQL

使用VBA在Excel中使用SQL风格的查询

发布于 2021-04-20 23:06:21

我有一个很大的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),所以我正在寻找初学者的指导以帮助我入门。也许有人可以推荐一个简单的教程或博客文章,其功能类似于我需要做的事情?

关注者
0
被浏览
109
1 个回答
  • 面试哥
    面试哥 2021-04-20
    为面试而生,有面试问题,就找面试哥。

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

    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) 是要在其中创建动态表的工作表的编号。

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看