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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2014, 12:08   #11
domo22
Пользователь
 
Регистрация: 28.03.2009
Сообщений: 18
По умолчанию

doober, для вас и для остальных - более реальный пример базы и желаемого результата. Надеюсь на помощь.
Пример
domo22 вне форума Ответить с цитированием
Старый 20.10.2014, 17:58   #12
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Цитата:
Сообщение от domo22 Посмотреть сообщение
Hugo121, я не совсем понимаю, перед экспортом вставить оператор
Код:
ActiveWorksheet.Range("A:H").NumberFormat = "@"
или как?
Да. Или прямо перед значением добавляйте апостроф.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 20.10.2014, 19:07   #13
domo22
Пользователь
 
Регистрация: 28.03.2009
Сообщений: 18
По умолчанию

Hugo121, спасибо, но как-то оно не так работает. После экспорта остаются ячейки с ошибками: #ИМЯ?
domo22 вне форума Ответить с цитированием
Старый 20.10.2014, 19:45   #14
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

а что мешает попробовать прежде, чем задавать вопрос?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 20.10.2014, 23:28   #15
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Если и этот макрос не так работает,то иду выращивать капусту.
Вложения
Тип файла: rar Результат-новый.rar (39.5 Кб, 22 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 23.10.2014, 11:22   #16
domo22
Пользователь
 
Регистрация: 28.03.2009
Сообщений: 18
По умолчанию

doober
Вообще-то, выращивание капусты тоже дело хорошее. Но вижу, что макросы писать Вы таки точно умеете.

После интенсивного тестирования оказалось, что макрос на большинстве баз выполняет свою работу почти безукоризненно - четко и правильно.
Особенно понравилось, что часть условий вынесена в раздел Константы, так намного проще управлять макросом. Можно было бы еще добавить в константы интервал столбцов с идентификаторами, т.к. оказалось, что иногда это A:C иногда A:F или A:D. Да и комментарии кода не помешали бы для понимания.
Искреннее вам спасибо за такую хорошую работу и потраченное время.

Однако, поскольку в мире нет ничего идеального, то ложка дегтя будет такой:

1) на отдельных базах макрос вылетает с ошибкой
"Runtime error 7 - Out of memory"
на строке
Sh.Cells(XX.Row, 10) = ArrayBase.Item(Key)
Я пытаюсь сейчас найти точное место, которое приводит к ошибке. Хочу спросить, нет ли для этого кода какого-то заведомо известного ограничения - типа особый символ в записи, что всегда даст ошибку, или размер отдельной записи, например, не более 32 или 64Кб?

2) макрос чувствителен к регистру. Иногда это хорошо, иногда плохо. Можете ли Вы добавить константу, например РЕГИСТР, если она false или 0, макрос работает как сейчас, если true или 1 - макрос учитывает регистр?
Это не критично, но если можно, то было бы гораздо лучше.

3) почему-то часть ячеек, для идентификаторов которых не найдена запись, остаются пустыми, а часть со строкой "<Not found>". А тут нужна ясность, ведь потом мне еще нужно будет писать макрос, чтобы переместить все такие строки на отдельный лист для удаления или исправления.
Поэтому если такое возможно - то либо везде "<Not found>", либо пусто, но везде одинаково (а еще лучше и красным цветом).

4) на время работы макроса все замирает. Даже как-то жутко - 5, 10, 15 мин ничего не происходит, пока макрос не отработает. Не знаешь, то ли перегружать ПК, то ли еще ждать. Можно ли добавить какую-то инфу типа "запись хх из хх" в строку статуса или отдельное окошко, чтобы показать, что макрос жив и здоров? Это, конечно, замедлит работу, но будет спокойнее, да и всегда можно закомментировать.

И последнее. Наверно, это самое важное. Очень хотелось бы (да это и необходимо) проверить правильно ли макрос все обрабатывает. Лучший для меня способ для этого - сравнить новую базу с исходной как текст.
Найдется ли у Вас время, хотя бы в ближайшую неделю-две, написать макрос, который запишет базу обратно в текстовый файл? Конечно, с возвратом строк НАЧАЛО, КОНЕЦ и т.п., кроме тех переводов строки, которые удалены при импорте. Там Excel наверно захочет поставить вокруг каждой строки двойные кавычки, поэтому нужен будет нестандартный подход или макрос просто запишет как есть, а потом откроет Word и в нем удалит кавычки и сохранит.

Последний раз редактировалось domo22; 23.10.2014 в 11:27.
domo22 вне форума Ответить с цитированием
Старый 24.10.2014, 13:12   #17
domo22
Пользователь
 
Регистрация: 28.03.2009
Сообщений: 18
По умолчанию

Я разобрался почему макрос doober вылетает - когда размер записи более 64Кб. В этом случае лучшим решением было бы наверно проверять размер каждой записи и если она слишком велика - в нужную ячейку напротив идентификатора писать строку "<Too big>" и возможно писать это или заливать красным цветом.
domo22 вне форума Ответить с цитированием
Старый 04.11.2014, 18:19   #18
domo22
Пользователь
 
Регистрация: 28.03.2009
Сообщений: 18
По умолчанию

doober, была ли у Вас возможность посмотреть можно ли устранить ошибку краха макроса на записях размером более 64Кб?
Пример
domo22 вне форума Ответить с цитированием
Старый 04.11.2014, 20:34   #19
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Это не крах макроса,это слишком большие строки
Внесите изменения в этот фрагмент.
Код:
'.................................
    If Not XX Is Nothing Then
            SS = ArrayBase.Item(Key)
            If Len(SS) < 64000 Then
                Sh.Cells(XX.Row, 10) = SS
            Else
                Sh.Cells(XX.Row, 10) = "<Too big>"
                Sh.Cells(XX.Row, 10).Interior.Color = 255
            End If

        End If
'............................................
Цитата:
Найдется ли у Вас время, хотя бы в ближайшую неделю-две, написать макрос, который запишет базу обратно в текстовый файл? Конечно, с возвратом строк НАЧАЛО, КОНЕЦ и т.п., кроме тех переводов строки, которые удалены при импорте. Там Excel наверно захочет поставить вокруг каждой строки двойные кавычки, поэтому нужен будет нестандартный подход или макрос просто запишет как есть, а потом откроет Word и в нем удалит кавычки и сохранит.
Только под заказ.
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 06.11.2014, 17:36   #20
domo22
Пользователь
 
Регистрация: 28.03.2009
Сообщений: 18
По умолчанию

Да, внесенные изменения обеспечили работу макроса даже с базами, имеющими очень большие по размеру записи. Огромное спасибо Вам за помощь, doober
domo22 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Импорт Большого текстового файла (14 млн. строк) с разбиением strannick Microsoft Office Excel 15 01.02.2014 12:55
Есть ли способ вставлять кнопки в ячейки таблицы? Serhantes Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 0 27.02.2013 13:54
Обработка большого текстового файла и составление по нему отчета erosss Помощь студентам 6 05.05.2010 13:18
нужно читать слова с текстового файла artush1984 Общие вопросы C/C++ 1 18.09.2009 16:12
Вставлять ячейки через поля слияния Nash1 Фриланс 3 09.07.2009 14:07