Sql-запрос в vba

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

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

Мне надо из файла dbf следующего вида
выгрузить в excel показатели.
логика такая:
сравниваем с 1 справочником (столвик А в excel) значения в колонке regn.
для каждого значения из справочника 1 ищем все совпадения справочника 2 с колонкой PLAN и суммируем показатели колонки VR, соответствующие строке PLAN.
В итоге на каждое REGN из справочника 1 будет 1 значение суммы. Помогите плиз., надо из VBA делать sql-запросы, а я их никогда не писал.
Спасибо!

Решение задачи: «Sql-запрос в vba»

textual
Листинг программы
<font color="blue">Sub</font> X()
    <font color="blue">Dim</font> cnn <font color="blue">As</font> ADODB.Connection
    <font color="blue">Dim</font> rst <font color="blue">As</font> ADODB.Recordset
    <font color="blue">Dim</font> rng <font color="blue">As</font> Excel.Range
    <font color="blue">Dim</font> lngSumma <font color="blue">As</font> <font color="blue">Long</font>
    
    <font color="blue">Set</font> cnn = <font color="blue">New</font> ADODB.Connection
    <font color="blue">Set</font> rst = <font color="blue">New</font> ADODB.Recordset
    <font color="blue">Set</font> rng = [A1:A2]
    
    cnn.<font color="blue">Open</font> <font color="teal">"Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=C:\1;"</font>
    rst.<font color="blue">Open</font> <font color="teal">"SELECT * FROM Test.dbf ORDER BY REGN"</font>, cnn, , , adCmdText
    
    <font color="blue">For</font> <font color="blue">Each</font> rng <font color="blue">In</font> rng.Cells
        lngSumma = <font color="darkblue"><b>0</b></font>
    
        <font color="blue">Do</font> <font color="blue">Until</font> rst.EOF
            <font color="blue">If</font> rng.Value = rst!REGN <font color="blue">Then</font>
                lngSumma = lngSumma + rst!VR
            <font color="blue">End</font> <font color="blue">If</font>
        rst.MoveNext
        <font color="blue">Loop</font>
        
        rng.Offset(<font color="darkblue"><b>0</b></font>, <font color="darkblue"><b>1</b></font>).Value = lngSumma
    <font color="blue">Next</font> rng
    
    rst.<font color="blue">Close</font>
    cnn.<font color="blue">Close</font>
    
    <font color="blue">Set</font> rst = <font color="blue">Nothing</font>
    <font color="blue">Set</font> cnn = <font color="blue">Nothing</font>
<font color="blue">End</font> <font color="blue">Sub</font>

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


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

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

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