Excel 如何在特定行(VBA)上方添加新行?

Excel 如何在特定行(VBA)上方添加新行?,excel,vba,Excel,Vba,我有一个excel电子表格,如下所示: (C5): Top (C6): (C7): (C8): (C9): (C10): (C11): (C12): (C13): (C14): Bottom (C5): Top (C6): Apple 1 (C7): Apple 2 (C8): Apple 3 (C9): Orange 1 (C10): Orange 2 (C11): Orange 3 (C12): Hello world 1 (C13): Hello world 2 (C14): Botto

我有一个excel电子表格,如下所示:

(C5): Top
(C6):
(C7):
(C8):
(C9):
(C10):
(C11):
(C12):
(C13):
(C14): Bottom
(C5): Top
(C6): Apple 1
(C7): Apple 2
(C8): Apple 3
(C9): Orange 1
(C10): Orange 2
(C11): Orange 3
(C12): Hello world 1
(C13): Hello world 2
(C14): Bottom
(C5): Top
(C6): Apple 1
(C7): Apple 2
(C8): Apple 3
(C9): Orange 1
(C10): Orange 2
(C11): Orange 3
(C12): Orange 4
(C13): Hello world 1
(C14): Hello world 2
(C15): Bottom
有两个用户定义的变量,apple和orange。假设苹果=3,橙色=3。输出应如下所示:

(C5): Top
(C6):
(C7):
(C8):
(C9):
(C10):
(C11):
(C12):
(C13):
(C14): Bottom
(C5): Top
(C6): Apple 1
(C7): Apple 2
(C8): Apple 3
(C9): Orange 1
(C10): Orange 2
(C11): Orange 3
(C12): Hello world 1
(C13): Hello world 2
(C14): Bottom
(C5): Top
(C6): Apple 1
(C7): Apple 2
(C8): Apple 3
(C9): Orange 1
(C10): Orange 2
(C11): Orange 3
(C12): Orange 4
(C13): Hello world 1
(C14): Hello world 2
(C15): Bottom
如果apple=3和orange=4,我希望输出如下所示:

(C5): Top
(C6):
(C7):
(C8):
(C9):
(C10):
(C11):
(C12):
(C13):
(C14): Bottom
(C5): Top
(C6): Apple 1
(C7): Apple 2
(C8): Apple 3
(C9): Orange 1
(C10): Orange 2
(C11): Orange 3
(C12): Hello world 1
(C13): Hello world 2
(C14): Bottom
(C5): Top
(C6): Apple 1
(C7): Apple 2
(C8): Apple 3
(C9): Orange 1
(C10): Orange 2
(C11): Orange 3
(C12): Orange 4
(C13): Hello world 1
(C14): Hello world 2
(C15): Bottom
如果apple+orange>6,那么我想在C14上方插入空行,以便“apple 1”到“Hello world 2”这两行在“顶部”和“底部”行之间完美匹配

我该怎么做?我的代码如下。然而,当我使用“3”和“4”作为apple和orange的用户输入运行它时,它给了我以下错误:

“运行时错误'1004': 应用程序定义或对象定义错误“


我转载了这个问题

每次增加lRow时,它都会将结果向下移动一次。所以它从第2行开始,然后下一次运行从第3行开始

更改此项:

lRow=单元格(6,3)。结束(xlUp)。行+1

致:

lRow=2

这只是为了解决第一个问题。你可以稍后再做那部分

接下来,我们需要记录水果的先前值。再次单击按钮时,输入较大的值,但需要知道上一次单击时“底部”是在哪一行。这样你就可以在插入顶部之前将其向下洗牌

我不能逐一进行更改,但我做的另一件重要的事情是录制一个宏(使用“开发人员”选项卡,您可以在Excel选项中启用它)。我录制的宏是选择一行并插入新行。我无法让你的代码工作

'need a private member variable whose scope lives through out the module or a worksheet (beyond the life of a Dim variable in a Sub-routine or Function)
Private prevFruitCount As Integer

Sub Main()

Dim apple As Integer, orange As Integer
Dim i As Long, j As Long, k As Long, l As Long, lRow As Long, sentence1 As Long, sentence2 As Long, addRows As Long

lRow = 2
apple = InputBox("Please enter number of apples")
orange = InputBox("Please enter number of oranges")

'TO DO use strings instead of integers as returns for InputBoxes, and validate

sentence1 = 1
sentence2 = 1

fruit = apple + orange

addRows = fruit - prevFruitCount
If addRows > 0 Then
    For i = 1 To addRows
        'Rows("C:" & (fruit + sentence1 + sentence2 + 1)).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        Dim rowToInsert As Integer
        rowToInsert = prevFruitCount + sentence1 + sentence2 + lRow
        Rows(rowToInsert & ":" & rowToInsert).Select
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbov
    Next i
End If

'record the previous value of fruit, for the next click as a baseline
prevFruitCount = fruit

    For i = 1 To apple
        Cells(lRow, 3) = "Apple " & i
        lRow = lRow + 1
    Next i

    For j = 1 To orange
        Cells(lRow, 3) = "Orange " & j
        lRow = lRow + 1
    Next j
    
    For k = 1 To sentence1
        Cells(lRow, 3) = "Hello world 1"
        lRow = lRow + 1
    Next k
    
    For l = 1 To sentence2
        Cells(lRow, 3) = "Hello world 2"
        lRow = lRow + 1
    Next l
        

End Sub

使用“运行时错误'1004':应用程序定义或对象定义的错误”我能够在单步执行VBA代码并手动更改电子表格中的值时获得该错误。

哪一行引发了错误?@BigBen我不知道如何检查在引发错误时发出错误的行。