VB & Excel работа

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

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

Написал программу, которая открывает Эксель и проблема,я начинаю построчно обрабатывать Эксель, для подсчета данных.
Как ускорить работу обработки, сам Эксель скрыт, но обработка 500к строк занимает долго, хотя тоже самое при работе в VBA занимает минут 10.
Не могу понять в чем проблема, когда объект Эксель скрыт минут 30, когда VBA минут 10, в чем прикол?

Решение задачи: «VB & Excel работа»

textual
Листинг программы
Dim EX, FileName, i, j, SourceWS, NewWB, NewName, Step, StartRow
Step = 3
StartRow = 2

Set EX = CreateObject("Excel.Application")
FileName = EX.GetOpenFilename("Файлы Excel, *.xl*")
If FileName <> False Then
  EX.ScreenUpdating = False
  Set SourceWS = EX.Workbooks.Open(FileName).Worksheets(1)
  Set NewWB = EX.Workbooks.Add

  i = StartRow
  j = 2
  With NewWB.Worksheets(1)
    .Range("A1:S1") = Array("К", "Метро", "адрес", "ОтМ", "Дом", "Площадь", "Б", "Т", "С", "П", "И", _
                           "Цена,р", "Цена,$", "Цена,e", "$/кв.", "Дата", "СМИ", "Телефоны", "Примечание")

    While SourceWS.Cells(i, 1) <> ""
      .Cells(j, 1).Value = SourceWS.Cells(i, 1).Value
      .Cells(j, 2).Value = SourceWS.Cells(i, 2).Value
      .Cells(j, 3).Value = SourceWS.Cells(i + 1, 2).Value
      .Cells(j, 4).Value = SourceWS.Cells(i, 3).Value
      .Cells(j, 5).Value = SourceWS.Cells(i, 4).Value
      .Cells(j, 6).Value = SourceWS.Cells(i, 5).Value
      .Cells(j, 7).Value = SourceWS.Cells(i, 6).Value
      .Cells(j, 8).Value = SourceWS.Cells(i, 7).Value
      .Cells(j, 9).Value = SourceWS.Cells(i, 8).Value
      .Cells(j, 10).Value = SourceWS.Cells(i, 9).Value
      .Cells(j, 11).Value = SourceWS.Cells(i, 10).Value
      .Cells(j, 12).Value = SourceWS.Cells(i, 11).Value
      .Cells(j, 13).Value = SourceWS.Cells(i + 1, 11).Value
      .Cells(j, 14).Value = SourceWS.Cells(i + 2, 11).Value
      .Cells(j, 15).Value = SourceWS.Cells(i, 12).Value
      .Cells(j, 16).Value = SourceWS.Cells(i, 13).Value
      .Cells(j, 17).Value = SourceWS.Cells(i + 1, 13).Value
      .Cells(j, 18).Value = SourceWS.Cells(i, 14).Value
      .Cells(j, 19).Value = SourceWS.Cells(i, 15).Value
      i = i + Step
      j = j + 1
    Wend
    .Columns("A:R").EntireColumn.AutoFit
  End With


  NewName = Left(FileName, InStrRev(FileName, ".") - 1) + "_chiv"
  NewWB.SaveAs NewName
  MsgBox "Создан файл: '" + NewName + "'"
End If
EX.Quit
Set EX = Nothing

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


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

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

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