Excel VBA - Задание диапазона относительной формулы в одной строке для пустого диапазона из нескольких строк, относительные ссылки пропускают строки
Я пытаюсь создать макрос для пользователей шаблона книги Excel, чтобы:
1) добавить строки в именованный диапазон,
2) переместить последнюю запись в этом именованном диапазоне в верхнюю строку в этом диапазоне новых строк (чтобы сохранить границы именованного диапазона и сохраните порядок любых записей, введенных пользователем), и
3) заполните эти новые строки формулой из главной строки.
Я застрял, когда установлены формулы главной строки для этого диапазона нескольких пустых строк относительные ссылки (после первой строки) пропускают строку. Например, если первая строка в этом диапазоне, скажем, строка 16, то:
Строка 16 имеет ссылку на формулу для A16,
В строке 17 эта ссылка установлена на A18,
В строке 18 для этой ссылки установлено значение A20 и т. Д. c.
Ниже приведена подпрограмма, предназначенная для выполнения этой задачи:
Option Explicit
Public Sub AddRows( _
ByRef rrngInputFields As Range, _
ByRef rrngMasterRow As Range, _
ByVal intRowsToAdd As Long)
'Add rows to worksheet
'rrngInputFields is the named range that defines user input fields
'rrngMasterRow is the row that contains template formula
'intRowsToAdd is the number of rows to add, determined by the user
Dim rngRefRow As Range
Dim rngLastRecordOldRow As Range
Dim intLastRecordNewNo As Integer
Dim rngNewRows As Range
Dim rngLastRecordNewRow As Range
Dim intCountCol As Integer
'Set the last user record in the user input range
'New rows will be added above this to preserve the range
Set rngRefRow _
= rrngInputFields.Cells(rrngInputFields.Rows.Count, 1).EntireRow
'Set the last user record to later be moved to the top of the added rows
'This will maintain the order the user input their data
Set rngLastRecordOldRow = rngRefRow
intLastRecordNewNo = rngRefRow.Row
'Add the new rows
rngRefRow.Resize(intRowsToAdd).Insert
intCountCol = rrngMasterRow.Columns.Count
'Set the range of new rows that will receive the template formula and formatting
Set rngNewRows _
= ActiveSheet.Range(Cells(intLastRecordNewNo + 1, 1), _
Cells(intLastRecordNewNo + intRowsToAdd, intCountCol))
'Set the row to move the last user input record
Set rngLastRecordNewRow = ActiveSheet.Rows(intLastRecordNewNo)
'Move the last user record to the bottom of the existing records
rngLastRecordNewRow.FormulaR1C1 = rngLastRecordOldRow.FormulaR1C1
'Copy the master row, including all formulas and formatting, to the added rows
rngNewRows.FormulaR1C1 = rrngMasterRow.FormulaR1C1
End Sub
В последней строке указывается, где проблема возникает сама по себе.
Что может вызвать этот пропуск в относительной ссылке?