Новости:

Форум на данный момент в стадии обновления. Если у Вас возникли проблемы со входом в свою учетную запись - просьба писать на email: info@excel-vba.ru

Главное меню

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.

Просмотр сообщений

Сообщения - kykym6p

#1
Юрий, в целом, я всегда придерживался таких правил. Данный макрос - исключение. Слишком сложные формулы...
Удалось формулы упростить - теперь уже терпимо:)
Остается непонятно - почему растет использование памяти экселем во время копирования формул...
#2
Ну если "вообще" то преимущество на стороне массивов - это факт, но все же общие рекомендации я бы хотел услышать.
#3
vikttur,
формулы в основном SUMIF'ы не сложные.
Думаете стоит избавиться от формул и сделать расчеты в массиве? Какой это может дать прирост во времени примерно? Если 1-5 минут относительно часа, то оно того не стоит, а вот если в разы....
#4
Доброго всем дня!

При открытии книги с макросом, эксель в оперативной памяти занимает 20мб, макрос довольно таки тяжелый, работыет с другими книгами, но в конце все их закрывает и открытой остается только первоначальная книга. Но уже после отработки макроса в первый раз, эксель в памяти занимает 300-400мб, если запускать второй раз, то получаю Out of memory.
Подскажите как чистить оперативную память?
#5
Доброго всем дня!
Макросом расставляю формулы на листе:
.Cells(1,y).Copy
.Cells(10, y).PasteSpecial Paste:=xlPasteFormulas

После этого пересчитываю лист, т.к. для дальнейшей работы макроса нужны значения, полученные формулами
.Calculate
И вот на этом пересчете макрос ужасно зависает. Формул получается много, порядка 100 000, а то и больше. Если пересчет пропустить, то макрос отрабатывает за 12 минут, если пересчитывать то 45-60.
Если просто нажать на листе F9 то пересчет формул занимает 1-2 минуты. Почему такое может быть? Не хотелось бы формулы менять на рассчеты в массивах.

Спасибо!
#6

For k = 1 To UBound(Arr)
For j = 1 To UBound(C)
                If C(j, 1) = Arr(k, 1) Then
                    Arr(k, 3) = C(j, 2)
                    GoTo nextt
                End If
            Next j
Next k
nextt:

На данный момент делаю так. В целом терпимо конечно (45 секунд), но хочется быстрее. После нахождения необходимых элементов, я их помещаю в другой массив, а затем вывожу на лист
#7
Здравствуйте всем!

Возникла следующая проблема: имеются 2 массива, в первом имя фамилия, а во втором фамилия и номер телефона. Необходимо получить массив имя,фамилия,номер телефона. Задача элементарная, но массивы довольно таки большие(300 000 строк и 50 000 строк) и поиск происходит долго. Подскажите идеи как можно ускорить поиск, может сортировки какие, или еще какие нить хитрости?
#8
Это было бы слишком просто)

Все эти конструкции я использую. И обновление экрана, и события, и еще кучу всего отключаю.
#9
Ну да, в файле очень много формул, а именно SUMIFS. При создании листа книга пересчитывается? Если да, то можно ли это как то отключить?


Боюсь, если буду создавать пример, то потеряется информативность, но я постараюсь.
#10
К сожалению, файл предоставить не могу.

Есть подозрение, что при создании листа Excel начинает пересчитывать всю книгу...также файл занимает в оперативке 2,5 Гб из 8 возможных.
#11
Здравствуйте!

Имеется небольшой файл, размером 5мб. Внутри несколько листов с данными, несколько листов с формулами считающими на основе этих данных. Ничего необычного. Но при попытке создать новый лист Excel зависает минуты на 3-4, и это Жутко раздражает. В чем может быть проблема? Хотелось бы понять чем он (Excel) занимается 3 минуты перед созданием листа.
Все формулы на ручном пересчете, форматов нету, лишних строк нету.

Спасибо
#12
Все сделал по инструкции, но все равно при открытии книги всплывает окошко, и независимо от того, что я нажал, книга не видна...только в VBA редакторе.

Скрин всплывающего окна прикладываю.
#13
Спасибо большое!
Не знаю почему поиском я сам не наткнулся на это..
#14
Добрый день,

Возникла следующая задача - имеется макрос, которым пользуются пользователи каждый в своем файле (книге). Периодически возникает необходимость обновлять этот макрос, но пользователь это делать не умеет, особо продвинутые умеют, но делают это коряво, после чего возникает еще больше проблем. Собственно вопрос в чем, можно ли макросом из моей книги, обновить макросы во всех других книгах? Все файлы хранятся на сети, и предполагается что я знаю полный путь ко всем книгам пользователей.
Я попытался воспользоваться вот такой штукой:
Workbooks(sourcewb).VBProject.VBComponents.Item("Integration").Name = "Integration_old"
Переименовать старый модуль, ну и потом вставить новый....но после вышеописанного действия книга, над которой я провожу манипуляции отказывается открываться. Сначала выскакивает сообщение о том, что открытие небезопасно, я нажимаю "Enabled", и больше ничего не происходит. Но через редактор VBA эту книгу видно, и видно что модуль переименовался.

Подскажите, может кто то что то подобное делал?

Спасибо!
#15
Комбинация с небольшой паузой, и с очищением буфера помогла!
Большое спасибо всем)
Яндекс.Метрика Рейтинг@Mail.ru