Новости:

Прикрепить к сообщению можно только файлы xls, gif, jpg, rar, zip,7z, bas, frm, cls, doc размером до 150 Кб.

Главное меню

Запутался с копированием строк

Автор ViktorG, 04.10.2012, 16:26

« назад - далее »

Poltava

Цитироватьс этого нужно было начинать. По моему предыдущий код сразу уходит в мусор
sm_alik Да именно так старый код можно выбрасывать почти полностью! О таких вещах нужно сразу говорить! правильно поставленная задача это уже половина решения!
Тогда обьясните мне такие моменты:
1)В конце списка есть пустая строка и потом крякозяблы что с ними делать? удалить или сдвигать в низ?
2)Как будет обновляться лист с которого будет раскидываться информация? заменяться новым или дополняться данными? будет ли у этого листа постоянное название?
3)Сколько строк вы планируете задействовать 100-1000-10000-1000000 хоть приблизительно!
4)Нужно ли делать отметку о том когда данные были внесены на лист если нужно то где ее располагать! и какую отметку ставить, дату когда данные были разнесены или еще какую?
5)Я так понимаю название листа должно быть просто название отделения без какого либо номера?
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

ViktorG

1) Крякозяблы и пустая строка по усмотрению (как Вам проще) они ни на что не влияют (можно удалить)
2) Данные на листе будут заменяться другими. постоянного названия не будет (единственное что будут начальные буквы NA****** или MA******, где * это цифровой порядковый номер)
3) Думаю не более 1000
4) отметок не нужно
5) все правильно понимаете.
Как-то так :-\

Poltava

Так опять не понял, как будет происходить обновление данных на листе! исходя из этого
ЦитироватьДанные на листе будут заменяться другими
Данные на листе будут удаляться а на их место будут вставляться новые!, а исходя из этого
Цитироватьпостоянного названия не будет
Вы собираетесь удалять лист а на его место записывать другой!
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

ViktorG

Было так: Данные на листе будут заменялись другими, а лист переименовывался вручную. Потому так и написал.
А может сделать так: имеем чистую книгу, нажатием на кнопку выбираем файл с данными, он обрабатывается (добавляются листы, заполняются строки). Затем нажимает еще раз выбираем следующий файл, он дополняет нашу книгу, первый лист с исходными данными переименовывается согласно имени открытого файла и т.д. И в конце файл->Сохранить как.. сохранит куда ей нужно и как ей нужно.

Poltava

#19
Вот посмотрите такой вариант
1)Листы названы согласно районов! (список районов в макросе сами сказали что ненужно будет пополнять потому не стал делать возможность интерактивного пополнения!)
2)При выборе очередной книги с данными данные добавляются в конец списка в соответствующем районе.
3)Все же добавил столбцы со служебной информацией(имя файла и листа с которого загружали данные а так же дата загрузки) если вам ненужно будет то комментируете вот эти 4 строки
           buf2 = .Cells(Rows.Count, 2).End(xlUp).Row
           .Range("N" & buf1 & ":N" & buf2).Value = Fname
           .Range("O" & buf1 & ":O" & buf2).Value = buf0
           .Range("P" & buf1 & ":P" & buf2).Value = Format(Now(), "DD-MM-YY")
           .Columns("N:P").Hidden = True: .Cells(1, 1).Select

и удалите процедуры СлужебнаяИнформатцияСкрыть и СлужебнаяИнформатцияПоказать просто я не представляю как можно будет отловить ошибочно загруженные данные без этих столбцов
3)Написал процедуру выгрузки результатов которая пересохраняет файл без макросов и листа управления
4)Для удобства добавил лист управление, в принципе его можно и удалить и запускать макросы как то по другому но как по мне кнопочки удобней
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

ViktorG

Огромное спасибо за труд. В понедельник проверю, покажу о результатах отпишусь.

ViktorG

#21
Все чудесно. То что доктор прописал. Еще раз ОГРОМНОЕ спасибо.
P.S.
Цитата: Poltava от 13.10.2012, 14:06

3)Написал процедуру выгрузки результатов которая пересохраняет файл без макросов и листа управления

Файл сохраняется без макросов но с листом управления.

