|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.10.2011, 13:17 | #1 |
Регистрация: 30.09.2011
Сообщений: 5
|
макрос формирования и выгрузки файла txt (оптимизация)
Уважаемые, прошу подсказки для оптимизации имеющегося кода..
поскольку с VBA не знакома совершенно, код из рубрики "проще и тупее". Из исходного листа (план) считываются данные по столбцам и по определенным (прописанным в коде) условиям заполняется итоговый лист (выгрузка) (некоторые значения ячеек переносятся из плана, некоторые заполняются константами). Проблема в том, что при значительном объеме данных на плановом листе (а предполагается порядка тысячи строк), этот макрос будет отрабатывать уйму времени.. по такому поводу прошу помощи. во вложении-ОНО З.Ы.: еще один вопрос возник - при выгрузке суммы с разделителем десятичних (к примеру, 3.5 рубля (или 3,5 рубля)) и точка и запятая в txt преобразовываются в точку..возможно ли как-то указать, чтобы запятая оставалась запятой и в выгруженном файле? |
07.10.2011, 13:36 | #2 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Код удивительно похож на тот, что обсуждали на планете...
Я там посоветовал на массивы переходить - будет быстрее. Практически сделать нет времени, да и желания тоже - уж больно муторно...
webmoney: E265281470651 Z422237915069 R418926282008
|
07.10.2011, 13:54 | #3 | |
Регистрация: 30.09.2011
Сообщений: 5
|
Цитата:
про массивы что-то слышала, но практическую реализацию этого не представляю.. |
|
07.10.2011, 15:24 | #4 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
webmoney: E265281470651 Z422237915069 R418926282008
|
07.10.2011, 19:51 | #5 |
Форумчанин
Регистрация: 14.02.2009
Сообщений: 753
|
Если необходимо сохранять в текстовик, то может имеет смысл сразу и записывать в текстовик?
Да и для обработки лучше считать в массив - значительно быстрей будет
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru |
08.10.2011, 02:42 | #6 |
Форумчанин
Регистрация: 14.02.2009
Сообщений: 753
|
Дёрнул же меня чёрт протестировать на 10000 строк зтот Sub MergeData()
Вот результат время начала 0:42:39 время окончания 1:21:37 Задания не знаю. Поэтому не знаю требований. Приблизительно по коду перевёл на массивы. Заголовки не выводил. Разделитель поставил точку с запятой, а то в комментариях могут быть пробелы. Вообщем формат надо уточнить. На счёт точек-запятых надо реальный файл. А пока результаты такие время начала 1:30:53 время окончания 1:30:54 для тех же 10000. Код:
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru Последний раз редактировалось alex77755; 08.10.2011 в 02:49. |
08.10.2011, 03:05 | #7 |
Форумчанин
Регистрация: 14.02.2009
Сообщений: 753
|
Так лучше и с заголовками
Код:
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru Последний раз редактировалось alex77755; 08.10.2011 в 03:31. |
09.10.2011, 23:06 | #8 |
Регистрация: 30.09.2011
Сообщений: 5
|
ВАУ! работает действительно моментально, спасибо Вам, волшебный человек! Надеюсь, немного разберусь с реализацией и смогу в дальнейшем адаптировать под изменения формы, единственный момент-для выгрузки нужен файл txt с разделителями табуляции...при таком методе работы с итоговым файлом (open #1, close #1) возможно ли как-то дополнительно задавать формат?
А по поводу выгрузки в txt значений из поля Сумма с разделителем десятичных "." - даже в файле-примере сумму 1233,5 выгружается как 1233.5 ... наверное, придется решать вопрос с запятой уже при загрузке в стороннюю систему, заменяя . насильно.. |
10.10.2011, 13:22 | #9 |
Форумчанин
Регистрация: 14.02.2009
Сообщений: 753
|
Вроде так получается. Только с заголовками проблема
Код:
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru |
10.10.2011, 15:24 | #10 | |
Регистрация: 30.09.2011
Сообщений: 5
|
Цитата:
с таким вариантом пробовала-но в итоговом файле вместо табуляции ставит почему-то 8 пробелов. Остановилась на таком варианте (с заголовками, вроде, тоже все хорошо): Print #1, ZAG(1, C); vbTab; Next Print #1, For R = 14 To UBound(M) If M(R, 13) <> 0 Then 'условие наличия потребности в МТР Трубы 'x = Trim M(R, 1) Print #1, Trim(CON(3, 2)); vbTab; Trim(M(R, 1)); vbTab; Trim(M(R, 2)); vbTab; Trim(M(R, 3)); vbTab; Trim(CON(4, 2)); vbTab; Trim(CON(9, 2)); vbTab; Trim(CON(5, 2)); vbTab; Trim(M(R, 4)); vbTab; Trim(CON(6, 2)); vbTab _ ; Trim(M(R, 5)); vbTab; Trim(M(R, 6)); vbTab; Trim(M(R, 7)); vbTab; Trim(M(R, 8)); vbTab; Trim(M(R, 9)); vbTab; Trim(M(R, 10)); vbTab; Trim(CON(7, 2)); vbTab; Trim(CON(2, 2)); vbTab; Trim(M(R, 12)); vbTab; Trim(CON(8, 2)); vbTab; Trim(CON(10, 2)); vbTab; Trim(M(R, 13)); vbTab End If TRIM пришлось добавлять везде, поскольку с vbTab местами возникали лишние пробелы..коряво, конечно, но работает! Спасибо Вам огромное за помощь! |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Макрос для формирования прайса | Петро1 | Microsoft Office Excel | 3 | 01.08.2011 20:42 |
Макрос для формирования списка | OscarWilde | Microsoft Office Excel | 5 | 26.12.2010 15:27 |
Макрос для формирования таблицы на отдельном листе по номеру ID | eclat | Microsoft Office Excel | 30 | 07.08.2010 11:36 |
Макрос для формирования таблицы в Excel | konistra | Microsoft Office Excel | 6 | 28.05.2010 23:32 |
Для создания файла правил выгрузки в xml формате чем пользоваться и как? | Аэлита Ивановна | Помощь студентам | 0 | 15.02.2010 12:53 |