Я некоторое время искал ответ на этот вопрос и подошел очень близко.
Короче, у меня есть форма, которая содержит различные столбцы.Одним из них является количество.Этот столбец всегда будет иметь значение, как если бы его количество не оставалось пустым.Однако, если ячейка заполнена значением, мне нужно скопировать всю строку формулы в строку ниже.
Я натолкнулся на следующее здесь сегодня утром, которое является самым близким, которое я достиг, но яне понимаю достаточно кода, чтобы он соответствовал моим потребностям (или, возможно, это даже не самый лучший метод?)
Код, который я нашел:
Sub SmartCopy()
Dim s1 As Worksheet, s2 As Worksheet
Dim N As Long, i As Long, j As Long
Set s1 = Sheets("Order")
Set s2 = Sheets("Converted")
N = s1.Cells(Rows.Count, "C").End(xlUp).Row
j = 1
For i = 1 To N
If s1.Cells(i, "C").Value = "" Then
Else
s1.Cells(i, "C").EntireRow.Copy s2.Cells(j, l)
j = j + 1
End If
Next i
End Sub
В моей формеколичество начинается с E15 (заказанные детали находятся в колонках перед рукой).Если E15 имеет значение, то формула должна быть скопирована в следующую строку и так далее.Если количество следующей строки не заполнено, мне нужно удалить любую введенную формулу.Таким образом, в сущности, заполнение только в том случае, если в исходном листе есть значение в количестве, поскольку в конце также должна быть одна строка.Я могу выполнить последнюю часть, но любой код, который я обнаружил ранее, входит в формулу, поэтому, конечно, ячейка не становится пустой и вызывает другие проблемы, следовательно, спрашивая, можно ли это сделать таким образом ?.
Это копия формы.Вы заметите, что значения начинаются с A15 для номера детали, и весь ряд информации понадобится, если что-то будет заказано в следующей строке.
![enter image description here](https://i.stack.imgur.com/zkURW.png)
Это конвертированная версия, как вы видите, она заполняется, но мне нужно скопировать, как описано.
![enter image description here](https://i.stack.imgur.com/vGvEt.png)
Остальная часть моего кода работает, именно с этим разделом у меня возникают проблемы.Текущий полный код -
Sub ButtonMacro()
'Hide alerts
Application.DisplayAlerts = False
'Add new sheet for table
Sheets.Add.Name = "Converted"
'Populate new worksheet
Range("A1").Formula = "MSG"
Range("B1").Formula = "=Order!F2"
Range("C1").Formula = "ORDER"
Range("D1").Formula = "1400008000"
Range("E1").Formula = "501346009175"
Range("F1").Formula = "=TODAY()"
Range("F1").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("G1").Formula = "=Now()"
Range("G1").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.NumberFormat = "[$-x-systime]h:mm:ss AM/PM"
Range("A2").Formula = "HDR"
Range("B2").Formula = "C"
Range("C2").Formula = "1400011281"
Range("G2").Formula = "=Order!F2"
Range("H2").Formula = "=Order!D2"
Range("K2").Formula = "STD"
Range("L2").Formula = "=Order!F5"
Range("N2").Formula = "=Order!F7"
Range("O2").Formula = "=Order!F8"
Range("Q2").Formula = "=Order!F9"
Range("R2").Formula = "=Order!F12"
Range("A3").Formula = "POS"
Range("B3").Formula = "=ROW()*10-20"
Range("B3").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("C3").Formula = "=Order!C15"
Range("D3").Formula = "=Order!A15"
Range("E3").Formula = "=Order!B15"
Range("F3").Formula = "=Order!E15"
Range("G3").Formula = "=Order!G15"
Range("H3").Formula = "=IF(Order!H15<1,"""",""GBP"")"
Range("M3").Formula = "=COUNTIF(C[-3], ""POS"")+COUNTIF(C[-3], ""HDR"")"
'Fills column to last row of data from Cell C3
Dim LastRow As Long
LastRow = Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Range("C3:H3" & LastRow).FillDown
'Find last blank in A and fill with TRA
Cells(Application.Evaluate("MAX(IF(C3:C2000<>"""",ROW(c3:c2000)),0,1)"), "A").Select
ActiveCell = "TRA"
'Format cells to remove 0 value
Range("A1:Z1000").Select
Range("Z1000").Activate
Selection.NumberFormat = "#;#;"
'Reinstate alerts
Application.DisplayAlerts = True
MsgBox "We have saved a copy of your order form to your computer at C:\X\X"
End Sub
Раздел "Заполняет столбец до последней строки данных из ячейки C3" - это то, что в настоящее время не делает то, что мне нужно.
Редактировать: я должен такжедобавить, можно заказать любое количество деталей, поэтому я не могу указать строку за строкой, это может быть одна деталь, это может быть 1000.
Примеры:
Форма клиента заполнена и готова к преобразованию![Client form](https://i.stack.imgur.com/v1g5r.png)
Конвертированная форма (от которой я пытаюсь избавиться от желтого цвета) ![Converted version](https://i.stack.imgur.com/F5zJn.png)
Так что в конвертированнойверсию, вы увидите TRA в строке 33. Это потому, что текущий метод копирует вниз и ищет следующую пустую ячейку, так как они имеют формулу, они не являются пустыми, следовательно, спрашивая, можно ли это сделать таким образом.Надеюсь, это поможет?