Excel宏问题:仅需给指定表格新增行却所有表格都添加了行
问题解决:仅给指定Excel表格添加行并填充数据
你的代码之所以会给所有表格都新增一行,是因为你在If判断之前就执行了三个表格的ListRows.Add操作——不管后续条件是否匹配,这三行新增操作已经完成了。
要实现仅给指定表格添加行的需求,需要把新增行的代码移到对应的If分支内部,只有当条件满足时,才执行对应表格的新增行和数据填充操作。
修改后的代码如下:
Sub AddQuoteNumbers() 'ListObject is a Table in a Worksheet' Dim tbl As ListObject Dim tb2 As ListObject Dim tb3 As ListObject Set tbl = Worksheets("quote1").ListObjects("Table1") Set tb2 = Worksheets("quote2").ListObjects("Table2") Set tb3 = Worksheets("quote3").ListObjects("Table3") 'ListRows allows us to Add or Delete Rows' Dim NewRow As ListRow Dim templateWs As Worksheet Set templateWs = Worksheets("Template") ' 提前引用模板工作表,简化代码 Select Case templateWs.Range("H5").Value Case "quote1" Set NewRow = tbl.ListRows.Add With NewRow .Range(1) = templateWs.Range("B9") .Range(3) = templateWs.Range("B8") .Range(4) = templateWs.Range("H4") .Range(5) = templateWs.Range("B13") End With Case "quote2" Set NewRow = tb2.ListRows.Add With NewRow .Range(1) = templateWs.Range("B9") .Range(3) = templateWs.Range("B8") .Range(4) = templateWs.Range("H4") .Range(5) = templateWs.Range("B13") End With Case "quote3" Set NewRow = tb3.ListRows.Add With NewRow .Range(1) = templateWs.Range("B9") .Range(3) = templateWs.Range("B8") .Range(4) = templateWs.Range("H4") .Range(5) = templateWs.Range("B13") End With End Select End Sub
额外优化说明
- 使用
Select Case替代嵌套If,代码结构更清晰,可读性更强 - 提前引用
Template工作表,避免重复写Worksheets("Template"),简化代码维护
内容的提问来源于stack exchange,提问作者Mocha
相关产品推荐
相关产品推荐

