Нужна помощь в VBA-Excel и SQL запрос - PullRequest
3 голосов
/ 07 марта 2012

Сомнение в VBA ADO и Sql запрос ...

У меня есть 2 листа А именно adodc1, adodc2 (в одной рабочей тетради)

В adodc1 есть столбцы "Name", "Dept" и несколько раз в нем есть столбец "Sect"

В adodc2 есть столбцы "Имя", "Отдел", "Секта"

то, что я хочу, это когда я запускаю Query..Vba нужно проверить, есть ли у adodc1 столбец Sect или нет .. если у него есть объединение, то на двух листах есть обычное else

хочу вернуть как пустое значение ..

Код, указанный ниже "", изменен в соответствии с моими потребностями

Что он будет делать, так это имя объединения и столбец Dept из двух листов. Теперь я хочу, чтобы запрос проверял, есть ли у adodc1 столбец "секта" или нет .., если он имеет

union "Sect" как обычно, иначе .. union как пустое значение

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

1 Ответ

2 голосов
/ 07 марта 2012

Vba должен проверить, есть ли у adodc1 столбец Sect или нет

Я предлагаю вам использовать метод OpenSchema объекта Connection, чтобы выяснить, существует ли столбецнапример, что-то вроде:

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' ...

или проверить каждый из нихв цикле с использованием массива и т. д.

Возможно ли использовать функцию NZ внутри запроса sql

Функция NZ() не является функцией Access SQL, который используется здесь для доступа к данным Excel.Скорее, это часть объектной модели MS Access.Короче говоря, если вы не запускаете это из проекта Access VBA, то NZ() недоступен.Но обходной путь тривиален, например,

Nz(Dept, '{{NONE}}')

имеет тот же эффект, что и

IIF(Dept IS NULL, '{{NONE}}', Dept)

Я прочитал MVP Access (Аллен Браун?), Говорят, что это предпочтительнее, чем Nz() в любом случае.

...