Нужно заполнить сотню справочников., Помогите с решением.
Пользователь
Сообщений: Регистрация: 21.10.2019
20.04.2026 23:23:28
Ваш макрос записывает все данные в один справочник. Чтобы заполнять сотню разных справочников в зависимости от выбранной номенклатуры, нужно изменить логику. - Можно попробовать выбор справочника по списку. Добавьте на лист Форма выпадающий список со всеми справочниками и привяжите макрос к нему. - Либо как вариант - автоматический выбор по номенклатуре. Нужно будет создать лист-соответствие Настройки с двумя колонками: Номенклатура и Имя справочника. И далее прописывать привязку к ним. У всех справочников должна быть умная таблица с одинаковым названием (SpravochnikTable). Либо модифицируйте код для обычных диапазонов.
Изменено: - 20.04.2026 23:23:53
Задача на выбор вариантов / комбинирование товара
Пользователь
Сообщений: Регистрация: 21.10.2019
20.04.2026 12:48:43
Цитата
написал: чтобы общая сумма каждой отгрузки стремилась к средней стоимости (общая стоимость всех инвойсов деленная на кол-во всех инвойсов).
Как у вас средняя получается?
Задача на выбор вариантов / комбинирование товара
Пользователь
Сообщений: Регистрация: 21.10.2019
20.04.2026 12:33:02
Цитата
написал: в отгрузки по 33 паллеты с условием не более 20 тонн на отгрузку
Добрый день. А вес в каком столбце?
Перенос данных из одного диапазона в другой на листах
Пользователь
Сообщений: Регистрация: 21.10.2019
20.04.2026 00:17:15
Цитата
написал: ... адаптировать Ваш код на перенос данных с данной формы в соответствующие листы по месяцам
См.вложение.
Перенос данных из одного диапазона в другой на листах
Пользователь
Сообщений: Регистрация: 21.10.2019
19.04.2026 20:56:25
Цитата
написал: Как только мне теперь прикрутить обновление сводных таблиц после изменения дат?
Цитата
написал: Но к сожалению такие требования у руководства
Пройдемся вместе по скользкой дорожке.
Изменено: - 19.04.2026 20:56:52
Перенос данных из одного диапазона в другой на листах
Пользователь
Сообщений: Регистрация: 21.10.2019
19.04.2026 10:34:24
Цитата
написал: 1. Как только мне теперь прикрутить обновление сводных таблиц после изменения дат? 2. И почему данный код вы не считаете рабочим, если все данные переносятся как надо?
Я полностью согласен с ответом .
Ваша модель данных построена таким образом, что дальнейшая реализация будет постоянно усложняться по всем направлениям: заполнение, доработка макросов, сводные по каждой части таблицы, задержки при обработке макросами по мере роста объёмов данных, выборка информации в отчёты и т.д.
Отвечая на ваши вопросы:
1. Обновление сводных после изменения дат — из-за текущей структуры это будет требовать либо ручного вмешательства, либо дополнительных макросов, которые ещё сильнее усложнят модель.
2. Почему код считают нерабочим, если данные переносятся как надо — формальное выполнение переноса ещё не означает, что код правильный. В вашем случае дальнейшая доработка не имеет смысла и будет постоянно утяжелять проект. Рано или поздно это приведёт к ошибкам, трудноуловимым сбоям и проблемам с масштабированием, даже если сейчас данные переносятся визуально верно.
Поэтому мой совет — прислушаться к сообщению #3.
P.S. Не успел прочитать ваш предыдущий ответ.
Попытаться переубедить руководство основываясь на изложенных фактах.
Изменено: - 19.04.2026 10:45:02
Перенос данных из одного диапазона в другой на листах
Пользователь
Сообщений: Регистрация: 21.10.2019
19.04.2026 03:16:53
Здравствуйте . Ваш весь код желательно переписать и оптимизировать. Ну и мой соответственно тоже , т.к. подстраивался под ваш. Не считаю его рабочим, просто в качестве примера.
Цитата
написал: Никак у меня не получается реализовать: 1. Перенос данных из одной Таблицы(месяц) в другую при изменении даты в Таблице. 2. И если дата изменяется на другой год, то данная строка должна переместиться в соответствующий месяц на листе с именем соответствующего года.
См. вложение Excel. Для увеличения картинки, открыть её в новой вкладке.
Возвращать дату на несколько дней раньше/позже от указанной в ячейке, дата
Пользователь
Сообщений: Регистрация: 21.10.2019
20.02.2026 16:13:12
+10 или -10 к ячейке с датой.
Макрос для удаления кода на определенную дату, удаления кода на определенную дату
Пользователь
Сообщений: Регистрация: 21.10.2019
20.02.2026 16:05:36
, Дмитрий понял. С моей стороны отмена.
Макрос для удаления кода на определенную дату, удаления кода на определенную дату
Пользователь
Сообщений: Регистрация: 21.10.2019
20.02.2026 14:56:17
Всех приветствую. Если никто не взял в работу, то я пишу в личку.
, сообщите, если уже с кем-то сотрудничаете по данному вопросу.
Изменено: - 20.02.2026 15:23:49
Перенос данных по условию, Перенести данные из таблицы в таблицу по условию
Пользователь
Сообщений: Регистрация: 21.10.2019
08.02.2026 23:01:20
, поправил.
Перенос данных по условию, Перенести данные из таблицы в таблицу по условию
Пользователь
Сообщений: Регистрация: 21.10.2019
08.02.2026 21:32:06
Цитата
написал: остаются, не стираются
Понял. Доберусь до компа, поправлю.
Изменено: - 08.02.2026 23:18:56
Перенос данных по условию, Перенести данные из таблицы в таблицу по условию
Пользователь
Сообщений: Регистрация: 21.10.2019
08.02.2026 20:05:15
, здравствуйте. Вариант макросом.
Изменено: - 08.02.2026 20:15:35
Расчет часового расхода (воды), Фильтр по значениям
Пользователь
Сообщений: Регистрация: 21.10.2019
06.02.2026 17:45:39
, здравствуйте. Возможно не понял, что от чего нужно отнять, но я сложил данные из столбца "C" в разрезе каждого часа, как в сводной у Если не так понял, для корректировки расчета поясните подробнее.
Копирование данных с одного листа на другой
Пользователь
Сообщений: Регистрация: 21.10.2019
06.02.2026 12:55:47
Цитата
написал: Ну да ладно, что эти программисты понимают!
Главное — чтобы компьютер не догадался, что они не понимают, как это работает."😜
Изменено: - 06.02.2026 12:58:57
Что за символ появляется после конвертации таблицы из Ворда в Эксель и как от него избавиться?
Пользователь
Сообщений: Регистрация: 21.10.2019
06.02.2026 12:44:06
Код
Sub Макрос1()
Dim rng As Range
Set rng = Range("A1:H5")
rng.Replace Chr(13), Chr(10)
rng.Replace Chr(11), Chr(10)
rng.FormulaLocal = rng.FormulaLocal
End Sub
Как макросом выполнить F2+Enter для диапазона ячеек с текстом/есть ли этому замена?
Пользователь
Сообщений: Регистрация: 21.10.2019
05.02.2026 22:12:56
Заменяем возврат каретки на перенос строки, как предложил , только сразу для всего диапазона. У меня сработало.
Код
Sub Макрос1()
Dim rng As Range
Set rng = Range("A1:K1123")
rng.Replace Chr(13), Chr(10)
rng.FormulaLocal = rng.FormulaLocal
End Sub
Как сделать список вперемешку? 111 222 333 - 123 123 123
Пользователь
Сообщений: Регистрация: 21.10.2019
05.02.2026 21:23:42
Создание генератора чисел
Пользователь
Сообщений: Регистрация: 21.10.2019
05.02.2026 15:29:56
, ещё такой вариант.
Защита Листа Excel от удаления, VBA либо другим способом
Пользователь
Сообщений: Регистрация: 21.10.2019
29.01.2026 18:21:31
, спасибо большое! Тоже отличный вариант.
Ошибка буфера обмена
Пользователь
Сообщений: Регистрация: 21.10.2019
29.01.2026 10:04:13
Вам нужно приложить файл с примером, где происходит ошибка.
Ошибка буфера обмена
Пользователь
Сообщений: Регистрация: 21.10.2019
29.01.2026 09:22:32
Здравствуйте. Попробуйте перед заменой столбцов прописать очистку буфера обмена.
Защита Листа Excel от удаления, VBA либо другим способом
Пользователь
Сообщений: Регистрация: 21.10.2019
28.01.2026 13:40:38
Цитата
написал: При активации листа. Событие такое есть, выше приводил с ним пример
Дмитрий, спасибо. Я использую это событие для некоторых действий. Да, лучше туда прописать.
Изменено: - 28.01.2026 13:40:55
Защита Листа Excel от удаления, VBA либо другим способом
Пользователь
Сообщений: Регистрация: 21.10.2019
28.01.2026 11:41:50
Цитата
написал: Иметь в книге ДВА идентичных шаблона
Они не статичные. Данные меняются. В двух одновременно менять и отслеживать изменения не вариант.
Цитата
написал: Раз даете такую волю пользователям с этими листами
Да, доступ есть, все предупреждены, но хотелось бы некую "защиту от дурака".
Цитата
написал: значит лист удалили или переименовали и об этом надо сразу сообщать и пусть уже пользователь думает, что делать
Кстати да, при закрытии/открытии проверять нужные листы и выводить сообщение с дальнейшим выходом. Это конечно не предотвратит попытку удаления, но причину обозначит при открытии документа.
"Cancel = True" - не с той оперы.)) Не обращайте внимания.
Изменено: - 28.01.2026 11:42:39
Защита Листа Excel от удаления, VBA либо другим способом
Пользователь
Сообщений: Регистрация: 21.10.2019
28.01.2026 10:50:59
, спасибо за советы. Но в данном случае обратился на форум, т.к. не смог найти нужного и удобного решения. Всё в проекте гораздо сложнее, предложенные варианты реализуемы но, для меня неудобны. Хранение данных в другой книге можно сделать, но опять таки мне неудобно и неудобно будет пользователям. С листом, который нужно защитить от удаления (их может быть несколько), происходит плотное программное и ручное взаимодействие, создаются его копии с другим именем как в ручную, так и программно. , "Activeworkbook.Sheets("Лист2").Delete" не рассматриваю угрозой. Это будет умышленное удаление и понятно, что сделано специально. После такого соответствующий разбор "полёта". Нужно что-то типа перехвата события. Некая "защита от дурака" с предупреждением или что-то типа деактивации пункта "Удалить" на нужном листе. Использую пока вот такой способ, как говорится "на всякий случай" с закрытием книги без сохранения. Но в старых версиях может не сработать. "Cancel = True" в этом событии не срабатывает (нет такой переменной, пример от другой процедуры), поэтому использую Close. Можно даже "Application.Quit", чтобы у злоумышленника не возникало желание делать запрещённые действия)). Можно ещё добавить запись в файл данных пользователя или ПК, на котором была попытка удаления для дальнейшего персонального предупреждения.
Код
Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object)
If Sh.Name = "Шаблон" Then
MsgBox "Удаление листа 'Шаблон' запрещено!" & vbCrLf & "" & vbCrLf & "Данный лист является системным.", 16, "Info"
ActiveWorkbook.Close False
End If
End Sub
Я уже понял, что вариантов практически нет, кроме "Защиты книги (структуры)" и затем программно это обыгрывать. Но мало ли появится интересное решение.
Изменено: - 28.01.2026 12:08:22
Защита Листа Excel от удаления, VBA либо другим способом
Пользователь
Сообщений: Регистрация: 21.10.2019
27.01.2026 19:04:03
Цитата
написал: Я бы на Вашем месте все же воспользовался защитой книги.
Дмитрий, спасибо, но как я написал защита книги не подходит. Проект сложный, листов очень много, часть из них программно добавляется, удаляется, копируется, супер-скрывается и т.д. Некоторые действия должны выполнятся вручную. Структура недолжна быть защищена. Конечно, все ручные действия можно зашить макросами и программно снимать защиту листа выполнять нужные действия и обратно устанавливать, но в данном проекте мне это не очень удобно. Поэтому ищу вариант защиты листа от удаления без блокировки структуры (защиты книги). Так же понимаю, что почти любую защиту можно взломать, если задаться целью.
Изменено: - 27.01.2026 20:23:37
Защита Листа Excel от удаления, VBA либо другим способом
Пользователь
Сообщений: Регистрация: 21.10.2019
27.01.2026 16:33:34
Здравствуйте. Подскажите, пож-та, как в книге Excel защитить лист от удаления пользователями. Защита структуры в качестве защиты от удаление не подходит. Лист, который нужно "обезопасить" от удаления, будет скрываться пользователями и отображаться при необходимости внесения изменений, эта функция не должна быть заблокирована. VBA приветствуется. Обычные пользователи не будут иметь пароль от проекта.
Создание массива чисел при выполнении условий
Пользователь
Сообщений: Регистрация: 21.10.2019
25.01.2026 10:50:52
Здравствуйте.
Код
Sub ЗаполнитьМассив ()
Dim arr(1 To 100), i%, counts(1 To 5), p
For i = 1 To 100
arr(i) = Int(Rnd() * 5 + 1)
Next
p = Array(0, 0, 0.25, 0.15, 0.1, 0.05)
For i = 1 To 100
If counts(5) < 100 * p(5) Then arr(i) = 5: counts(5) = counts(5) + 1
Next
For i = 1 To 100
If arr(i) <> 5 Then
If counts(4) < 100 * p(4) Then arr(i) = 4: counts(4) = counts(4) + 1
End If
Next
For i = 1 To 100
If arr(i) <> 5 And arr(i) <> 4 Then
If counts(3) < 100 * p(3) Then arr(i) = 3: counts(3) = counts(3) + 1
End If
Next
For i = 1 To 100
If arr(i) <> 5 And arr(i) <> 4 And arr(i) <> 3 Then
If counts(2) < 100 * p(2) Then arr(i) = 2: counts(2) = counts(2) + 1
End If
Next
For i = 1 To 100
If arr(i) > 1 Then counts(arr(i)) = counts(arr(i)) + 1 Else counts(1) = counts(1) + 1
Next
Range("A1:A100").Value = Application.Transpose(arr)
MsgBox "Распределение:" & vbCrLf & _
"5: " & counts(5) & "%" & vbCrLf & _
"4: " & counts(4) & "%" & vbCrLf & _
"3: " & counts(3) & "%" & vbCrLf & _
"2: " & counts(2) & "%" & vbCrLf & _
"1: " & counts(1) & "%"
End Sub
Как совместить две таблицы по одному столбцу (всю голову сломал), Нужно сделать одну таблицу из нескольких таблиц по одному поставщику (столбцу)