Код |
---|
Sub Подготовка_удалить_колонки() 'Первая часть макроса: Перемещаем листы в новую книгу Dim ActiveSht As Worksheet 'Dim NewWb As Workbook Dim wbOld As Workbook, wbNew As Workbook For Each wbOld In Workbooks wbOldname = ActiveWorkbook.name For Each ActiveSht In ThisWorkbook.Worksheets ActiveSht.Visible = True ' делаем скрытые листы видимыми в исходной книге. Next Sheets(Array("Исходные данные", "Сопровод", "ПЗ МЭР", "ПЗ", "КЦ", "Справочник", "СПЕЦОС ОК", "СПЕЦОС ПК")).Move ' Здесь указываете имена нужных листов Set NewWb = ActiveWorkbook For Each ActiveSht In NewWb.Worksheets With ActiveSht.UsedRange .Value = .Value End With Next 'NewWb.SaveAs FileName:="C:\" & "Копия.xls" ' листов стало много - какое имя нужно давать для книги не знаю. 'MsgBox "Формы документов перенесены в новую книгу и сохранены.", vbInformation 'ThisWorkbook.Close SaveChanges:=False 'Вторая часть макроса: удаление внешних связей 'Dim wbOld As Workbook, wbNew As Workbook 'Set wbOld = ActiveWorkbook 'Set wbNew = Workbooks.Add(1) Windows(wbOldname).Activate exist_links = ActiveWorkbook.LinkSources(xlExcelLinks) If Not IsEmpty(exist_links) Then For i = LBound(exist_links) To UBound(exist_links) ' MsgBox exist_links(i) ActiveWorkbook.BreakLink name:=exist_links(i), Type:=xlLinkTypeExcelLinks Next Else MsgBox "Связей не найдено" End If 'Третья часть макроса: Настройка формата под себя Dim wb As Workbook Set wb = ActiveWorkbook 'Sheets("Исходные данные").UsedRange.Value = Sheets("Исходные данные").UsedRange.Value 'Sheets("ПЗ МЭР").UsedRange.Value = Sheets("ПЗ МЭР").UsedRange.Value 'Sheets("ПЗ").UsedRange.Value = Sheets("ПЗ").UsedRange.Value Application.DisplayAlerts = False 'Sheets("Справочник").Delete Application.DisplayAlerts = True 'Sheets("КЦ").Visible = xlSheetsHidden Sheets("Ф.1(1д)").Visible = xlSheetHidden |
28.07.2025 09:02:13
Так вот в том и проблема, что имя книги не фиксировано, оно может быть любым. Так-то бы да, я написал "разорви внешние связи с книгой с именем таким-то", но имя книги не известно. Может его можно как-то запомнить изначально. И потом использовать в макросе? Знаний банально не хватает. Я пошерстил форум, но что-то ответ не нашел.
Изменено: |
|||
|
28.07.2025 09:01:27
Подскажите, может кто-то сможет.
Вариант МатросНаЗебре, не работает, как раз таки появляется сообщение MsgBox "Связей не найдено", потому что переключение на книгу А (первоначальную) не происходит видимо. Спасибо заранее. |
|||||
|
28.07.2025 07:08:17
МатросНаЗебре, долго отсутствовал, потому что профиль на другом пк. Макрос, на книге, которая не содержит связи не запускаю. Последовательность просто изначально была заложена, что сначала выносим листы в отдельную книгу, а в старой разрываем связи.
|
|
|
25.07.2025 14:26:14
МатросНаЗебре,
Изменено: |
|||||
|
25.07.2025 14:07:06
МатросНаЗебре,
Основная ошибка все еще в том, что после окончания второй части макроса
|
|||
|
25.07.2025 13:15:41
МатросНаЗебре,
Немного не уловил куда часть кода ставить, которая в #4? Если подставляю код только из #3, то не работает. |
|
|
25.07.2025 12:21:26
Добрый день!
Прошу помочь. Набрал макрос из нескольких других для своих целей, но не хватает знаний, чтобы соединить их воедино и не вылетала ошибка. По отдельности они прекрасно работают.
Проблема возникает со второй части, т.к. в первой части переносятся листы в новую книгу и получается, что эта книга становится "активной" и уже вторая часть - удаление внешних связей работает в этой новой книге, но по факту связи должны разрываться в изначальной книге. Вопрос: как сделать первичную книгу активной (*наименование первичной книги может быть любым). И далее как потом опять не нарваться на такую же проблему при переходе в третью часть макроса? Спасибо за ответ! P.S. Конец макроса выложен не полностью, потому что он огромный и содержит "личную" информацию, прошу не судить строго. |
|||
|
25.07.2025 11:12:46
МатросНаЗебре, спасибо за ответ, результат получен.
Зато доходчиво, пример приложен и без суеты) Возможно лучше подошло бы "определение диапазона макросом". |
|
|
25.07.2025 09:34:39
Добрый день!
Прошу помочь. В данной теме нашел макрос: Использую его чтобы в книге на листах превратить табличную часть в значения.
После этого идет следующая строчка кода, изменение только в названии листа
|
|||||||
|
11.03.2025 06:16:46
nilske, это понятно, но таким образом мы уберем объединение, а колонки останутся. Грубо говоря на текущий момент имеем вот такой вид:
если убираем объединение, то получим такой вид: а нужен такой вид: Т.е. на первом скрине ячейка занимает несколько столбцов, а на последнем ячейка занимает один столбец.
Изменено: |
|
|
10.02.2025 10:42:30
Разрешите простой вопрос, как отключить все эти предупреждения макросами? Я знаю только:
Прописал сейчас его в модуль книги с надстройкой и не помогло.
Изменено: |
|||||
|
10.02.2025 09:44:52
|
|||
|
10.02.2025 09:33:36
Добрый день!
Подскажите знающие люди.. Условия задачи: Файл Excel с пользовательской функцией (называется: "СцепитьЕсли2") записана, как модуль VBA при помощи Function, которая используется на листе. При создании копии в новую книгу в ячейке, где была пользовательская функция появляется ошибка "#ИМЯ?". Вопрос: Как сохранить пользовательскую функцию при создании копии в новую книгу и не было соответствующей ошибки. Мои попытки: -Вынести функцию в отдельную книгу путем сохранения в формате "надстройка Excel, формат .xlam". Автоматически открывать эту книгу при открытии основной книги. Для этого использую макрос, который записываю в VBA Эта книга:
Спасибо! |
|||
|
06.02.2025 11:29:52
Изменено: |
|||
|
06.02.2025 11:05:56
Добрый день!
Прошу помощи.. Описание задачи: Т.е. мы задаем в столбец "Базовый год" строку "Год" и строку "Цена", потом задаем слобец "Планируемый год" строку год". Столбец "Индекс" должен "понять", что в диапозон между 2020 и 2016 гг. входят 2017, 2018, 2019, 2020 и взять произведение индексов из таблицы соответствующие годам. В итоге столбец "Планируемый год" строка "Цена" заполняется автоматически умножением Цены Базового года x Индекс = Цену Планируемого года. Вопрос: Как можно получить индекс путем ввода только Базового года и Планируемого года?* *Понятно, что хочется способа более компактного, чем мой, т.к. какая тут таблица (здоровенная) будет, если закончить ее полностью. Файлик приложил. Спасибо за помощь! P.S. В распоряжении только Excel 2016
Изменено: |
|
|
27.05.2024 06:34:14
|
|||||||||
|
23.05.2024 12:06:04
В исходной таблице при объединении запросов у меня подцепляются более 60 строк по Коду из Таблицы2 к Таблице1. Т.е. создается колонка со значениями Table, при их раскрытии там более 60 строк наименований совпадающих по Коду. |
|||||
|
22.05.2024 13:51:21
Изменено: |
|||
|
22.05.2024 13:49:24
AlienSx,
Ну т.е. мысль о том, что можно сначала группировать значения по коду, а потом их уже внутри как-то "фильтровать" кодом (т.е. ограничивать выборку по условию даты) и потом суммировать Количество нарастающим итогом, пока это не превысит Потребность и в итоге вывести среднее значение цены, вывести максимальную дату, вывести суммарное количество, и сцепить в одну строку обоснование. Т.е. работать вот с этими данными как-то можно? Это же уже отсортированные данные. Это не правильный ход мыслей?
Изменено: |
|
|
22.05.2024 11:23:04
AlienSx,
Когда-то была задача из группы с одинаковыми кодом, но разными датами найти максимально актуальную дату. Пробовал работать по этой
Изменено: |
|
|
22.05.2024 11:07:58
P.S. По-другому получается как будто данные в таблице 2 группируются при объединении двух запросов в PQ (скриншот приложил) и если в этой группе данные подходят под условия Таблицы 2, то их надо "усреднить" (вывести среднее значение цены, вывести максимальную дату, суммировать количество, и сцепить в одну строку обоснование). Но сейчас понимаю, что получается тупиковый вариант в ситуации, когда в Таблице 2 есть один приход с количеством большим, чем применяемость в Таблице 1, то по сути по моим условиям это ошибка сразу. Как это побороть? Если только вручную? Ведь по сути если пришло больше, чем требуется, то использовать можно, но просто останется остаток. Или можно как-то учесть в коде, чтобы такие варианты учитывались, типа если не соответствует ни один приход по количеству, то брать один приход с максимальной ценой. Но это я уже так "мудрю". Поправьте, если что. Спасибо, что откликнулись!
Изменено: |
|||||||||||
|
22.05.2024 08:05:28
Добрый день!
Прошу помочь в решении задачи каким-либо образом (написать код, скинуть ссылку на подобную тему, подсказать какие формулы могут помочь или может вообще как-то подойти с другой стороны). Описание. Есть 2 таблицы: -Таблица Лист1 - данные о необходимых материалах с кодом и применяемостью и периодом ограничения по датам приходов; -Таблица Лист2 - данные о пришедших материалах, дата прихода, количество, цена и обоснование. Таблицу Лист1, нужно объединить с таблицей Лист2. Таблица Лист1 - главная. Цель. Чтобы при объединении таблиц Лист1 (к которой подцепляю) и Лист2 (которую подцепляю) можно было добавить условия: 1)Дата Лист2 вписывалась в отрезок Период начала-Период конца; 2)Так же, чтобы Количество Лист2 меньше или равно Применяемости Лист1; 3)Исходя из вышеперечисленных условий считалась средняя цена из Лист2; 4)И выводились все причастные обоснования из Лист2 (типа Сцепить "Обоснование, Обоснование"); Т.е. условия 1) и 2) выполнялись одновременно. Примерно что хочется получить в Листе "Примерный итог". Что делаю. Моих знаний хватает на то, чтобы сформировать из каждой таблицы Лист1 и Лист2 запросы, далее объединить их и... всё.. (Лист3). Вообще понимания нет возможно ли решить такое через PQ. Аналогов не нашел особо. Пример приложил. Заранее спасибо за помощь! P.S. Если гиблое дело пытаться так решить прошу тоже написать об этом! |
|
|