Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Зависает окно userform, но макрос продолжает выполняться
 
Jack Famous и New, Вы оба правы! DoEvents решает мои проблемы  :)
Спасибо Вам огромное!  :D
Зависает окно userform, но макрос продолжает выполняться
 
Jack Famous, спасибо за ответ!
Видится мне, что с самим макросом у меня всё ок. Об этом говорит то, что вначале всё отображается корректно, а в коде макроса после 16 итерации следует точно такая же 17-ая (обычный цикл For...Next), и ничего в тексте макроса не меняется, что могло бы как-то объяснить подвисание. При этом виснет не всегда после 16, это зависит от того, по каким книгам сейчас работает макрос. В процессе выполнения книги, опять же, не меняются.

Цитата
потом сделать DoEvents
Обновляю userform  с помощью UserForm.Repaint

Цитата
Читайте статью  ОТОБРАЗИТЬ ПРОЦЕСС ВЫПОЛНЕНИЯ
Эту статью читал и выводить прогресс в statusbar пробовал, результат тот же, через некоторое время после начала работы макроса значения прогресса перестают обновляться.
Изменено: kenigfinn - 12.05.2022 13:04:55
Зависает окно userform, но макрос продолжает выполняться
 
Доброго дня всем
Есть некоторый макрос, который сравнивает 3 различных диапазона в двух книгах и если значения совпадают выполняет перенос значений ячеек из одной книги в другую. Но суть не в этом. Прикрутил я к макросу userform для удобства отображения хода выполнения задачи. Целый progressbar мне не нужен, поэтому процесс выполнения отображается по типу "выполнено Х/из всего У". Перед началом работы макрос отключает обновление экрана и авторасчёт формул. Но почему-то окошко userform и всё окно excel виснет через некоторое время после начала работы макроса и вся красота с отображением процесса работы не работает :cry: При этом макрос продолжает выполняться и через некоторое время корректно выполняет задачу и завершается с отвисанием окон. Работает всё это на excel 2007.
Маленькая гифка с моей userform

Что можно сделать что бы окна userform и excel не зависали и процесс работы продолжал показываться до завершения макроса?
Самое очевидное, как я понимаю, либо как-то облегчить макрос, либо апгрейд железа? Но может есть другие варианты и можно как-то где-то поковыряться в настройках чего-то? :)
Изменено: kenigfinn - 12.05.2022 12:17:21
Массив vba со сбором данных с листов и возвратом обратно, Оптимизация существующего кода
 
Всем спасибо! Что-то очень даже компактное получилось )
Объединил два варианта от МатросНаЗебре и No Name:

Код
Dim x() As Variant
ReDim x(1 To 31)
a = Array("Az", "Bz", "Cz", ...) 'перечисляю диапазоны

For i = 1 To 31
    With Worksheets(i)
        x(i) = .Range(a(i - 1)).Columns(7).Formula 'сохраняю формулу
        .Range(a(i - 1)).Columns(7).Value = 1 'вставляю единицу
    End With
Next i

'какое-то другое действие

For i = 1 To 31
    Worksheets(i).Range(a(i - 1)).Columns(7).Formula = x(i) 'возвращаю формулу
Next i
Изменено: kenigfinn - 31.08.2021 16:18:05
Массив vba со сбором данных с листов и возвратом обратно, Оптимизация существующего кода
 
Цитата
Юрий М написал:
в чём великий смысл
Это довольно сложно объяснить ))
Массив vba со сбором данных с листов и возвратом обратно, Оптимизация существующего кода
 
No Name, Юрий М, я понял, недорассказал деталь. "Некоторое действие" должно остаться вне цикла, т.е. первый цикл берет формулы, ставит единицы и завершается. Далее действие. Второй цикл возвращает формулы.
Т.е. первым циклом нужно собрать сразу все формулы столцов со всех листов и поставить единицы. Вторым вернуть сразу все формулы столбцов на все листы.
Предложенный No Name вариант подходит, если бы не это "но".
Изменено: kenigfinn - 31.08.2021 13:35:05
Массив vba со сбором данных с листов и возвратом обратно, Оптимизация существующего кода
 
No Name, не будет этот цикл перезаписывать значения Ах на каждом витке?
Изменено: vikttur - 31.08.2021 12:39:53
Массив vba со сбором данных с листов и возвратом обратно, Оптимизация существующего кода
 
