Excel + VBA + ODBC - как связать в кучу? Поможите!

Узнай цену своей работы

Формулировка задачи:

Появилясь задачка - в ячейку Excel вставлять значение, получаемое SQL запросом из ODBC источника. Все это дело нужно оформить в макрос. Все бы ничего, но ихз VBA к ODBC я не разу не делал.
Не дайте помереть, покажите примерчик!

Решение задачи: «Excel + VBA + ODBC - как связать в кучу? Поможите!»

textual
Листинг программы
<font color="blue">Dim</font> wrkODBC <font color="blue">As</font> Workspace
<font color="blue">Dim</font> MyCon <font color="blue">As</font> Connection
<font color="blue">Dim</font> MyRec <font color="blue">As</font> Recordset

<font color="blue">Set</font> wrkODBC = CreateWorkspace(<font color="teal">"NewOBDCWorkspace"</font>, <font color="teal">"admin"</font>, <font color="teal">""</font>, dbUseODBC)
wrkODBC.DefaultCursorDriver = dbUseODBCCursor

<font color="blue">Set</font> MyCon = wrkODBC.OpenConnection(<font color="teal">"MyConnect"</font>, dbDriverNoPrompt, , <font color="teal">"ODBC;DATABASE=BASENAME;UID=sa;PWD=saPassword;DSN=MyDSN"</font>)
<font color="blue">Set</font> MyRec = MyCon.OpenRecordset( <font color="teal">"SELECT UserName,UserID FROM Users"</font>, dbOpenSnapshot)

<font color="blue">With</font> MyRec

<font color="blue">If</font> .EOF <font color="blue">Then</font>
    NumberOfSQL = <font color="darkblue"><b>0</b></font>
<font color="blue">Else</font>
    .MoveLast
    NumberOfSQL = .RecordCount
    .MoveFirst
<font color="blue">End</font> <font color="blue">If</font>

Sheets(<font color="teal">"Лист1"</font>).<font color="blue">Select</font>
Range(<font color="teal">"A1"</font>).<font color="blue">Select</font>

<font color="blue">For</font> i = <font color="darkblue"><b>1</b></font> <font color="blue">To</font> NumberOfSQL
    ActiveCell.Value = .Fields(<font color="darkblue"><b>0</b></font>).Value
    ActiveCell.Offset(<font color="darkblue"><b>0</b></font>, <font color="darkblue"><b>1</b></font>) = .Fields(<font color="darkblue"><b>1</b></font>).Value
    .MoveNext
    ActiveCell.Offset(<font color="darkblue"><b>1</b></font>, <font color="darkblue"><b>0</b></font>).<font color="blue">Select</font>
<font color="blue">Next</font> i

<font color="blue">End</font> <font color="blue">With</font>

MyRec.<font color="blue">Close</font>
<font color="blue">Set</font> MyRec = <font color="blue">Nothing</font>
MyCon.<font color="blue">Close</font>
wrkODBC.<font color="blue">Close</font>

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.692 из 5
Похожие ответы