Страницы: 1
RSS
Разорвать связи между листами одной книги, при условии, что данние на исходных листах хранятся в сводных таблицах, Разорвать связи между листами одной книги, при условии, что данние на исходных листах хранятся в сводных таблицах
 
Ситуация следующая. Имеется рабочий файл с листами исходних данных (очень массивные), на этих же листах вставлены сводные таблицы. Далее есть еще 23 лста, на которые расшаривается инфа из сводных таблиц по определенным признакам полей значений. При отправке файла, исходных листов с данными в файле быть не должно. Тоисть необходимо разорвать связи на сводные таблицы и удалить исходные листы.  
 
разорвать связи с исходными данными сводной таблицы
Согласие есть продукт при полном непротивлении сторон
 
Sanja, спасибо, но такой метод не подходит - не срабатывает.
На листах, которые содержат ссылки на сводные таблицы, формулы выглядят вот так

=ЕСЛИОШИБКА(ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ("Общий итог";Бюджет!$K$2;"Направление";R$5;"Строка отчета";$F971;"Филиал";$D$4);)
 
Копировать данные с листов и вставлять их Специальной вставкой как значения. Можно прям на месте. Можно макросом
Согласие есть продукт при полном непротивлении сторон
 
Sanja, не вариант, так как из сводных затягивается только часть данных, остальные вычисления производятся на листе формулами. Эти формулы должны остаться рабочими.
 
вот сводная с удаленным листом исходника. не обновляйте сводную.
 
Vik_tor, у меня как раз сводные являются источником для остальных листов. Вот эти сводные и нужно удалить, при этом данные из них должны остаться на Листах значением
 
Тогда стройте сводные по этим сводным, потом заменяйте исходные сводные на значения.
или исходные данные для сводных уберите в другой файл, в вашем файле поменяйте источник данных.
 
Vik_tor, слишком много данных на листах, и все подобные манипуляции файл зависает длительное время. Поэтому ищу способ разовать связи, а потом делать все необходимые манипуляции.
 
А сколько всего сводных по исходным данным?
 
Vik_tor, 2 сводных + 2 листа из которых напямую тянутся данные в шапки таблиц-детализаций
 
Делаете копию файла. Удаляете все, кроме исходных данных для сводных таблиц. Сохраняете. В основном файле меняете источник данных для ваших 2-х сводных на новый файл. В основном файле удаляете данные ( кроме шапок если они вам нужны.)
 
Vik_tor, конечно шапки нужны.
это новые сформированные отчеты.
Эти файлы формируются несколько раз в месяц. Для этого все максимально автоматизирова, теперь ище способ, возможно макрос автоматизировать финальную стадию, когда нужно разорвать связи и удалить исходники.
 
Появилась идея, может сработает макрос, который будет анализировать ячейки на листах, и если в тексте формулы встретит название листа, как пример Бюджет - то вставит всю ячейку значением?!
Как думаете - поможет?
 
Цитата
написала:
все максимально автоматизировано
Сначала автоматизировано заносите в один файл, а потом пытаетесь автоматизировано разделить. Не логично. Разделите все на 2 файла, в одном исходные данные, в другом отчеты, тогда при необходимости отчеты можно будет рассылать без исходных данных.
 
Vik_tor,  да, я понимаю, что с точки зрения логики - так было бы проще и легче. Но это не моя прихоть, есть собственник бизнеса - он устанавливает свои запросы и требования.
 
Тогда ждите помощи от знатоков макросов и тд.
Но без файла-примера, где и как расположены данные и отчеты вряд ли кто сможет помочь.
Можете обратиться в раздел работа.
 
Цитата
Tanjynja написал:
Появилась идея, может сработает макрос, который будет анализировать ячейки на листах, и если в тексте формулы встретит название листа, как пример Бюджет - то вставит всю ячейку значением?! Как думаете - поможет?
Попробуйте) А вдруг? В 'бою' не проверял)
Код
Sub ReplaceFormula()
Dim iSh As Worksheet
Dim arrSheets()
Dim iCell As Range
Dim shDic As Object
Dim iKey
On Error Resume Next
Set shDic = CreateObject("Scripting.Dictionary")
'массив имен листов с Исходными данными
arrSheets = Array("Бюджет", "Дебет", "Кредит", "Сальдо", "Бульдо")
'--------------------------------------
For Each iKey In arrSheets: iTemp = shDic.Item(iKey): Next
Application.ScreenUpdating = False
For Each iSh In ThisWorkbook.Worksheets
  If Not shDic.Exists(iSh.Name) Then
    For Each iCell In iSh.UsedRange.SpecialCells(xlCellTypeFormulas)
      For Each iKey In shDic.Keys
        If iCell.Formula Like "*" & iKey & "*" Then
          iCell.Value = iCell.Value
          Exit For
        End If
      Next
    Next
  End If
Next
Application.ScreenUpdating = True
End Sub
Изменено: Sanja - 22.11.2023 19:24:50
Согласие есть продукт при полном непротивлении сторон
Страницы: 1
Наверх