倚天杖
2019-10-18 11:01:58
我正在嘗試制作一個Excel宏,它將在Excel中為我提供以下功能:=SQL("SELECT heading_1 FROM Table1 WHERE heading_2='foo'")允許我使用SQL查詢在工作簿的表中搜索(甚至插入)數(shù)據(jù)。到目前為止,這是我所做的:Sub SQL()Dim cn As ADODB.ConnectionDim rs As ADODB.RecordsetstrFile = ThisWorkbook.FullNamestrCon = "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 strConstrSQL = "SELECT * FROM [Sheet1$A1:G3]"rs.Open strSQL, cnDebug.Print rs.GetStringEnd Sub我的腳本像帶有硬編碼范圍的超級按鈕一樣工作,例如上面的代碼片段中的那個。它也可以與靜態(tài)命名范圍一起很好地工作。但是,它對動態(tài)命名范圍或?qū)ξ襾碚f最重要的表名都不起作用。我發(fā)現(xiàn)的最接近答案的是這個人遭受同樣的折磨:http ://www.ozgrid.com/forum/showthread.php?t= 72973幫助任何人?編輯到目前為止,我已經(jīng)煮熟了,然后可以在SQL查詢中使用結(jié)果名稱。限制是我需要知道表格在哪張紙上。我們可以做些什么嗎?Function getAddress() myAddress = Replace(Sheets("Sheet1").Range("Table1").address, "$", "") myAddress = "[Sheet1$" & myAddress & "]" getAddress = myAddressEnd Function謝謝!
3 回答

HUWWW
TA貢獻(xiàn)1874條經(jīng)驗 獲得超12個贊
您可能能夠做的一件事就是獲取動態(tài)命名范圍的地址,并將其用作SQL字符串中的輸入。就像是:
Sheets("shtName").range("namedRangeName").Address
它將吐出一個地址字符串,例如 $A$1:$A$8
編輯:
正如我在下面的評論中所說,您可以動態(tài)獲取完整的地址(包括工作表名稱)并直接使用它,也可以解析工作表名稱以供以后使用:
ActiveWorkbook.Names.Item("namedRangeName").RefersToLocal
結(jié)果是類似的字符串=Sheet1!$C$1:$C$4。因此,對于上面的代碼示例,您的SQL語句可能是
strRangeAddress = Mid(ActiveWorkbook.Names.Item("namedRangeName").RefersToLocal,2)
strSQL = "SELECT * FROM [strRangeAddress]"
添加回答
舉報
0/150
提交
取消