Эх, муторно это, но в целом можно попробовать несколько вариантов:
1. Вы можете создать шаблон Excel, который будет содержать исходную таблицу-бланк. Копии таблицы можно создать на основе этого шаблона. Однако, при изменении шаблона, изменения не будут автоматически применены к существующим копиям. Для синхронизации изменений, вам нужно будет обновлять каждую копию вручную, либо создавать новый шаблон и заменять им старые копии.
2. Регнуть через мастер шаблонов. Он буквально позволяет создавать шаблоны и автоматически обновлять данные в копиях. Однако, это больше подходит для сбора данных из форм, чем для синхронизации форматирования и формул, как нужно вам.
3. Наиболее эффективный - макрос через VBA, чтобы он отслеживал изменения в бланке и применял их к копиям, но с ним нужно поработать. Используйте событие
Worksheet_Change:
Код |
---|
Private Sub Worksheet_Change(ByVal Target As Range)
' Укажите диапазон, который вы хотите отслеживать
Dim sourceRange As Range
Set sourceRange = Me.Range("A1:E10") ' Измените на нужный диапазон
' Проверка, произошли ли изменения в указанном диапазоне
If Not Application.Intersect(sourceRange, Target) Is Nothing Then
' Применение изменений к копиям
ApplyChangesToCopies Target
End If
End Sub
Sub ApplyChangesToCopies(Target As Range)
' Укажите пути к копиям или имена листов в текущей книге
Dim copyPaths() As Variant
copyPaths = Array("C:\Path\To\Copy1.xlsx", "C:\Path\To\Copy2.xlsx")
' Или если копии находятся в той же книге
' Dim copySheets() As Variant
' copySheets = Array("Sheet2", "Sheet3")
' Применение изменений к каждой копии
Dim i As Integer
For i = LBound(copyPaths) To UBound(copyPaths)
' Открытие книги копии (если она не открыта)
Dim copyWorkbook As Workbook
Set copyWorkbook = Workbooks.Open(copyPaths(i))
' Применение изменений
ApplyChangeToCopy copyWorkbook, Target
' Сохранение и закрытие книги копии
copyWorkbook.Save
copyWorkbook.Close
Next i
End Sub
Sub ApplyChangeToCopy(copyWorkbook As Workbook, Target As Range)
' Укажите лист в копии, где нужно применить изменения
Dim copySheet As Worksheet
Set copySheet = copyWorkbook.Sheets(1) ' Измените на нужный лист
' Применение изменений (например, обновление формул и форматирования)
copySheet.Range(Target.Address).Value = Target.Value
copySheet.Range(Target.Address).Font.Bold = Target.Font.Bold
copySheet.Range(Target.Address).Interior.ColorIndex = Target.Interior.ColorIndex
End Sub
|
Код будет запускаться каждый раз, когда в исходной таблице меняются данные, и применять эти изменения к копиям.
Нужно будет настроить пути к копиям (
copyPaths) или имена листов (
copySheets), а также диапазон (
sourceRange), который хотите отслеживать. Так же мой код может обрабатывать несколько копий, указанных в массиве
copyPaths и чекать изменения в
sourceRange.
И не забудьте, что он должен быть размещен в модуле листа исходной таблицы, чтобы событие
Worksheet_Change срабатывало при изменении данных в этом листе.