Я и предлагаю убрать DrawingObjects и добавить UserInterfaceOnly. Вот такая строчка у меня получается.Пользователю воли не даёт, но скрипты работают свободно.
Формула массива (Ctrl+Shift+Enter) =СУММПРОИЗВ(ЕСЛИОШИБКА(--ЛЕВСИМВ(C7:AG7;НАЙТИ("/3";C7:AG7)-1);ЕСЛИОШИБКА(--ЛЕВСИМВ(C7:AG7;НАЙТИ("/";C7:AG7)-1);C7:AG7))) В объединенных ячейках эта формула не работает, поэтому я её прописал в ячейку AH7 и закрасил белым, а в AH8 уже просто на неё сослался.
Внутрь строчки Wb.SaveAs (Pa & Tab2(n) & ".xlsx") добавьте всё, что Вам нужно. Wb.SaveAs (Pa & Tab2(n) &название района& ".xlsx") откуда и как брать название района из кода само-собой не понять
Алексей Панов написал: от этого числа три числа ниже: 60,59,58
Не совсем. Может быть 60, 55,54, 37 Хотел написать: =СЧЁТЕСЛИ(C3:C96;">=" & НАИБОЛЬШИЙ(C1:C96;4)) Но эта формула будет работать криво, если среди топовых значений есть повторы...Например 61, 61,61,61, 59 "Ровную" формулу что-то никак найти не могу. А если не заворачиваться, то: =СЧЁТЕСЛИ(C3:C96;">=" & МАКС(C1:C96)-4)
Ваша правда, но там структура отчёта не особо предусматривает несколько вариантов + проблемно это, но если автор пожалуется - можно попробовать заморочиться. Лично я бы ограничился ещё одной колонкой "количество дней с макс. посещением"
Вам нужны функции ИНДЕКС + ПОИСКПОЗ или ВПР Пример раписал с ИНДЕКС+ПОИСКПОЗ, так как с ВПР я мало дружу + в Вашем случае ВПР вроде бы не работает:) К ВПР ещё есть парная функция ГПР (ищет по столбцам, а не по строкам)
Ігор Гончаренко написал: очень большие подозрения, что повода не представится((
Очень хотелось возмутиться, мол "что за поклёп и провокация", но да - повода не представится. Вариант с описанными мною событиями работает не так хорошо, как хотелось. Зато надёжно, но могут возникнуть тормоза, если в книге будет много сложных формул формул.
240 Изи. Свою животинку пока не писал. В Вашем варианте автозапуска с beep не хватает счётчика количества итераций. У меня вышло 57 577 + ещё где-то 7 запусков раз по приблизительно 2400 итераций, благодаря которым я теперь знаю про существование ошибки "out of stack space". Что удивительно цифра 222 выпадала минимум 2 раза. Логи результатов не вёл.
shTempRows.Range(sh1TmpRowAddress).Offset(iCount Mod 2).Resize(iCount).EntireRow.Copy
sh1.Range("SignRow").Resize(1).Insert Shift:=xlDown
Просто я 3 часа (без преувеличения) урезал проект под форум, чтобы было не 1000 строк кода, но ошибка оставалась. Предположительно, всё равно как именно к строке обратиться. Программа всё-равно потом одинокого все предложенные выше варианты интерпретирует. Вот вариант Jack Famous, с добавлением пустой строки и последующим копированием шаблона, похоже, что реально помог. Знать бы ещё почему.
New написал: Просто через Alt+F8 запускаю ваш макрос AddRowForum
Так он и должен нормально отрабатывать. Ошибка происходит когда пользователь поменяет данные и быстро (базовый файл у меня чуть тормозной, поэтому можно и "не очень быстро") нажимает "Добавить строку". Есть подозрение, что там что-то внутри экселя начинает конфликтовать.
Внимание! При возникновении ошибки прилагаемый файл вешает эксель (придётся убивать его через диспетчер задач).
Столкнулся с непонятной периодически случающейся проблемой, которая возникает не всегда и не на всех компьютерах (проверял только на MS office 13, но на нескольких компах). Вероятно, ошибка зависит от того, с какой скоростью пользователь нажимает на кнопки.
Механизм вызова ошибки: 1. В в жёлтом столбце вбиваем любое значение. 2. Быстро кликаем правой кнопкой на любой ячейке таблицы и выбираем пункт "Добавить строку". 3. Повторяем 3-4 раза, пока ошибка не появится (она просто то появляется сразу, то не появляется не сразу, где-то её вообще нет. В полном проекте она более стабильно появляется, тут в урезанном файле - реже.)
Всё. Ошибка `-2147417848 (80010108)` "Method 'Insert' of object 'Range' failed" возникает между двумя безобидными строками:
Проблема не в условном форматировании (в реальном проекте удалил всё УФ, проблема всё-равно осталась).
Не могу понять, что с чем конфликтует и как лечить. В другом проекте, в аналогичной ситуации выскакивает ошибка c этим же номером, но с описанием "Automation error Вызванный объект был отключен от клиентов."
Все зашиты снимаются так или иначе. Эксель вообще плохо защищён.
Чтобы не снимали пароль через архив можно книгу сохранять в формате xls (со всеми его ограничениями), тогда будут снимать иначе:) В моем варианте если на листе-заглушке написать «Время вышло, все данные удалены», может никто и искать особо не будет.
Если совсем заморочиться - тут в копилке идей есть «хранение файлов и файловый менеджер внутри файла Эксель». Можно извратиться и с той стороны начать копать.
Всё, что внутри if можно заменить на thisWorkbook.close, но если оставить кусочек кода с сокрытием листов, это может и помешать неопытным пользователям отковырять содержимое книги.
Тут одной формулой очень сложно что-то сделать. ИМХО, для начала тут числа нужно отсортировать по абсолютному значению, а потом уже считать, что там можно "сократить". Логика работы моей формулы следующая: 1. В перовой ячейке тупо пишем -1 или 1 (отрицательное или положительное число); 2. Дальше протянута формула, которая проверяет "сколько ещё чисел можно компенсировать". Если там значение 0 или выше, то это число или само положительное или отрицательное, для которого есть парное положительное число, которое его компенсирует.
Если взглянуть на мой случайный набор данных, то там строчки 7-8 компенсируются строчками 5-6. Потом строчки 9-13 "отричательные", так как для них пар не хватает Потом в строчке15 стоит цифра 2, которая указывает на то, что ниже могут быть 2 отрицательных числа, которые можно компенсировать за счёт строчек 14 и 15 (они там и стоят). Интересное происходит на строчке 21. До неё стоит 3 положительных числа, соответственно, после может быть ещё 2 отрицательных числа, которые можно компенсировать,
Вроде бы всё работает. В моём примере 15 положительных чисел и соответствующих им отрицательных, которые в сумме с одним из положительных дают положительное число.
Можно как-то "грамотно" сделать, но я могу только предложить: добавить Public bEnabled as boolean задавать bEnabled = true в RunTime и использовать bEnabled как условие в CloseWB.
Для отключения макроса при закрытии книги добавить:
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)
bEnabled = false
End Sub
Или в CloseWB передавать книгу как параметр...
Код
Sub CloseWB(wbX as Workbook)
Application.DisplayAlerts = False
on error resume next
With wbX
.Save
.Close
End With
End Sub
Без файла-примера ничего лучше подсказать не могу.
Вы дали очень маленький набор данных. Сложно на нём что-то протестировать. Для начала я добавил столбец с модулем чисел и отсортировал по нему, потом работают формулы из 3-го столбца.
Нет, просто я из Вашей формулы убрал в конце +СТРОКА() и индекс стал перебирать не с начала листа, а со следующей строки. Вот и думаю, не сломал ли чего
Mershik, а вот такая сокращённая версия Вашей формулы работать будет нормально или "есть нюансы" кроме того, что в столбце "B" после таблицы должно быть пусто, иначе последний случай не считается?