簡體   English   中英

在vba-excel和Sql查詢中需要幫助

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM