Для того, чтобы создать "архив" формул нужного рабочего листа, можно сохранить формулы и адреса ячеек, которые содержат эти формулы, например, в текстовый файл. Для этого можно воспользоваться процедурой ExportFormulas, а для того, чтобы восстановить сохранённые формулы, достаточно всего лишь воспользоваться процедурой ImportFormulas.
Private Sub ExportFormulas()
iFormulas$ = ThisWorkbook.Path & "\Formulas.txt"
If Table.ProtectContents = True Then
MsgBox "Рабочий лист защищён", _
vbCritical, "Ошибка пользователя !!!"
Exit Sub
End If
On Error GoTo ErrHandler
Dim iSource As Range, iCell As Range
Set iSource = Table.UsedRange.SpecialCells(xlFormulas)
Open iFormulas$ For Output As #1
For Each iCell In iSource
Write #1, iCell.Address, iCell.Formula
Next
Close #1
ErrHandler:
If Err.Number <> 0 Then
MsgBox Err.Description, vbCritical, Err.Number
End If
End Sub
Private Sub ImportFormulas()
iFormulas$ = ThisWorkbook.Path & "\Formulas.txt"
If Dir(iFormulas$) = "" Then
MsgBox "Архивный файл изволит отсутствовать", _
vbCritical, "Ошибка пользователя !!!"
Exit Sub
End If
If Table.ProtectContents = True Then
MsgBox "Рабочий лист защищён", _
vbCritical, "Ошибка пользователя !!!"
Exit Sub
End If
With Application
.EnableCancelKey = xlDisabled
.ScreenUpdating = False
.DisplayAlerts = False
.EnableEvents = False
.Calculation = xlManual
Open iFormulas$ For Input As #1
Do While Not EOF(1)
Input #1, iAddress$, iFormula$
Table.Range(iAddress$) = iFormula$
Loop
Close #1
If MsgBox("Вы хотите сохранить изменения ?", _
vbYesNo, "") = vbYes Then ThisWorkbook.Save
.Calculation = xlAutomatic
.EnableEvents = True
.DisplayAlerts = True
.ScreenUpdating = True
.EnableCancelKey = xlInterrupt
End With
End Sub
Предполагается, что:
Table - это кодовое(программное) имя рабочего листа (см.пример), формулы которого необходимо сохранить. Использование именно кодового имени не носит обязательного характера, поэтому, Вы вправе использовать и другие варианты, например, имя листа или его индекс(номер).
Для экспорта и импорта формул необходимо, чтобы рабочий лист не был защищён, т.к. в противном случае, при экспорте, это может привести к тому, что скрытые формулы не будут заархивированы.
Данный пример не предназначен для работы с формулами массива и именованными формулами, однако, он позволит восстановить формулу и получить правильный результат вычислений, если именованная формула не была удалена и текст этой формулы не был изменён.