我试图创建一个Excel宏,使其能够在Excel中执行以下功能:
=SQL("SELECT heading_1 FROM Table1 WHERE heading_2='foo'")
允许我使用SQL查询在工作簿的表格中搜索(甚至插入)数据。
到目前为止,我已经做了以下工作:
Sub SQL()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
strFile = ThisWorkbook.FullName
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _
& ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open strCon
strSQL = "SELECT * FROM [Sheet1$A1:G3]"
rs.Open strSQL, cn
Debug.Print rs.GetString
End Sub
我的脚本可以像上面片段中硬编码的范围一样完美运行。它也可以很好地处理静态命名范围。
然而,它无法处理动态命名范围或表名,这对我来说最重要。
我找到了一个遭受同样痛苦的人的答案: http://www.ozgrid.com/forum/showthread.php?t=72973 有人能帮忙吗?
编辑
我已经解决了这个问题,然后可以在我的SQL查询中使用结果名称。限制是我需要知道表在哪个表单上。我们能做些什么吗?
Function getAddress()
myAddress = Replace(Sheets("Sheet1").Range("Table1").address, "$", "")
myAddress = "[Sheet1$" & myAddress & "]"
getAddress = myAddress
End Function
谢谢!
SQL = 要在单元格中显示的答案
这样的语句。但这可能与你遇到的问题无关。 - Jake BathmanSELECT * FROM [Sheet1$]
或者您可以使用SELECT * FROM MyNamedRange
。 - user1274820