Excel - 根据下拉值创建新行

时间:2018-01-07 07:28:50

标签: excel vba excel-vba excel-formula

我想在Excel中为投资计算器创建一个表,根据下拉值添加行。

即。如果用户只希望看到5年的投资计划,他们从下拉菜单中选择5年,并且仅生成5行。我该如何实现这一目标? (如果这是可能的话)

回应K.Davis的评论:
我试图调整你的代码并在需要的地方更改单元格,但代码仍然没有执行?您或其他人可以告诉我我在哪里犯了错误。

Sub CreateTable()

Dim ws As Worksheet, tableTopRow As Long, numberRowsFromDropdown As Long
Set ws = ThisWorkbook.Worksheets(1)

'Get the location of your dropdown
Dim rngDropDown As Range
Set rngDropDown = ws.Range("X6")

tableTopRow = 1     'Top row of your table.

'The below range contains the location of drop down @ "X6"


'Set the range of your table
Dim rngTable As Range
Set rngTable = ws.Range("$C10$" & tableTopRow & ":$C20" & numberRowsFromDropdown)

'Create the table
ws.ListObjects.Add(xlSrcRange, rngTable, , xlNo).Name = "Table1"

End Sub

1 个答案:

答案 0 :(得分:0)

您可以使用Sheet.ListObjects.Add方法添加表格。

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Tgt As Range
    Set Tgt = Range("X6")

    If Intersect(Target, Tgt) Is Nothing Then Exit Sub

    Dim tableTopRow As Long, numberRowsFromDropdown As Long
    tableTopRow = 10     'Top row of your table.
    numberRowsFromDropdown = Tgt.Value + tableTopRow - 1

    'Set the range of your table
    Dim rngTable As Range
    Set rngTable = Range("$C$" & tableTopRow & ":$C$" & numberRowsFromDropdown)

    'Delete previous Table, if it's there
    On Error Resume Next
    ListObjects("Table1").Delete
    On Error GoTo 0

    'Create the table
    If Tgt.Value > 0 Then
        ListObjects.Add(xlSrcRange, rngTable, , xlNo).Name = "Table1"
    End If

End Sub
  

重要:这会使用worksheet_Change事件。这意味着此代码必须放在工作表的对象模块中,不在标准模块中。确保执行此操作的最简单方法是退出VBE并右键单击工作表选项卡,然后单击“查看代码”。 同样,您可能无法更改此子例程的名称,否则事件将不会触发。

基本上每次更改工作表上的值时,都会触发此事件。但是,它会检查tgt是否与Target相交,如果没有,则会退出该子。

因此,您的tgt设置为X1(根据您的代码,我相信这是您的下拉菜单)。表格将从C10开始创建。