我想在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
答案 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开始创建。