Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос для переноса данных - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Макрос для переноса данных
maloy Дата: Среда, 17.10.2012, 22:17 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±



У меня получился вполне работоспособный макрос, не без вашего участия сильные мира сего,конечно. Буду рад предложениям по оптимизации данного кода.
Выложить могу только файл из которого собираются данные, файл В КОТОРЫЙ они собираются выложить не могу потому что в оригинале он весит 318кб, а WinRar напрочь отказывается уложить его в заявленные 100Кб. Но думаю если макрос вставить в любой, даже новый документ проблем вроде бы возникнуть не должно......

Я ведь просил - оформлять код тегами! если непонятно - кнопочка соответствующая есть, с решёточкой!
Ну заодно ещё и отступы расставил, а то читать невозможно...
Модератор.
К сообщению приложен файл: Attachment_to_p.rar (49.2 Kb)
 
Ответить
Сообщение


У меня получился вполне работоспособный макрос, не без вашего участия сильные мира сего,конечно. Буду рад предложениям по оптимизации данного кода.
Выложить могу только файл из которого собираются данные, файл В КОТОРЫЙ они собираются выложить не могу потому что в оригинале он весит 318кб, а WinRar напрочь отказывается уложить его в заявленные 100Кб. Но думаю если макрос вставить в любой, даже новый документ проблем вроде бы возникнуть не должно......

Я ведь просил - оформлять код тегами! если непонятно - кнопочка соответствующая есть, с решёточкой!
Ну заодно ещё и отступы расставил, а то читать невозможно...
Модератор.

Автор - maloy
Дата добавления - 17.10.2012 в 22:17
Serge_007 Дата: Среда, 17.10.2012, 23:02 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (maloy)
файл В КОТОРЫЙ они собираются выложить не могу потому что в оригинале он весит 318кб, а WinRar напрочь отказывается уложить его в заявленные 100Кб

maloy, Как быть есть ли пример весит более 100 кб?

Кроме того, оформляйте макросы тегами [vbа][cоde][/cоde][/vbа], а большие тексты макросов ещё и тегами [spоiler][/spоiler]


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (maloy)
файл В КОТОРЫЙ они собираются выложить не могу потому что в оригинале он весит 318кб, а WinRar напрочь отказывается уложить его в заявленные 100Кб

maloy, Как быть есть ли пример весит более 100 кб?

Кроме того, оформляйте макросы тегами [vbа][cоde][/cоde][/vbа], а большие тексты макросов ещё и тегами [spоiler][/spоiler]

Автор - Serge_007
Дата добавления - 17.10.2012 в 23:02
Hugo Дата: Среда, 17.10.2012, 23:05 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
[vba]
Code
Workbooks(oAwb).Sheets("Attachment to Invoice").Activate
[/vba]
вот это непонятно что зачем откуда...
Вообще всюду, где в коде написано Range или Cells - желательно явно указывать, чьё это хозяйство.
Вот как тут:
[vba]
Code
ThisWorkbook.Sheets("Лист2").Cells(i, 1)
[/vba]
а тут чьё?
[vba]
Code
avArr = Range("C4:N2000").Value
[/vba]


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
Сообщение[vba]
Code
Workbooks(oAwb).Sheets("Attachment to Invoice").Activate
[/vba]
вот это непонятно что зачем откуда...
Вообще всюду, где в коде написано Range или Cells - желательно явно указывать, чьё это хозяйство.
Вот как тут:
[vba]
Code
ThisWorkbook.Sheets("Лист2").Cells(i, 1)
[/vba]
а тут чьё?
[vba]
Code
avArr = Range("C4:N2000").Value
[/vba]

Автор - Hugo
Дата добавления - 17.10.2012 в 23:05
Hugo Дата: Среда, 17.10.2012, 23:14 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Не нравится вот это место:

Зачем активировать непонятный файл?
Чей диапазон?
Почему нужно 2000*2000 раз перебирать ячейки? (ну почти столько... smile )
Причём кажется переписывая данные поверх много раз - хотя без файла влом всё детально просчитывать в голове...


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеНе нравится вот это место:

Зачем активировать непонятный файл?
Чей диапазон?
Почему нужно 2000*2000 раз перебирать ячейки? (ну почти столько... smile )
Причём кажется переписывая данные поверх много раз - хотя без файла влом всё детально просчитывать в голове...

Автор - Hugo
Дата добавления - 17.10.2012 в 23:14
maloy Дата: Четверг, 18.10.2012, 00:03 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

Обо всём по порядку.
1) Извините за то что неправильно оформил, но это мой первый опыт, а если учесть что я на форуме только сегодня зарегился, то простить мне это можно будет без труда.
2) и по существу. Обратится к конкретному файлу можно лишь в одном случае, если ты на 1000% уверен что при любых обстоятельствах ты будешь обращатся именно к нему. А так как выбор файла предоставлен пользователю, то такой гарантии ни разу никто не даст, поэтому имя файла заносится в переменную и от сюда
Workbooks(oAwb).Sheets("Attachment to Invoice").Activate
Вся прелесть заключается в том что только название листа в книге от куда берутся данные остаётся постоянным, сами книги носят различные имена.
avArr = Range("C4:N2000").Value - Это диапазон из файла в приложении, опять же повторюсь, эти файлы бывают различны, количество наименований в них может быть от 5 до 1500( это максимально сколько я видел), но бог его знает как дальше дело пойдёт, поэтому диапазон такой большой.
Вам не кажется, данные действительно постоянно надо перезаписывать, так как данный документ является шаблоном. То есть данные внесли, нажали "сохранить как". Очистили шаблон и по новой.....
Надеюсь всё понятно объяснил...... Хотя сдаётся мне у меня с этим явные проблемы)))
 
Ответить
СообщениеОбо всём по порядку.
1) Извините за то что неправильно оформил, но это мой первый опыт, а если учесть что я на форуме только сегодня зарегился, то простить мне это можно будет без труда.
2) и по существу. Обратится к конкретному файлу можно лишь в одном случае, если ты на 1000% уверен что при любых обстоятельствах ты будешь обращатся именно к нему. А так как выбор файла предоставлен пользователю, то такой гарантии ни разу никто не даст, поэтому имя файла заносится в переменную и от сюда
Workbooks(oAwb).Sheets("Attachment to Invoice").Activate
Вся прелесть заключается в том что только название листа в книге от куда берутся данные остаётся постоянным, сами книги носят различные имена.
avArr = Range("C4:N2000").Value - Это диапазон из файла в приложении, опять же повторюсь, эти файлы бывают различны, количество наименований в них может быть от 5 до 1500( это максимально сколько я видел), но бог его знает как дальше дело пойдёт, поэтому диапазон такой большой.
Вам не кажется, данные действительно постоянно надо перезаписывать, так как данный документ является шаблоном. То есть данные внесли, нажали "сохранить как". Очистили шаблон и по новой.....
Надеюсь всё понятно объяснил...... Хотя сдаётся мне у меня с этим явные проблемы)))

Автор - maloy
Дата добавления - 18.10.2012 в 00:03
maloy Дата: Четверг, 18.10.2012, 00:07 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

А вот и тот документ где должен стоять вышеуказанный макрос. пришлось удалить всё, чтобы поместить сюда
К сообщению приложен файл: -141.rar (59.7 Kb)
 
Ответить
СообщениеА вот и тот документ где должен стоять вышеуказанный макрос. пришлось удалить всё, чтобы поместить сюда

Автор - maloy
Дата добавления - 18.10.2012 в 00:07
Hugo Дата: Четверг, 18.10.2012, 00:31 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
1. Хорошо, впредь не забывайте - так ведь аккуратнее и читать код легче.
2. Тут Вы не правы. Тем более что файл выбирает пользователь ( в диалоге ведь выбирает) - значит известен путь к файлу, он открывается:
[vba]
Code
Workbooks.Open Filename:=avFiles(li)
[/vba]
Так открывайте так:
[vba]
Code
Set wb = Workbooks.Open(avFiles(li)) ' открываем файл
[/vba]
и затем далее например так:
[vba]
Code
avArr = wb.Sheets("Attachment to Invoice").Range("C4:N2000").Value    'выбор диапазона значений в исходном листе
[/vba]

Ну в общем там у Вас есть связь avFiles(li)/oAwb/Workbooks(oAwb), но это шатко и ненадёжно...
А если нужно работать с открытым ранее неизвестным файлом - всегда можно поймать момент, когда он активен, и получить ссылку
[vba]
Code
Set wb = ActiveWorkbook
[/vba]
По перезаписи - например у Вас i=10 в худшем случае 2000 раз (это внутренний цикл).
Это значит, что возможно в ячейку Cells(10, 1) 2000 раз будет записываться значение из avArr(lr, 8). Зачем?


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
Сообщение1. Хорошо, впредь не забывайте - так ведь аккуратнее и читать код легче.
2. Тут Вы не правы. Тем более что файл выбирает пользователь ( в диалоге ведь выбирает) - значит известен путь к файлу, он открывается:
[vba]
Code
Workbooks.Open Filename:=avFiles(li)
[/vba]
Так открывайте так:
[vba]
Code
Set wb = Workbooks.Open(avFiles(li)) ' открываем файл
[/vba]
и затем далее например так:
[vba]
Code
avArr = wb.Sheets("Attachment to Invoice").Range("C4:N2000").Value    'выбор диапазона значений в исходном листе
[/vba]

Ну в общем там у Вас есть связь avFiles(li)/oAwb/Workbooks(oAwb), но это шатко и ненадёжно...
А если нужно работать с открытым ранее неизвестным файлом - всегда можно поймать момент, когда он активен, и получить ссылку
[vba]
Code
Set wb = ActiveWorkbook
[/vba]
По перезаписи - например у Вас i=10 в худшем случае 2000 раз (это внутренний цикл).
Это значит, что возможно в ячейку Cells(10, 1) 2000 раз будет записываться значение из avArr(lr, 8). Зачем?

Автор - Hugo
Дата добавления - 18.10.2012 в 00:31
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!