Poltava

Прикрутил обработчик текстовых файлов. Теперь при нажатии на кнопку "Загрузить данные" внизу справа можно выбрать тип файлов которые нужно обрабатывать (*.xls* или *.txt)
- Исправил ошибку (при выгрузке не удалялся лист управления) почему не захотело работать через кодовые имена не знаю на работе у меня работало.  Теперь лист Управление НЕЛЬЗЯ переименовывать, при переименовании нужно изменить ссылку в коде на новое имя. можно еще сослаться на номер по порядку но тогда лист должен будет всегда быть первым или последним.
- Исправил ошибку возникающую при работе с файлом в 2007 офисе формате 2003 офиса (при попытке копирования вылетала ошибка из за несовпадения количества строк) пришлось немного переписать процедуры копирования
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

ViktorG

 При открытии файла во вложении выскакивает ошибка Type mismatch. И в отладчике высвечивается строка                                       
  ShName = ToMap(ArrayUnique(i, 1))                                                                 
В чем закавыка?

Poltava

Вот поправил, теперь обрабатывает корректно даже если в документе содержится только одна строка. Дело было в том что в функцию UniqueValuesFromArray вместо массива передавалась текстовая строка если диапазон состоял из 1 строки. Дописал функцию которая принудительно переделывает range в array и передает уже его. И также переделал массив с двухмерного в  одномерный.
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

ViktorG

Все работает.Еще раз спасибо.

ViktorG

#26
Уважаемый Poltava. Посмотрите пожалуйста макрос еще раз. Изменился входящий файл там убрали одну пустую строку в шапке и макрос перестал корректно работать в файлах с одной строкой (не зависимо от того добавляю я вручную строку или нет). Останавливается на строке
ShName = ToMap(ArrayUnique(i))
Помогите пожалуйста.
И можно ли сделать так, чтобы не было привязки к строке 18, потому что кто их знает как банк еще будет менять шапку.

Poltava

Если бы Вы запустили код в отладчике пошагово то могли увидеть что проблема в том что вместо одной строки он пытается скопировать 2 естественно захватив __ это и приводило к вылету кода так как то что процедура пыталась обработать не являлось числом а было текстом отсюдова и run-time error'13': type mismatch но это собственно следствия, а причина глубже и вы ее сами назвали, изменение структуры входящих файлов.
ЦитироватьИ можно ли сделать так, чтобы не было привязки к строке 18, потому что кто их знает как банк еще будет менять шапку.
Телепатией не я не компьютер пока не владеем :) Отвязать от 18 строки можно НО к чему то все равно нужно вязаться. Пока в голову приходит только открытие текстового файла поиск в нем последовательности "|   1" и определение строки в которой эта последовательность встретилась впервые.
+ Строка не имеет значения хоть 5 хоть 25
-  Список клиентов обязательно должен начинаться с этой последовательности "|   1" Если вдруг номер первого клиента будет 2 то код не сработает!
Старые строки кода я просто закомментил чтоб если что можно было просто вернуться к старому варианту и понятно было где нужно менять 18 на 17 или 15 или сколько там будет нужно.
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

ViktorG

Я уже ничего не понимаю. Сейчас ошибка выскакивает если количество клиентов больше чем 1

Poltava

ЦитироватьЯ уже ничего не понимаю. Сейчас ошибка выскакивает если количество клиентов больше чем 1
Все просто и понятно, в ваших файлах изменили еще и количество строк снизу, тоже убрали убрали пустую строку. Макрос изначально был написан как раз с учетом этих особенностей то есть известна начальная строка то есть 18, а последнею определяли как разницу между номером первой и номером ПЕРВОЙ ПУСТОЙ НИЖЕ 18 СТРОКИ, в пред идущей редакции я отвязал от номера строки заставив определять его через поиск "|   1" и посчитав количество ентеров, после того как убрали пустую строку снизу в диапазон стали попадать и строки с крокозяблами посему номер последней строки тоже определялся не правильно отсюдова и проблемы! отвязал номер последней строки и теперь и его определяю через поиск "_|" теперь главное чтобы список начинался с  "|   1" а заканчивался "_|" Пробуйте должно работать!
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.