Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2010, 18:24   #21
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от alvazor Посмотреть сообщение
Для любопытствующих
Но ошибки по памяти не происходит!?
Затрачено - 35,3 сек, ошибок, НЕТ.
Запускал три раза
valerij вне форума Ответить с цитированием
Старый 09.04.2010, 18:28   #22
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Посмотрите и проверьте. Что не устраивает?
Да, работает быстро. Но можно ли вставлять на несколько листов сразу? У меня вставилось только на один.
Подумаю, все ли здесь нормально. Вот бы еще и добавление примечаний так ускорить.
motorway вне форума Ответить с цитированием
Старый 09.04.2010, 20:41   #23
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
можно ли вставлять на несколько листов сразу?
Макрос обрабатывает все листы, имена которых есть в текстовой строке. Проверьте. добавьте непустые значения в txt строку в разные ячейки разных листов и выполните макрос.
Цитата:
Вот бы еще и добавление примечаний так ускорить.
С примечаниями такой фокус не пройдет, т.к. примечание - это свойство ячейки. А как уже говорилось, действия с ячейками рабочего листа выполняется существенно медленнее.

P.S.
Для проверки, выполнил макрос, который заносит в массив значения из диапазона ячеек "A1:IV65536" (все ячейки листа Excel 2003), затем значения из этого массива помещаются в ячейки рабочего листа. Ошибок не возникает.
Код:
Sub Test()
    Dim x As Range, a(): Application.ScreenUpdating = False
    Set x = [A1:IV65536]
    a = x.Value 'из листа в массив
    x.Value = a 'из массива на лист
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 09.04.2010, 21:27   #24
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Да, с листами получилось.
motorway вне форума Ответить с цитированием
Старый 09.04.2010, 23:35   #25
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

К этой проблеме добавилась другая: пробую послать такую строку около 200 кб на сервер с помощью WinHTTPRequest.Send, и это занимает около 2 минут - поставил msgbox перед и после метода .Send - 2 минуты! Что-то странно. Сервер на локалхосте. Может, и здесь какая-то загвоздка?
motorway вне форума Ответить с цитированием
Старый 23.04.2010, 21:26   #26
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Уважаемый SAS888, а не могли бы Вы немного модифицировать свою быструю процедуру для случая, если парсить надо строку немного другого вида (приложена) и вставлять данные на листы?
Здесь надо помещать на лист ячейки перед ~~~PROLOG~~~ в строке
Вложения
Тип файла: txt restext.txt (223.0 Кб, 148 просмотров)
motorway вне форума Ответить с цитированием
Старый 25.04.2010, 00:53   #27
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Да, здесь еще забыл добавить, что нужно вставлять на лист только данные из получаемой строки, существующие на нем данные трогать не надо.
motorway вне форума Ответить с цитированием
Старый 26.04.2010, 00:29   #28
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Также вопрос: допустим, у нас есть строка такого вида, как в файле, и нужно у названий ячеек на к-н. листе увеличить или уменьшить адрес (как при удалении/вставке строк/столбцов). Как это лучше сделать - обрабатывать эту строку в виде текста или поместить данные из нее на временный лист, затем сделать соотв. сдвиг с помощью Selection.Insert Shift, а затем сформировать такую же новую строку и уже из нее читать данные?
motorway вне форума Ответить с цитированием
Старый 26.04.2010, 07:45   #29
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Как это лучше сделать - обрабатывать эту строку в виде текста или поместить данные из нее на временный лист
Я бы предложил третий вариант: переделать формат txt-файла.

1) формируем текстовый файл такого формата:
Код:
ИмяЛиста1#АдресПервойЯчейки#ВысотаДиапазона#ШиринаДиапазона###
МассивЗначений### (разделитель значений и разделитель строк различаются)
ИмяЛиста2#АдресПервойЯчейки#ВысотаДиапазона#ШиринаДиапазона###
МассивЗначений###
ИмяЛиста3#АдресПервойЯчейки#ВысотаДиапазона#ШиринаДиапазона###
МассивЗначений###
К примеру, получится такой файл:
Цитата:
Лист1
1,5,1500,18
22`87`66`77```83`4`2``0`90`6@
22`87``75```83`8`2``0`90`6@
22`87`66`77```83`4`2``0`90`6@
11``6`77``55`83`4`2``0`90`6@

Лист2
4,6,1200,15
22`87`66`77```83`4`2``0`@
и т.д.
Это позволит значительно уменьшить объём файла (не будет множества повторяющихся имён листа)

2) Считывание данных производим в двумерный массив
Т.е. делаем некую функцию, которая принимает в качестве параметра текстовую строку, а возвращает двумерный массив.
Этот массив потом одной строкой кода записываем на лист, начиная с любой ячейки любого столбца.

Последний раз редактировалось EducatedFool; 26.04.2010 в 07:50.
EducatedFool вне форума Ответить с цитированием
Старый 26.04.2010, 08:45   #30
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

EducatedFool +1. Идею поддерживаю. Только вот
Цитата:
Этот массив потом одной строкой кода записываем на лист...
так не пойдет, потому, что автору требуется
Цитата:
вставлять на лист только данные из получаемой строки, существующие на нем данные трогать не надо
а вставка массива "затрет" имеющиеся данные. Ну, это уже детали. Эта проблема решается, например, способом, предложенным в примере поста № 14.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задачи: на двумерные массивы,обработку строк,обработку текстовых файлов. (Паскаль) Yaro Помощь студентам 2 12.11.2009 12:55
Как ускорить попиксельную обработку изображения Дамир Общие вопросы .NET 1 02.11.2009 12:40
Сравнение текста InStr() SoFuWa Microsoft Office Excel 7 22.07.2009 14:38
Сравнение Instr(), Строчине и прописные буквы SoFuWa Microsoft Office Excel 2 30.05.2009 16:20