Ігор Гончаренко, не совсем понял, что мы выиграем этим циклом, ведь всё имена диапазонов и переменных всё равно остаются уникальными для каждого листа и нужно написать всё те же 31х3 строк
Изменено: kenigfinn - 31.08.2021 12:48:25
Массив vba со сбором данных с листов и возвратом обратно, Оптимизация существующего кода
 
Доброго дня всем )
Хочу попросить помощи в оптимизации кода vba. Так-то всё работает, но чувствую, что есть более изящное и менее громоздкое решение.
Есть книга с 31 листом. На каждом листе есть именованный диапазон. Размерность диапазонов на всех листах по столбцам - одинаковая, по строками - разная, заранее не известная. Нужно макросом собрать значение формул всех ячеек одного столбца каждого диапазона с 31 листа. Затем заполнить значения всех ячеек столбца каждого диапазона единицей. Далее производятся некоторые действия и в конце нужно вернуть значения записанные в переменную обратно в ячейки столбцов диапазонов на листы.

Сейчас работает так:
Код
Ax = Worksheets("Ay").Range("Az").Columns(7).Formula 'сохранил значения формул столбца в переменную
Worksheets("Ay").Range("Az").Columns(7).Value = 1 'заполнил ячейки столбца единицей
'ещё 60 строк с аналогичными действиями для других 30 листов
'...
'некоторое действие
'...
Worksheets("Ay").Range("Az").Columns(7).Formula = Ax 'вернул формулы из переменной в ячейки
'еще 30 строк для 30 листов

И так 31 раз для каждого листа, с другими именами соответственно, Bx, By, Bz для второго листа и т.д.... Постоянный только номер столбца - всегда 7.

Если бы листов было 1...5, всё просто, но листов 31 ))) и для каждого писать три строчки кода кажется неразумно. Чувствую, что логичнее было бы собирать всё циклом в один многомерный массив, но тут мои познания заканчиваются ) С многомерными массивами дела ещё не имел

С vba знаком на любительском уровне самоучки. Сильно не ругайтесь )
Изменено: kenigfinn - 31.08.2021 11:59:19
Программно посчитать количество всех страниц (на печать) в книге Excel - VBA
 
Цитата
bedvit написал:
Вот мое решение:
Доброго дня
Столкнулся с такой же задачей, до печати, программно получить количество страниц, но не во всей книге целиком, а на конкретном листе, коих в книге много. Как бы оптимизировать Ваше решение под конкретный лист в книге?
Запуск макроса в другой книге с неизвестным именем
 
Ігор Гончаренко, Михаил Лебедев, всем ещё раз спасибо!
Действительно, как сказал Ігор Гончаренко, самый простой способ оказался положить макрос в первую книгу.
Запуск макроса в другой книге с неизвестным именем
 
Ігор Гончаренко, Михаил Лебедев, большое спасибо за ответы! Почти получилось то, что нужно.
С Activate всё работает, но мне не очень хочется что бы вторая книга активировалась. Получится у меня обойтись с помощью Application.Run ("Книга!Модуль.Макрос")? Если да, то помогите, пожалуйста, склеить строку аргументов, что бы вместо "Книга" вставлялся результат Replace(ThisWorkbook.Name, "ПЕРВАЯ", "ВТОРАЯ")
Запуск макроса в другой книге с неизвестным именем
 
Всем доброго дня.
Помогите, пожалуйста, решить следующую задачу:
Условия: есть две книги с неизвестными но одинаковыми (за исключением последнего слова) именами и расширениями: "Книга пример ПЕРВАЯ.xlsm" и "Книга пример ВТОРАЯ.xlsm"; обе книги всегда лежат в одной папке; "Книга пример ВТОРАЯ.xlsm" не всегда открыта.
Задача:
  1. Макросом из первой получить её имя
  2. Подменить последнее слово полученного имени, что бы получить имя второй книги
  3. Проверить, открыта ли вторая книга, если нет - завершить, если да:
  4. Запустить макрос из второй книги в Modul1 (отработать должен на второй книге)
  5. Если вторая книга стала активной - вернуться в первую.
Суммирование произведений, удовлетворяющим нескольким условиям, Условно И() ИЛИ() внутри СУММПРОИЗВ()
 
Mershik, работает! Спасибо!
Суммирование произведений, удовлетворяющим нескольким условиям, Условно И() ИЛИ() внутри СУММПРОИЗВ()
 
