Мой код работает нормально, если что-то выбрано из выпадающего списка и макрос запущен.
Но если ничего не выбрано, что никогда не должно иметь место, я получаю ошибку времени выполнения Неверное имя столбца.
Вместо этого я хочу, чтобы в окне сообщения появилось сообщение «Убедитесь, что X выбран из выпадающего меню» кнопкой ОК вместо указанной ошибки времени выполнения.
Ошибка возникает в строке ниже, которую я нашел при отладке:
rs1.Open sqlstrSchemeDetail, DBCONT
Ошибка возникает из-за невозможности создания строки sql, если ничего не выбрано.
Call connectDatabase
rs1.Open sqlstrSchemeDetail, DBCONT 'WHERE ERROR HAPPENS
'Debug.Print sqlstrSel
Debug.Print sqlstrSchemeDetail
For intColIndex = 0 To rs1.Fields.Count - 1
Sheet2.Range("A1").Offset(0, intColIndex).Value = rs1.Fields(intColIndex).Name
Next
Sheet2.Range("A2").CopyFromRecordset rs1
'rs.Close
'Set rs = Nothing
Call closeDatabase
Это DBCONT
Public Function connectDatabase()
Set DBCONT = CreateObject("ADODB.Connection")
Dim sConn As String
sConn = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=PamwinPlusLIVE;Data Source=GS1NHHMSQLV04\INST04;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=SL1NHHMCTXV108;Use Encryption for Data=False;Tag with column collation when possible=False"
DBCONT.Open sConn
DBCONT.cursorlocation = 3
End Function
Далее Подробнее
Dim sqlstrSchemeDetail As String
sqlstrSchemeDetail = "Select scheme.SchemeID, DevOfficer.Description [Scheme
Owner], scheme.Description [Scheme Description], scheme.Version [v.],
Status.Description [Status], TenureType.Description [Tenure Type],
Template.Description [Template], Units.Units,scheme.lastupdatedDate
[Updated] from scheme inner join Status on scheme.Status = status.StatusID
inner join TenureType on scheme.TenureTypeID = TenureType.TenureTypeID inner
join DevOfficer on scheme.devofficer = devofficer.devofficerid inner join
SelScheme ON Scheme.SchemeID = SelScheme.SchemeID inner join Template on
scheme.TemplateID = template.templateid inner join (select
scheme.SchemeID,sum(units) as Units from Property inner join scheme on
Property.SchemeID = scheme.SchemeID group by scheme.SchemeID) Units on
Units.schemeid = scheme.schemeid where scheme.masterSchemeID is null and
SelScheme.SelID =" & GG
Dim GG As String
GG = Split(Sheet1.ComboBox1.Value, "-")(0)
GG возвращает идентификатор, если что-то выбрано из выпадающего списка, и код будет работать. Если в выпадающем списке ничего не выбрано, GG - это какой-то текст, который приводит к сбою кода на
rs1.Open sqlstrSchemeDetail, DBCONT