怀疑在vba ADO和Sql查询...
我有2张,即adodc1,adodc2(在一个工作簿中)
在adodc1中有“Name”,“Dept”列,有时还有“Sect”列
在adodc2中有“名称”,“部门”,“教派”栏目
我想要的是当我运行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
答案 0 :(得分:2)
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()
更好。