如何根据单个单元格输入的数字向表中添加行

如何根据单个单元格输入的数字向表中添加行

我是 VBA 新手,虽然我通常可以找到我想要的答案,但我找不到任何适合我需要的场景的东西。场景:我有一个工作簿,其中“总位置”将在单元格 H3 中放置一个数字。此位置不会改变,只有反映总共有多少个位置的数字/数据会改变。(如果有 10 个位置,则在 H3 中输入 10 个,如果存在 5 个位置,则在 H3 中输入 5 个。)

我在工作表的其他地方有一个“计划里程碑活动”表。我想要实现的是根据在“总列数”单元格 (H3) 中输入的数字向此表添加行。如果在 H3 中输入 10,则该表应有 10 行,如果 20 个位置 = 20 行,等等。

表格的默认位置是标题的 A46:L46。我需要添加的行将从第 47 行开始,并基于 H3 中的输入,然后根据该输入添加行。

对我来说,解决这个问题的一些挑战还包括,还有其他数据可能会改变此表的默认位置。列不会改变(A:L),但如果/当行添加到此表上方的其他表时,它可能从不同的行开始。

如果可能的话,删除行可能也需要考虑,但只需添加行就足够了在此处输入图片描述e. 最终的期望结果是让此表中的行数与输入到 H3 中的数字相匹配。H3=1:表有一行,H3=2:表有 2 行,H3=3:表有 3 行,依此类推。

可以这样做吗?用不用宏都可以吗?

附加 2 张图片。

提前致谢! 在此处输入图片描述

答案1

如果您的表格被格式化为 Excel 表格,这将使这一过程变得容易得多。然后可以通过名称引用该表格,即使它移动到不同的行也没有关系。因此,如果您还没有这样做,请将光标放在表格中并按Ctrl+ T

在我的示例中,我将表命名为 LocationTable。

我创建了几个单元格来控制宏的行为。

H3 被命名为 location_table_size。

H4 被命名为 clear_table_before_add。

如果需要移动单元格,命名单元格很有用。

我从这个开始:

在此处输入图片描述

我创建了这个宏:

Public Sub InsertRow()

Dim thisTable As ListObject
Dim thisRow As ListRow
Dim i As Integer
Dim j As Integer
Dim clear_first As Boolean

Set thisTable = Range("LocationTable").ListObject

' get the flag whether to clear the table first or not
clear_first = Sheet1.Range(Names("clear_table_before_add").RefersTo)

If clear_first = True And thisTable.ListRows.Count > 0 Then

    Debug.Print 'Clearing LocationTable'
    thisTable.DataBodyRange.Delete

End If

' get the number of rows to add
j = Sheet1.Range(Names("location_table_size").RefersTo)

Debug.Print "Inserting " & j & " rows to LocationTable"

For i = 1 To j

    Debug.Print "..." & i

    Set thisRow = thisTable.ListRows.Add(AlwaysInsert:=True)

    thisRow.Range.Cells(1, 1) = i

Next i

End Sub

基本上,它会添加名为 location_table_size 的单元格中提到的行数。回想起来,它应该被称为 rows_to_add,但没关系!

如果 clear_table_before_add 为 TRUE,则它会在添加新行之前删除其中的所有行。如果为 FALSE,则不会删除。

为了使整个过程更加稳健,对这些单元格进行一些数据验证,以确保您只能在第一个单元格中输入正数,在第二个单元格中输入 TRUE/FALSE。

运行之后,它看起来像这样:

在此处输入图片描述

相关内容