VBA+Excel+открытие dbf файла более 65000 строк

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

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

Помогите решить проблему!
В dbf файле около 400

тыс.

строк, необходимо его открыть (при выполнении макроса) в Excel так, чтобы при открытии его содержимое делилось на листы. В среднем получается 7 листов.
Пока через специальный dbf редактор дробиться на более мелкие dbf, а потом открывается в Excel и сливается в одну книгу, что достаточно трудозатратно.
Код для разбивки на листы я написала, на dbf менее 65000 он прекрасно и быстро работает, но по всей видимости ADODB.Recordset не поддерживает такое кол-во строк, потому что при запуске макроса на большом файле выпадает ошибка: "Run-Time Error '-2147467259 (80004005)' Automation Error Неопознанная ошибка"
Что можно придумать?

Решение задачи: «VBA+Excel+открытие dbf файла более 65000 строк»

textual
Листинг программы
<font color="blue">Dim</font> cn <font color="blue">As</font> <font color="blue">New</font> ADODB.Connection, rs <font color="blue">As</font> <font color="blue">New</font> ADODB.Recordset, sh <font color="blue">As</font> Worksheet

<font color="blue">Const</font> cstrBase <font color="blue">As</font> <font color="blue">String</font> = <font color="teal">"C:\EXPORT\"</font> <font color="00AA00">'Директория с файлами dbf</font>
n = <font color="darkblue"><b>1</b></font>
t = <font color="darkblue"><b>2</b></font>
<font color="blue">With</font> cn
    .Provider = <font color="teal">"Microsoft.Jet.OLEDB.4.0"</font>
    .ConnectionString = <font color="teal">"Data Source="</font> & cstrBase & <font color="teal">";Extended Properties=dBase IV"</font>
    .<font color="blue">Open</font>
 
    <font color="blue">Set</font> rs = .Execute(<font color="teal">"SELECT * FROM  tab"</font>)

    <font color="blue">For</font> i = <font color="darkblue"><b>0</b></font> <font color="blue">To</font> rs.Fields.Count - <font color="darkblue"><b>1</b></font>
        sh.Cells(<font color="darkblue"><b>1</b></font>, i + <font color="darkblue"><b>1</b></font>).Value = rs.Fields(i).<font color="blue">Name</font>
    <font color="blue">Next</font> i

    <font color="blue">If</font> <font color="blue">Not</font> (rs.EOF <font color="blue">And</font> rs.BOF) <font color="blue">Then</font> rs.MoveFirst

    <font color="blue">Do</font> <font color="blue">Until</font> rs.EOF
    <font color="blue">If</font> t > <font color="darkblue"><b>65000</b></font> <font color="blue">Then</font>
       <font color="blue">Set</font> sh = Application.Worksheets.Add
       sh.<font color="blue">Name</font> = <font color="teal">"part"</font> + Str(n)
       <font color="blue">For</font> i = <font color="darkblue"><b>0</b></font> <font color="blue">To</font> rs.Fields.Count - <font color="darkblue"><b>1</b></font>
           sh.Cells(<font color="darkblue"><b>1</b></font>, i + <font color="darkblue"><b>1</b></font>).Value = rs.Fields(i).<font color="blue">Name</font>
       <font color="blue">Next</font> i
       t = <font color="darkblue"><b>2</b></font>
       n = n + <font color="darkblue"><b>1</b></font>
    <font color="blue">End</font> <font color="blue">If</font>
    
    <font color="blue">For</font> j = <font color="darkblue"><b>0</b></font> <font color="blue">To</font> rs.Fields.Count - <font color="darkblue"><b>1</b></font>
        sh.Cells(t, j + <font color="darkblue"><b>1</b></font>).Value = rs.Fields(j).Value
    <font color="blue">Next</font> j
    
    rs.MoveNext
    t = t + <font color="darkblue"><b>1</b></font>
    <font color="blue">Loop</font>
    .<font color="blue">Close</font>
<font color="blue">End</font> <font color="blue">With</font>

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


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

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

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