У меня есть лист сметы, который содержит несколько листов и формул. Пользователь может ввести свои данные в книгу, и автоматически рассчитываются различные финансовые сценарии. Главная книга содержит несколько ячеек, которые содержат формулы и могут быть перезаписаны пользователем. Это хорошо, поскольку рабочий лист проецируется месяц за месяцем, и его необходимо обновлять фактическими записями для обеспечения точности прогнозов.
Иногда я обновляю / обновляю рабочую таблицу составления бюджета и хочу, чтобы пользователь мог экспортировать свои данные из старой рабочей таблицы и импортировать их в новую рабочую таблицу. Я создал макрос, который экспортирует данные для определенных диапазонов. Я также создал макрос, который импортирует диапазон данных на новый лист.
Однако моя проблема заключается в том, что экспортируемый макрос также преобразует заранее определенные вычисления из их исходной формулы (= A1 + B2, например) в любой результат для этой формулы (например, 1200 долл. США). Это создает проблемы для будущих прогнозов в других диапазонах данных, поскольку формула теперь заменена статическим числом, которое не может изменяться в зависимости от других ежемесячных депозитов / изъятий.
Я попытался экспортировать данные за вычетом любых ячеек, которые содержат формулы, но безуспешно. Я приложил свой рабочий код экспорта (так как у меня много листов и диапазонов, я опубликовал только минимум, чтобы показать, что у меня работает). Я также приложил код, который использовал для игнорирования ячеек с формулами (вдохновленный этим постом Макрос копирования / вставки Excel VBA: игнорировать ячейки с формулами ).
Любая помощь очень ценится. Как очевидно, я новичок в VBA и почти ничего не знаю об этом!
КОД РАБОЧЕГО ЭКСПОРТА:
Sub GenerateData()
Dim strFile As String
'New workbook with 3 sheets
Workbooks.Add xlWBATWorksheet
ActiveSheet.Name = "Financial Info"
Sheets.Add(After:=Sheets(1)).Name = "HELOC"
Sheets.Add(After:=Sheets(2)).Name = "Accelerated Mortgage"
Sheets.Add(After:=Sheets(3)).Name = "Accelerated 2nd Loan"
ActiveWorkbook.Sheets("Financial Info").Range("G6:G8").Value = ThisWorkbook.Sheets("Financial Info").Range("G6:G8").Value
ActiveWorkbook.Sheets("Financial Info").Range("G11:G13").Value = ThisWorkbook.Sheets("Financial Info").Range("G11:G13").Value
ActiveWorkbook.Sheets("HELOC").Range("D13:F74").Value = ThisWorkbook.Sheets("HELOC").Range("D13:F74").Value
ActiveWorkbook.Sheets("HELOC").Range("D86:F147").Value = ThisWorkbook.Sheets("HELOC").Range("D86:F147").Value
End Sub
НЕ РАБОТАЮЩИЕ: ИГНОРНЫЕ КЛЕТКИ С ФОРМУЛЫ
Sub example()
Dim source As Range
Dim target As Range
Set source = ActiveWorkbook.Sheets("HELOC").Range("D13:F877")
Set target = ThisWorkbook.Sheets("HELOC").Range("D13:F877")
copy_non_formulas source:=source, target:=target
copy_non_formulas source:=Range("D13:F74"), target:=Range("D13:F74")
copy_non_formulas source:=Range("D86:F147"), target:=Range("D86:F147")
End Sub
Public Sub copy_non_formulas(source As Range, target As Range)
'Assumes that all formulas start with '=' and all non formulas do not
Dim i As Long
Dim j As Long
Dim c As Range
For i = 1 To source.Rows.Count
For j = 1 To source.Columns.Count
Set c = source(RowIndex:=i, ColumnIndex:=j)
If Left(c.Formula, 1) <> "=" Then
target(RowIndex:=i, ColumnIndex:=j).Value = c.Value
End If
Next j
Next i
End Sub