IKor, нет, такой статьи не видел, но про БДСУММ() слышал. Единственный вопрос тогда встаёт о том, что эта функция берёт значения условий из ячеек, а мне нужно, что бы значения условий были записаны только внутри формулы, без дополнительных ячеек. Но спасибо за наводку, покопаю в сторону БДСУММ() поглубже.
Суммирование произведений, удовлетворяющим нескольким условиям, Условно И() ИЛИ() внутри СУММПРОИЗВ()
 
Mershik, это жестоко, но всё равно, спасибо за ответ. Ищу более универсальный способ..
Суммирование произведений, удовлетворяющим нескольким условиям, Условно И() ИЛИ() внутри СУММПРОИЗВ()
 
Всем доброго дня. Помогите пожалуйста написать формулу, которая суммировала бы произведения, удовлетворяющие нескольким критериям, объединяющимся не только по И но и по ИЛИ.
Конкретный пример к приложенному файлу. В ячейке D19 получить сумму произведений строк в столбцах А и В, одновременно удовлетворяющих условиям: Критерий 1 = или(Январь;Сентябрь), Критерий 2 = или(Красный;Зелёный), Критерий 3 = не(Дерево). С такими условиями должны просуммироваться произведения строк 2 и 10, и в результате должно получиться 222. В столбцах Число 1 и Число 2 - только числовые значения до 3 знаков после запятой, в столбцах критериев - только текстовые значения, могут и будут повторяться. Критерии задаются внутри формулы. Дополнительных ячеек и ячеек с промежуточным результатом быть не может. Не имею ничего против формул массива.
Изменено: kenigfinn - 23.10.2019 11:43:29
Перебор комбинаций с выбором одной наилучшей по условиям
 
MCH,Огромное Вам спасибо!
Перебор комбинаций с выбором одной наилучшей по условиям
 
MCH, а возможно это представить в виде UDF, как было первый раз?
Изменено: kenigfinn - 16.02.2018 15:09:36
Перебор комбинаций с выбором одной наилучшей по условиям
 
Всем спасибо большое!
Перебор комбинаций с выбором одной наилучшей по условиям
 
MCH, чувствую, что наглею, но не поможете с вариантом, если маленьких отрезков 4 варианта разной длины: 2,4; 1,2; 0,9; 0,6?
Пытался разобраться сам, но как я понимаю, в таком варианте уже появляются вложенные циклы, а с их пониманием всё плохо.
Перебор комбинаций с выбором одной наилучшей по условиям
 
Ігор Гончаренко и Вам спасибо большое!
Перебор комбинаций с выбором одной наилучшей по условиям
 
MCH офигеть!
Изящно!
Спасибо!
Перебор комбинаций с выбором одной наилучшей по условиям
 
MCH
1. Максимальный размер исходного отрезка 100.
2. Дополнительных отрезков только 2 и их длины на самом деле 1,5 и 1,2.
3. Неограниченное количество отрезков.
4. Верно.
5. Нет. Исходный может иметь до 3 знаков после запятой, дополнительные всегда 1,5 и 1,2.
Перебор комбинаций с выбором одной наилучшей по условиям
 
Андрей VG, Маугли, очень смешно, посмеялся.

Ігор Гончаренко, спасибо, за ответ по-существу. А есть способ реализовать тоже самое но формулами или макросом?
Изменено: kenigfinn - 15.02.2018 13:15:45
Перебор комбинаций с выбором одной наилучшей по условиям
 
Всем добрый день. Помогите советом в решении небольшой задачи.
Имеем исходный условный отрезок длиной в 100, и два дополнительных отрезка, один 15, второй 12.
Задача: разместить на исходном отрезке малые в любой последовательности, любым сочетанием с повторениями, но так, что бы из всех возможных вариантов иметь наименьший остаток, если есть несколько вариантов размещения, предпочтение отдаётся тому, где число число размещаемых элементов наименьшее. Ответ должен быть один: количество отрезков длиной 15, количество отрезков длиной 12, остаток.
Хотелось бы сделать это с наименьшим количеством дополнительных расчётных ячеек. Если можете подсказать решением с помощью макроса - тоже хорошо.
Сложный цикл с подстановкой из одной книги в другую и обратно, Взять данные из одной книги, вставить в другу, получить результат и с ним вернуться в первую книгу
 
