У меня есть книга «Task Tracker», в которой используются столбцы A: J для отображения и вычисления информации о задаче (A: E для введенных пользователем данных, F: J содержат формулы, которые используют информация в C: E и выполнять вычисления. F: J - скрытые ячейки в пользовательском представлении.) Остальная часть столбцов отображает карту тепла, где задачи выпадают на временной шкале и независимо от того, работают они вовремя, отстают или полны.Excel VBA - Insert Row & Insert Column Macros
Есть две кнопки для использования пользователями: одна для вставки новой строки и одна для вставки нового столбца. Макрос InsertRow() вставляет строку в список, а затем копирует формулы из указанной строки. Макрос InsertColumn() находит последний использованный столбец на листе и копирует все из столбца слева от него.
Первоначально у меня был макрос для InsertRow с использованием Range, который скопирован из столбца F (где начинаются формулы) в столбец XFD. Однако, как только я создал макрос InsertColumn, я понял, что я не могу так использовать InsertRow, потому что InsertColumn должен найти последний столбец, содержащий данные на листе, и добавить новый вправо ... и если InsertRow запускается первым, InsertColumn не будет работать, потому что значение lastColumn возвращается как индекс столбца XFD.
Я ищу помощь с: мне нужно найти значение lastColumn в моем InsertRow макроса, а затем использовать это значение в качестве части диапазона, когда программа выполняет копирование/вставка часть кода. Я думаю, что проблема, которую я испытываю, связана с тем, что код, который я использую, чтобы найти последний столбец, возвращает индекс, а функции Range требуется имя столбца.
Вот что у меня есть для обоих макросов:
Sub InsertTaskRow()
' InsertTaskRow Macro
'
' This macro inserts a new row below whatever role the user currently has selected, then
' copies the formulas and formatting from above down to the new row
Dim lastColumn As Long
Dim currrentRow As Long
Dim newRow As Long
lastColumn = ActiveSheet.Range("A1").SpecialCells(xlCellTypeLastCell).Column
currentRow = ActiveCell.Row
newRow = currentRow + 1
ActiveCell.Offset(1).EntireRow.Insert Shift:=xlDown
Range("F" & currentRow & ":" & lastColumn & currentRow).Copy Destination:=Range("F" & newRow & ":" & currentRow & newRow)
End Sub
Sub InsertColumn()
' InsertColumn Macro
'
' This macro copies the formulas and formatting from the last data-containing column
' in the worksheet, and pastes it into the next column to the right.
Dim lastColumn As Long
lastColumn = ActiveSheet.Range("A1").SpecialCells(xlCellTypeLastCell).Column
MsgBox lastColumn
Columns(lastColumn).Copy Destination:=Columns(lastColumn + 1)
End Sub
спасибо. Я попытался использовать этот код, чтобы найти последний столбец, но вместо поиска последнего столбца * используется *, он возвращает последний столбец на листе. – amfrancis
Это связано с тем, что данные в строке 1 пусты: xlToRight потребности будут поступать в первую пустую ячейку, когда на данные, или на первые данные, когда пуст. – mansuetus