Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Как ускорить передачу данных в Ёксель из VB6??? Добавлено: 28.04.05 10:40  

Автор вопроса:  ddasoft | Web-сайт: www.ddacore.com | ICQ: 209194603 
У меня в Ёкселе есть отчёт табличного вида, с кучей строк, который заполняется из ВБ. Использую я для этого такие комманды:

XLS.ActiveCell.Offset(r, c).Value = <"данные">

Где XLS - эт понятно определение Ёкселя,
потом с помощью FindCell(InitCell, SheetName) нахожу нужную ячейку для вставки последующих строк, и уже закидываю через ActiveCell.Offset(r, c).Value

НО! ... Тормозно оно както, несмотря на то что у меня Celeron 2,9 !!! ... приходиться ждать около 3-4 минуты до полного формирования отчёта, а эт дофига!!!
Есть есчё может какой-то метод заброски данных в Ёксель, более быстрый? может есть комманда заброски сразу целой строки через какой-то определённый разделитель ?

ХЕЛП! Очень нуна!
Заранее благодарен!

Ответить

  Ответы Всего ответов: 8  

Номер ответа: 1
Автор ответа:
 Александр GAG



Вопросов: 15
Ответов: 9
 Web-сайт: www.docadd.narod.ru
 Профиль | | #1
Добавлено: 28.04.05 12:25
Делаю так.

Dim objExcel As Excel.Application
Set objExcel = New Excel.Application
objExcel.Visible = True
objExcel.SheetsInNewWorkbook = 1
objExcel.Workbooks.Open ("C:\Kan\TAB.xls";)
With objExcel.ActiveSheet
        .Cells(1, 1).Value = ""
End With
objExcel.Quit
Set objExcel = Nothing

Ответить

Номер ответа: 2
Автор ответа:
 ddasoft



ICQ: 209194603 

Вопросов: 12
Ответов: 27
 Web-сайт: www.ddacore.com
 Профиль | | #2
Добавлено: 28.04.05 12:35
Ну так я так-же клепал, только искользовал ActiveCell.Offset ... но этот метод довольно долгий ...

Есть может какой-то разделитель ячеек, чтоб зделать как-бы так:
XLS.ActiveCell.Offset(r, c).Value = "1" & <разделитель> & "2" & <разделитель> & "3" & <разделитель> & "4" ... и т. д. ... ????
Как бы одной коммандой запулить туда сразу несколько колонок последовательно ...
Вот есть такое иль нет ? Кто знает .. :-(

Ответить

Номер ответа: 3
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #3 Добавлено: 28.04.05 13:25
Есть такое.

Принцип:
.range("a1:a10";).value=v

где v - переменная типа variant, содержащая массив значений.

Ответить

Номер ответа: 4
Автор ответа:
 ddasoft



ICQ: 209194603 

Вопросов: 12
Ответов: 27
 Web-сайт: www.ddacore.com
 Профиль | | #4
Добавлено: 28.04.05 13:52
Но при использовании .range("a1:a10";).value=v
Все значения будут одинаковы ... а мне нуна разные (свои) значения ...

Ответить

Номер ответа: 5
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #5 Добавлено: 28.04.05 17:27
Я же говорю, v - это variant, содержащий массив.

Ответить

Номер ответа: 6
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #6
Добавлено: 28.04.05 17:43
Так попробуй.

 Dim A As Variant
 A = Split("Elm1,Elm2,Elm3",",";)
 .range("a1:a10";).value=A

Ответить

Номер ответа: 7
Автор ответа:
 ddasoft



ICQ: 209194603 

Вопросов: 12
Ответов: 27
 Web-сайт: www.ddacore.com
 Профиль | | #7
Добавлено: 29.04.05 10:08
а можно как-то в строке range(...) вместо этих буквочек а,b,c ... указать номер колонки ?
т.е. как-бы так: range("01,01:22,01";) ??

Ответить

Номер ответа: 8
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #8 Добавлено: 29.04.05 12:37
.range(.cells(1,1),.cells(22,1)).value=v

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам