Спасибо.
Изменено: - 01.03.2025 11:07:53
|
09.01.2025 20:06:15
Hugo, спасибо, добрый и внимательный человек )
|
|
|
|
|
|
09.01.2025 19:05:02
Дмитрий(The_Prist) Щербаков, с одной ошибки перешли на другую )
object required на
|
|||
|
|
|
|
09.01.2025 18:34:00
МатросНаЗебре, спасибо за отзывчивость.
Поплыл на:
object doesn't support this property or method Полагаю возможно потому что макросы пишу в Outlook.
Msi2102, пока что pq отложил бы на второй план. Я правильно понимаю, что с помощью него не смогу в имеющийся таблице изменять имеющиеся значения, своего рода ВПР по всем позициям? Просто мельком почитал до этого, сложилось мнение, что происходит формирование именно новой таблицы после запроса, что мне не подходит. |
|||||
|
|
|
|
09.01.2025 17:30:00
Aлeкceй,
Итого затрачено времени на формирование массива 24 мин. 45 сек. |
|||
|
|
|
|
09.01.2025 17:03:39
Aлeкceй, я бы с радостью дал примеры, но файлы рабочие, и боюсь, содержат ту информацию, которую не желательно распространять, поэтому только так могу описывать всё.
Сейчас сделал заполнение массива по всем столбцам одного файла, вот в процессе вишу. Как закончу пришлю код и результат по времени.
Изменено: - 09.01.2025 17:07:48
|
|
|
|
|
|
09.01.2025 15:43:15
Всем доброго дня.
Я в продолжении темы снова за советом. Когда столкнулся с длительным временем на выполнение кода, решил разделить поэтапно. 2 эксель файла. В каждом много столбцов и очень много строк. Оказалось, что задача не только в добавлении новых позиций, которые появились в первом файле и должны появиться после работы макроса во втором, что я сделал по вашим советам, только без словаря, а через массивы. Оказалось нужно отслеживать изменения по всему первому файлу и вносить изменения во второй файл. Уже начал читать, в сторону power query, но так как важно не только спарсить информацию с одного файла в другой, а еще и оставить старую не совпадающую с первым файлом, вернулся к макросам. Изначально я создал массив второго экселя с уник. номерами, массив первого экслея содержал также уник. номера и номера строк в экселе тех позиций, которые новые. И добавлялись новые строки во второй эксель. Важно, что столбцов 17 штук, которые нужно переносить, из этих соображений в массивы их не добавлял, а потом по известным номерам строк присваивал эксель к экселю, так как даже 1 и 2 столбца занимали время: 00:02:48 - затраченное время на создание массива 1. 00:01:24 - затраченное время на создание массива 2. Сравнение каждого уник. номера одного массива с другим и добавление новых строк (примерно по тестам делал штук 30) занимало примерно 1-1,5 минуты. Это всё меня устраивало. Но когда выяснилось, что нужно сравнивать все 17 столбцов по всем позициям, начал думать. 1 вариант у меня был, также искать совпадения с массивов по уник. номерам и равнять по всем 17 столбцам все значения, всё равно перенос данных, зачем сверять, подумал я. Взял в тест 700 строк, на поиск и обновление заняло 4 минуты, а строк у меня только в одном примере в 51 раз больше, то есть почти 3,5 часа займет. 2 вариант поиск также по уник. номерам, а дальше просмотр есть ли изменения в нужных мне столбцах по строкам и если есть изменения, то напрямую равняю эксель к экселю по этой строке по столбцам. Тот же тест - расчетное время примерно 2 часа. Уже лучше, но всё равно, долго. 3 вариант, который еще не протестировал, это в оба массива добавить все строки по всем 17 столбцам (от чего отказался я поначалу). Как считаете 3 вариант наилучший или можно еще что-то придумать? Просто даже заполнять два массива по 17 столбцов в каждом (а некоторые из них имеют достаточно длинные текстовки) и строк по тысяч 40, это думаю сильно мне увеличит время формирования массивов, хоть возможно и ускорит мне сравнение и потом уже точечное внесение изменений в эксель.
Изменено: - 09.01.2025 16:23:30
|
|
|
|
|
|
16.12.2024 12:28:33
Доброго дня, прошу дать совет.
Есть эксель файлы с большими количествами информации. В каждом из них есть столбец с уникальным номером позиции. В одном сводном экселе под 100 тысяч строк, в других количество строк тоже исчисляется тысячами и таких экслей 12 штук . Задача состоит в том, чтобы проверять по 12 экселям добавление новых уникальных номеров и добавлять в сводный эксель. На текущий момент нашел выход только прогонять циклом каждую уникальную позицию из 12 экселей методом .Find в сводном экселе и если данной позиции в сводном нет, то добавить ее. Это прям достаточно долгий процесс, хоть и рабочий. Может кто подскажет, как можно реализовать это быстрее? |
|
|
|
|
|
06.12.2024 10:14:56
Пока что по получившейся длине я укладываюсь в рамки.
Выявился небольшой нюанс, что после перезагрузки виртуальный диск пропадает, можно в ручную каждый день создавать, но захотелось программно. Может кому будет полезно. Сделал вот так:
|
|||
|
|
|
|
04.12.2024 09:32:47
Спасибо всем за ответы.
AlexDen, отдельное большое спасибо, это решило мою проблему. Теперь в реестре появляются те позиции с длинным путем к файлу. БМВ, попробовал в начале SUBST на локальный путь - сформировался по виду прям, как отдельный диск в "Этот компьютер", удалил его, создал на сетевое расположение, тоже сработало, хоть и выглядит не много по другому - раздел не "Устройства и диски", а "Сетевые расположения", и назвался "Отключенное сетевое устройство", но по факту по клику проходит в то место, куда я указал, и по коду тоже отрабатывает нормально, переименовал, как мне надо и красота. |
|
|
|
|
|
04.12.2024 08:20:09
БМВ, создание сетевого диска было бы идеальным решением, после совета выше всё перерыл, но администраторами сети ограничен данный функционал.
С robocopy раньше не сталкивался, сейчас почитал, что это особый вид копирования файлов. У меня просто в данной структуре примерно 3 тысячи файлов, а многие весят и больше 50 Мб (пдф). В текущем исполнении, находя их, вся нужная информация о них мне доступна с названия файла, части пути к нему и времени их размещения. Так как архив обновляют другие люди, у меня есть возможность только иметь режим чтения, реестр на основе структуры необходимо ежедневно формировать заново, чтобы не отслеживать все изменения внесенные другими людьми, в связи с чем беспокоюсь, что robocopy у меня будет занимать очень много времени ежедневно. Читал, что ограничение в 255/260 символов строки можно обойти, как-то их объединяя. В другом макросе формирую список получателей письма, там очень много, что VBA в определенный момент не дает присвоить больше получателей, так я там делаю следующим способом:
|
|||
|
|
|
|
03.12.2024 18:33:43
|
|||
|
|
|
|
03.12.2024 17:00:19
Sanja, ну да, и правда, танцы...
|
|
|
|
|
|
03.12.2024 15:27:12
irabel, на рабочем ПК, к сожалению, не могу создавать сетевые диски, тоже читал об этом способе.
Может еще идеи есть? |
|
|
|
|
|
03.12.2024 11:00:39
Всем привет.
Прошу подсказать. Формирую реестр информации в эксель на основе файлов на сетевом ресурсе. Вроде бы всё не плохо - перебирает макрос папки, находит нужные файлы и добавляет информацию о них в реестр, кроме момента, что до файлов, которые имеют адрес длиной выше 255 символов, как случайно заметил, добраться не могу, то есть информации нет в реестре. Потом уже понял в чём дело. Архив на сетевом ресурсе, перемещать, переименовывать ни папки, ни файлы не могу. Как можно решить проблемку? Код:
Изменено: - 03.12.2024 16:01:19
(Исправил название Темы. Учтите на будущее)
|
|||
|
|
|
|
28.05.2024 10:55:26
Игорь, к сожалению, ругается.
Было:
Runtime error 1004 - Метод Copy из класса Range завершен неверно
Изменено: - 28.05.2024 11:17:22
|
|||||
|
|
|
|
27.05.2024 15:34:40
Всем привет.
Подскажите пожалуйста. Я копирую значения с одного экселя следующим образом:
Раньше всё работало отлично, большой объем отрабатывал нормально, но не давно на рабочем ПК переустановили винду с 10ки на 11ю, офис остался также 2019, но начались проблемы. Иногда макрос может отработать хорошо полностью, а иногда выдает ошибку на методе вставки - Run-time error '1004': Метод Paste из класса Worksheet завершен неверно. А так как их много в коде, оно происходит не в одном и том же месте, а рандомно в разные случае запуска макроса. Раньше когда на 10ке всё было хорошо, на всякий случай чтобы успел отрабатывать буфер обмена использовал своеобразный sleep:
Сейчас поставил слип на 1000, в надежде что в этом дело, но всё тщетно. Как думаете, что может быть и как решить проблему? |
|||||||
|
|
|
|
24.05.2024 13:23:12
МатросНаЗебре, Jack Famous, спасибо большое, за пример кода и за разъяснения.
|
|
|
|
|
|
24.05.2024 12:14:10
Всем привет.
Подскажите пожалуйста. Я определяю номер последней не пустой строки в excel следующим образом:
llastr равен, к примеру, 585, а перед ним после фильтра строка, к примеру, 535. Как можно определить номера строк только найденных после фильтра, чтобы в цикле по ним пройтись и по взаимодействовать.
Изменено: - 24.05.2024 12:15:45
|
|||
|
|
|
|
11.03.2024 10:28:04
Дмитрий(The_Prist) Щербаков, Вы и .Activate спасли ситуацию ) спасибо )
|
|
|
|
|
|
11.03.2024 10:21:42
Тут скорее из рабочего процесса нужно понимание в какую ячейку ставить.
То есть есть 6 ячеек, запуская один из макросов, он определяет какая крайняя и записывает в следующую, просто нужно взглянуть и понять в правильную ли по текущей ситуации внесена запись, а не сделал ли кто-то ещё это уже. |
|
|
|
|
|
11.03.2024 09:51:35
|
|||
|
|
|
|
11.03.2024 08:28:58
Дмитрий(The_Prist) Щербаков, можете подсказать?
Запускаю документ вот так:
Изменено: - 11.03.2024 08:30:18
|
|||||||
|
|
|
|
07.03.2024 08:15:45
БМВ, спасибо.
|
|
|
|
|