|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
16.03.2015, 13:36 | #11 | |
Участник клуба
Регистрация: 17.07.2009
Сообщений: 1,088
|
Цитата:
Код:
Т.к. Rows является диапазоном, а диапазон без явного указания родительского объекта будет сопоставлен и отнесен к тому объекту, в котором код, то будет следующее: Rows.Count = 1048576 И .Cells листа .xls просто не пример значение 1048576 и выдаст ошибку. Но в данном случае, полагаю, этого не будет. Но я лично по привычке часто ставлю точку перед Rows(если использую ссылку With). Не ставлю только если 100% уверен в невозможности описанной выше ситуации. Кстати, ситуация обратная(код в модуле листа .xls, а активен лист .xlsm) - это еще более критичная ошибка. Т.к. ошибку VBE не получим, но если строк больше 65536 - то последняя строка будет определена неверно...Что повлечет ошибки внутри логики кода - данные будут обработаны не все.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru |
|
16.03.2015, 13:51 | #12 |
Форумчанин
Регистрация: 27.10.2014
Сообщений: 248
|
Код от Казанского отработал на отлично! Огромное спасибо!!!
В моем случае объем исходной таблицы никогда не будет более 5000 строк. Макрос запускается из .xlsb и формирует два документа .xls., которые по окончании работы макроса вкладываются в письмо Outlook Подумал, что формат исходной таблицы слишком много весит и добавил код на преобразования текста в число Время на работу макроса сократилось до 1 минуты В итоге получилось следующее [Sheets("Выгрузка").Select 'преобразование текста в число For u = 1 To 12 Columns(u).Select Selection.TextToColumns Destination:=Cells(1, u), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _ :=Array(1, 1), TrailingMinusNumbers:=True Next ' очистка листов For i = 3 To ThisWorkbook.Sheets.Count Sheets(i).Select Rows("1:1").AutoFilter 'снятие фильтра Cells.Clear 'очищение Next ' Копирование данных With Worksheets("Выгрузка") lLastRow = .Cells(Rows.Count, 1).End(xlUp).Row ' Set r = .Range(.Cells(1, 1), .Cells(lLastRow, 25)) End With ' вставка на листы For i = 3 To ThisWorkbook.Sheets.Count r.Copy ThisWorkbook.Sheets(i).Range("A1") Next][/CODE] |
16.03.2015, 14:05 | #13 |
Старожил
Регистрация: 31.12.2010
Сообщений: 2,133
|
Hugo121, The_Prist,
да, упустил точку, уже исправил.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
|
16.03.2015, 14:56 | #14 |
Старожил
Регистрация: 31.12.2010
Сообщений: 2,133
|
Наверно, быстрее будет удалить листы и создать снова, с теми же именами:
Код:
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
|
16.03.2015, 15:15 | #15 |
Форумчанин
Регистрация: 27.10.2014
Сообщений: 248
|
Уважаемый Казанский, еще раз огромное Вам спасибо за код по копированию данных, реально выручили!
По поводу очистки листов - быстрее работает с моим кодом - 34 с, если удалять листы, как предложили Вы, то 1 мин 6 с. |
25.03.2015, 19:54 | #16 |
Новичок
Джуниор
Регистрация: 25.03.2015
Сообщений: 1
|
Использование памяти Excel
Прочитайте про причины переполнения оперативной памяти в Excel
http://www.timpust.ru/vba/memory/ Excel имеет следующие ограничения по оперативной памяти: Для 64-разрядной версии Excel 2010 не действует ограничение в 2 Gb Microsoft Excel 2007 2Gb Microsoft Excel 2003 1Gb Microsoft Excel 2002 128Mb Microsoft Excel 2000 64Mb Лекарство: в конце кода чистим переменные из памяти tmpDim = Empty 'Опустошаем переменную Erase tmpArr 'Стираем массив Set tmpObject = Nothing 'Стираем объект |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите найти ошибку ну или недостаток в программе | Литвачок | Visual C++ | 0 | 07.11.2013 20:51 |
Видюха 6600gt и недостаток ее питания | BlackOff_Max | Компьютерное железо | 11 | 27.02.2012 12:25 |
Недостаток в "Расчет средней оценки" | roxy7 | Microsoft Office Excel | 3 | 12.12.2011 13:21 |
Кольцевая очередь на массиве в статической памяти с элементами в динамической памяти | ]tach[ | Общие вопросы C/C++ | 1 | 19.01.2011 13:16 |
Недостаток информации | Квэнди | Свободное общение | 1 | 03.04.2007 16:23 |