[英]Need help in vba-excel and Sql query
懷疑在vba ADO和Sql查詢...
我有2張,即adodc1,adodc2(在一個工作簿中)
在adodc1中有“Name”,“Dept”列,有時還有“Sect”列
在adodc2中有“Name”,“Dept”,“sect”列
我想要的是當我運行Query..Vba需要檢查adodc1是否有Sect列..如果它有兩個工作表通常的聯合
想要作為空值返回..
以下代碼取自“”根據我的需要而改變
它將做的是兩張表中的聯合名稱和部門列。現在我想要查詢以檢查adodc1是否具有列“sect”..如果它有
工會“Sect”像往常一樣..工會作為空值
Sub connecttoexcel()
Dim cn As Object
Dim rs As Object
Dim strFile As String
Dim strCon As String
Dim strSQL As String
Dim s As String
Dim i As Integer, j As Integer
strFile = ActiveWorkbook.FullName
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile & ";Extended Properties=""Excel 12.0 XML;HDR=Yes;IMEX=1"";"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open strCon
'here i want some stuff
strSQL = "Select Name, Dept from [Adodc1$] Union Select Name, Dept from [Adodc2$];"
rs.Open strSQL, cn
Worksheets("Sheet3").Cells(2, 1).CopyFromRecordset rs
Set rs = Nothing
End Sub
Vba需要檢查adodc1是否具有Sect列
我建議你使用Connection對象的OpenSchema方法來發現列是否存在,例如:
Set rs = cn.OpenSchema(adSchemaColumns, Array(Empty, Empty, "Adodc1$")
rs.Filter = "COLUMN_NAME = 'Sect'"
If rs.RecordCount = 1 Then
' Column exists
...
當檢查50列時,我認為會更難...
rs.Filter = "COLUMN_NAME = 'Sect' OR COLUMN_NAME = 'Name' OR COLUMN_NAME = 'Dept' ...
或者使用數組等在循環中測試每一個。
是否可以在sql查詢中使用NZ函數
NZ()
函數不是Access SQL的函數,這是用於訪問Excel數據的函數。 相反,它是MS Access對象模型的一部分。 簡而言之,除非您從Access VBA項目運行此項,否則NZ()
不可用。 但是解決方法很簡單,例如
Nz(Dept, '{{NONE}}')
具有相同的效果
IIF(Dept IS NULL, '{{NONE}}', Dept)
我讀過Access MVP(Allen Browne?)說無論如何這比Nz()
更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.