МатросНаЗебре,почти собрал свой макрос с последними хотелками на основе Вашего, только не могу пока разобраться с последними строчками
Код
iX2 = WorksheetFunction.Match(wsh1.Cells(iY1, 1).Value, .Rows(1), 0)
.Cells(2, iX2).Value = wsh1.Cells(4, iX1).Value
Calculate
wsh1.Cells(iY1, iX1).Value = wsh3.Cells(1, 2).Value
Здесь, как я понимаю проиходит подстановка значений 25-125, расчет и запись результата из итоговой ячейки в сводную таблицу результатов, но не могу понять пока что и как тут работает.
Код
 .Rows(2).Cells.Clear
А эта строчка, видимо, отвечает за обнуление ячеек после расчета, но как я понимаю, здесь обнуляется вся строка (???), а как обнулить конкретно названные ячейки, потому что в расчетной таблице они раскиданы по листу и не находятся в одной строке?
Изменено: kenigfinn - 20.07.2016 23:24:03
Сложный цикл с подстановкой из одной книги в другую и обратно, Взять данные из одной книги, вставить в другу, получить результат и с ним вернуться в первую книгу
 
Чуть изменил задачу и набросал примерную схему, старался как можно  проще изложить. Как я понимаю, должно получиться 4 уровня вложенных  циклов.
Первый уровень: Книга1Лист1Значение1,  Книга1Лист1Значение2, Книга1Лист1Значение3 изменяются наборами сразу  втроем, либо один набор из трёх значений, либо второй, и становятся в  Книга2Лист1Значение1, Книга2Лист1Значение2, Книга2Лист1Значение3.
Второй уровень: Книга1Лист1Значение4 и Книга1Лист1Значение5 так же меняется сразу парой от 0 до 1, если одно единица - второе ноль, либо наоборот (1-0, 0-1), становятся в Книга2Лист1Значение4 и Книга2Лист1Значение5.
Третий уровень: Книга1Лист1Значение6, Книга1Лист1Значение7 и Книга1Лист1Значение7  меняется сразу набором в три положения 1-0-0, 0-1-0 и 0-0-1, становятся  в Книга2Лист1Значение6, Книга2Лист1Значение7 и Книга2Лист1Значение8.
Четвёртый уровень: Книга2Лист1Материал1 меняется от 25 до 125 с шагом 5. Затем так же Книга2Лист1Материал2 ... Книга2Лист1Материал10.
Результирующие значения снимаем с Книга2Лист2Результат и вставляем в соответствующую ячейку Книга1Лист1.

МатросНаЗебре, спасибо большое, а можно с пояснениями, какая строка что делает?
Сложный цикл с подстановкой из одной книги в другую и обратно, Взять данные из одной книги, вставить в другу, получить результат и с ним вернуться в первую книгу
 
Народ, помогите решить задачу.
Имеем две книги: Книга1 и Книга2, для простоты объяснения в файле-примере объединил в одну книгу, но вообще они раздельные.
В  Книге1Лист1 имеем исходные данные и поля для результатов. В Книге2Лист1  - вводные ячейки для расчета, на Книга2Лист2 - выходная ячейка с  результатом.
Описание процесса: Книга1Лист1  берем Значение1, Значение2, Значение3 и вставляем их в соответствующие  ячейки в Книга2Лист1, далее по-порядку для Материал1 подставляем  значения от 25 до 125 в Книга2Лист1!А2. Забираем результат с  Книга2Лист2!В1 и помещаем в Книга1Лист1 в графу для Материал1. Затем  обнуляем Материал1 на Книга2Лист1 и повторяем тоже самое для Материал2:  берем значения от 25 до 125 и вставляем в Книга2Лист1!А2. Забираем  результат, вставляем в Книга1Лист1 графу 4 для Материал2. И т.д. Когда  закончим проходить все материалы ТаблицаРезультатов1, переходим на  ТаблицаРезультатов2, но к ней будут другие Значение1-3.
И храниться этот макрос должен в таблице собирающей данные, а не расчетной.
Изменено: kenigfinn - 20.07.2016 16:57:27
Смена текста в колонтитулах с помощью макроса (по заданным условиям)
 
vikttur,прошу прощения, но специально не хотел создавать новую тему, т.к. знаю, что модераторы не очень любят, когда по похожим вопросам плодятся разные темы.
Страницы: 1 2 След.
Наверх