当前位置: 首页 > 面试题库 >

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

艾晋
2023-03-14
问题内容

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


问题答案:

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

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编辑器中启用其中一个库。



 类似资料:
  • 问题:我想在单元格内容的旁边或下面找到一个单元格的值,一个工作簿的文本值。 示例:在Sheet2中,我有两个随机单元格(假设它的索引未知,并且total不是定义的名称) 我想搜索值“200”站在总数旁边,并把它放在表2(一个活动单元格)。如果有多个单元格包含单词“total”,请列出所有单元格,如果可能,请将包含我正在寻找的单元格的工作表的名称放入。价值200张2 写入结果activeCell.v

  • 我在excel和VBA方面还算新手。 如果一直试图找到一种方法来实现下面的场景,但不能。我也试着在网上搜索解决方案,但找不到。

  • 问题内容: 怀疑在VBA ADO和Sql查询中… 我有2张纸,即adodc1,adodc2(在一本工作簿中) 在adodc1中具有“名称”,“部门”列,有时其具有“ Sect”列 在adodc2中具有“名称”,“部门”,“宗派”列 我想要的是当我运行Query..Vba时需要检查adodc1是否具有Sect列。 要返回为空值.. 下面的代码取自“”,根据我的需要进行了更改 它将执行的工作是来自两张

  • 问题内容: (1)表 (2)中的VBA 值 我想在子句中的语句中使用日期的内部运行查询。 当我在之外运行此查询时,它运行完美: 一次,我在中运行它不会给我一个错误,但也不会给我任何结果。 我认为问题是由和中的组合引起的。 我必须如何更改才能使其正常工作? 问题答案: 您在日期和时间之间缺少空格… 打开VBE并调试打印公式以查看结果(制造商确保您具有立即窗口[视图菜单/立即窗口])。 结果 2020

  • 我听说过很多关于在Excel VBA中使用的憎恶是可以理解的,但我不确定如何避免使用它。我发现,如果我能够使用变量而不是函数,那么我的代码将更加可重用。但是,如果不使用,我不确定如何引用东西(如等)。 我已经找到了这篇关于范围的文章和这个关于不使用select的好处的例子,但是我找不到任何关于如何使用的东西。

  • 我无法解释,因为所有其他select和insert语句都工作得很好。