在其他應用程序vba中使用SQL
有時您想在Excel中使用SQL?
我創建這個模塊直接得到結果作為字符串(所有項目從fieldloop像這樣a / b / c / d用“/”分隔符),
或者你可以調用這個函數到sub並返回一個數組來指定範圍在表在Access中查詢)
或者甚至直接應用使用ctrl + Shift + Enter的數組格式(記住首先選擇多個單元格 - > write = SQL()在左上角conner)
SQL(dataRange As Range,FieldLoop As String,
可選CritA As String ,可選分隔符作為字符串,可選唯一作為布爾值)
DataRange =包含標題的範圍
FieldLoop =要循環的字段的名稱,可以使用通配符,如“*”
或任何字符串如正常查詢選擇語句CritA =查詢條件(應該像這樣“Where”和某些條件)
Delimiter =“,”或“/”或任何字符,如果不留下此可選空格,SQL函數將返回字符串如下:“一個分隔符b分隔符c delimiter d”
Unique = True / False,default = false,使您能夠從TableRange
Tada中“SELECT DISTINCT” 您已經在Excel中完成了查詢數據。
公共函數SQL(dataRange As Range,FieldLoop As String,可選CritA As String,可選分隔符作為字符串,可選唯一為布爾)
錯誤GoTo err:
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim TableName As String
Dim StrResult As Variant
Dim strFile As String,strCon As String,strSQL As String
TableName = dataRange.Parent.Name&“$”&dataRange.Address(False,False)
strFile = ThisWorkbook.FullName
strCon =“Provider = Microsoft.ACE.OLEDB.12.0; Data Source =”&strFile _
&“;擴展屬性=”“Excel 12.0; HDR =是; IMEX = 1”“;”
設置cn = CreateObject(“ADODB.Connection”)
設置rs = CreateObject(“ADODB.Recordset”)
cn.打開strCon
如果不是唯一=真的
strSQL =“SELECT”&FieldLoop&“FROM [”&TableName&“]”&CritA
其他
strSQL =“SELECT DISTINCT”&FieldLoop&“FROM [”&TableName&“]”&CritA
萬一
rs.打開strSQL,cn
用rs
不做(.BOF或.EOF)
If(InStr(1,FieldLoop,“,”,vbBinaryCompare)> 0或FieldLoop =“*”)和Delimiter =“”然後
StrResult = Application.Transpose(.GetRows)
轉到下一步:
其他
IfFields(0).Value <>“”Then
StrResult = StrResult&.Fields(0).Value&Switch(Delimiter =“,”,“,”,True,Delimiter)
萬一
.MoveNext
萬一
循環
結束與
下一步:
如果不是IsArray(StrResult)而不是IsEmpty(StrResult)然後
如果Len(StrResult)> 0那麼
SQL = Left $(StrResult,Len(StrResult)) - 1)
其他
SQL =“No Item code Found !!”
萬一
其他
SQL = StrResult
萬一
ExitF:
退出功能
呃:
Debug.Print err.Number&“ - ”&err.Description
恢複ExitF:
結束功能
最後更新:2017-08-15 13:32:16