Обновление: я решил это с помощью следующего фрагмента кода. Спасибо за помощь всем. tableList - это объект Range, созданный из таблицы в рабочей книге, в которой перечислены детали различных таблиц в рабочей книге. Объект Range не требует указания листа, на котором расположена таблица .
For rowNumber = 1 To tableList.Rows.Count
If tableList.Item(rowNumber, actionColumn).Value = actionType Then
tableName = tableList.Item(rowNumber, nameColumn).Value
Set activeTable = Range(tableName)
With activeTable
.Rows(.Rows.Count + 1).Value = activeTable.Rows(-1).Value
End With
End If
Next
У меня есть формулы в строке прямо над строкой заголовка моей таблицы / диапазона. Я хочу скопировать значения формул и вставить их в последнюю (новую) строку таблицы / диапазона. Я знаю, как заставить код работать, за исключением ссылки на строку с формулами.
Это код, который я пытался использовать для ссылки на ячейку на две строки выше первой ячейки в моей таблице (которую я установил / определил как диапазон).
Set rangeTopLeft = rangeActive.Cells(1, 1).Offset(-2)
Я получаю ошибку 1004 при попытке запустить код VBA.
Затем в коде я создаю диапазон путем изменения размера rangeTopLeft
и выполняю другие шаги для копирования и вставки значений из формул в новую строку.
Я не получаю ошибку, если использую .Offset(-1)
, но это приводит меня только к первой ячейке столбца в моей строке заголовка. Я предполагаю, что должно быть что-то, где смещение не может выходить за границы диапазона.
Предполагая, что это так (или что-то еще), как мне обойти это?
Заранее спасибо.
Хорошо, пожалуйста, избегайте «новичков». Я уберу его после того, как смогу заставить его работать.
'Вставить значения формулы на прошлой неделе в новые строки
Sub PasteValues()
Dim rangeList As Range
Dim rangeActive As Range
Dim rangeToCopy As Range
Dim lastRow As Range
Dim rangeName As String
Dim rowNumber As Integer
Dim dataBeginColumn As Integer
Dim actionColumn As Integer
Dim actionType As String
Dim nameColumn As Integer
Dim dataColumnFirst As Integer
Dim dataColumnLast As Integer
Dim response1 As VbMsgBoxResult
Dim response2 As VbMsgBoxResult
Set rangeList = Range("tTablesDetails").ListObject.DataBodyRange
nameColumn = 1
actionColumn = 7
actionType = "Append"
'Requires user to click "Yes" twice
before pasting values
response1 = MsgBox("Do you want to past last week's formula values to tables of this Workbook?", vbYesNo + vbCritical)
If response1 = vbNo Then Exit Sub
response2 = MsgBox("Are you sure? This action cannot be undone.", vbYesNo + vbCritical)
If response2 = vbNo Then Exit Sub
For rowNumber = 1 To rangeList.Rows.Count
If rangeList.ListObject.DataBodyRange(rowNumber, actionColumn).Value = actionType Then
'get table name from row whose action column equals actiontype
rangeName = rangeList.ListObject.DataBodyRange(rowNumber, nameColumn).Text
Set rangeActive = Range(rangeName)
Set rangeTopLeft = rangeActive.Cells(1, 1).Offset(-2)
Set rangeToCopy = rangeTopLeft.Resize(1, rangeActive.Columns.Count)
Set lastRow = rangeActive.Offset(rangeActive.Rows.Count).Resize(1, rangeActive.Columns.Count)
lastRow = rangeToCopy.Value
End If
Next
MsgBox ("Finished Copying Values to New Rows")
End Sub'