VBA - Применение автозаполнения со вставленными строками (на основе поля ввода) и применение его к другому листу - PullRequest
0 голосов
/ 31 марта 2020

У меня есть макрос, который добавляет строки новостей на основе входного ящика пользователя, и я хотел бы использовать автозаполнение для сохранения формул, а также, если возможно, того же макета.

Пример: я хочу добавить 4 дополнительных продукта в sheet1. Теперь макрос (моя кнопка) создает 4 новые строки ниже строки № 24 (Product1), строки № 28 и строки № 32. Я хочу применить исходные формулы в столбцах O, AB, AO, BB и BO к новым вставленным строкам. Как я могу адаптировать следующий код?

Sub NewPoS()

Application.ScreenUpdating = False
Dim MyN As String
Dim i As Long, MyMarker As Long, MyM As Long, LstRW As Long
Dim ws As Worksheet: Set ws = Feuil1

MyN = InputBox("Give me a number", "My Input Box")
If Not IsNumeric(MyN) Then Exit Sub
MyN = CInt(MyN)
For MyMarker = 1 To 5
LstRW = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
MyM = Application.Match("Marker" & MyMarker, ws.Range(ws.Cells(1, 1), ws.Cells(LstRW, 1)), 0)
    For i = 1 To MyN
        ws.Rows(MyM + 2).EntireRow.Insert shift:=xlUp
    Next i
Next MyMarker

End Sub

Кроме того, я хочу сделать то же самое на sheet2, но в котором значения ячеек такие же, как sheet1 (как уже установлено)

Спасибо за вашу помощь!

1 Ответ

1 голос
/ 31 марта 2020

Если вы хотите скопировать все формулы, которые у вас уже есть, в 1 строку, вы можете использовать эту команду:

secondRange.Formula = firstRange.Formula

Где secondRange и firstRange - оба объекта диапазона. Так, например, если у вас есть все необходимые формулы в первой строке на рабочем листе, вы можете назначить первый диапазон объекту диапазона:

Dim firstRange As Range
Set firstRange = Range("A1:BO1")

Затем внутри вашего l oop, где вы создаете В новой строке вставьте формулы:

For i = 1 To MyN
    ws.Rows(MyM + 2).EntireRow.Insert shift:=xlUp
    Range("A" & (MyN + 2) & ":BO" & (MyN + 2)).Formula = firstRange.Formula
Next i

Или, если вы хотите получать формулы по одной, вы тоже можете это сделать. Это похожая команда, но вместо range2.Formula = range1.Formula вы делаете это по одной ячейке за раз, например

Cells(MyN + 2, 15).Formula = Cells(1, 15).Formula

Для второго листа это одно и то же. Вы можете создать второй l oop, чтобы вставить все значения во второй лист, просто убедитесь, что вы ссылаетесь на имя или индексный номер листа каждый раз, когда ссылаетесь на ячейку или диапазон.

For i = 1 To MyN
    Sheets(2).Rows(MyM + 2).EntireRow.Insert shift:=xlUp
    Sheets(2).Range("A" & (MyN + 2) & ":BO" & (MyN + 2)).Formula = firstRange.Formula
Next i

Sheets(2).Cells(MyN + 2, 15).Formula = Sheets(1).Cells(1, 15).Formula
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...