标签:VBA
问题:工作簿中有一个汇总(Summary)工作表,它需要计算开始(Begin)工作表和结束(End)工作表之间的所有工作表中的数据,如下图1所示。
图1
然而,在开始(Begin)工作表和结束(End)工作表之间的工作表是根据列表中的选择来确定的。如下图2所示,列表中只选择了QLD、TAS、WA、NSW、VIC五个工作表,因此只计算这五个工作表的汇总。
图2
但是,列表中的选择变化后,想要根据列表中选择内容将相应的工作表灵活地移入或移出Begin工作表和End工作表之间,如下图3所示。
图3
可以使用VBA来实现。
也就是说,首先在列表中选择要进行汇总的工作表,然后单击“Move”按钮,这些选择的工作表就会自动调整到开始(Begin)工作表和结束(End)工作表之间,并自动更新Summary工作表。
VBA代码如下:
代码语言:javascript复制Sub Move()
Dim i As Integer
Sheet5.Move after:=Sheet2
For i = 1 To Sheet1.Range("B" & Rows.Count).End(xlUp).Row - 10
Sheets(CStr(Sheet1.Range("B" & i 10))).Move after:=Sheet2
Next i
Sheet1.Select
End Sub
由于列表从第11行开始,需要从循环的动态上限范围中减去10,这将使代码能够拾取循环中的每一工作表。
注:本文学习整理自thesmallman.com,有兴趣的朋友可以到原网站下载示例工作簿,也可以到知识星球App完美Excel社群下载示例工作簿。