使用For循环在多个工作表上运行macros命令,如1,2,3,4

我创build了一个macros,可以将来自不同工作簿 – >“数据”的工作表中的数据复制到当前工作簿 – >“testing”

Sub copy_data() Windows("data.xlsx").Activate Range("A1").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy Windows("test.xlsm").Activate Range("A1").Select ActiveSheet.Paste End Sub 

我想让这个macros运行在“数据”工作簿中的多个工作表。

我相信一个循环应该是有效的,因为表名是1,2,3,4,5。 所以我正在考虑做一个for循环,但我真的坚持。

到目前为止我所做的是如下所示:

 Sub Loopsheets() Dim wks As Worksheet Dim i As Integer Dim iStart As Integer Dim iEnd As Integer iStart = 1 iEnd = 5 If iStart > 0 And iEnd > 0 And iEnd > iStart Then For i = iStart To iEnd Set wks = ThisWorkbook.Worksheets(i) Application.run "copy_data" Next i End If End Sub 

这是未经testing,但应该工作:

 Sub copy_data(ws As Worksheet) Dim dwb As Workbook Dim dws As Worksheet Set dwb = Workbooks("data.xlsx") Set dws = dwb.Worksheets(1) With dws .Range(.Cells(1, 1), .Cells(1, 1).End(xlDown).End(xlToRight)).copy ws.Range("A1") End With End Sub Sub Loopsheets() Dim wks As Worksheet Dim i As Integer Dim iStart As Integer Dim iEnd As Integer iStart = 1 iEnd = 5 If iStart > 0 And iEnd > 0 And iEnd > iStart Then For i = iStart To iEnd Set wks = ThisWorkbook.Worksheets(CStr(i)) copy_data wks Next i End If End Sub 

工作表的名称是一个string,通过使用一个整数,它将调用第一个工作表,而不是名为“1”的工作表。 所以把它改成cstr(i)它会把1改成“1”。

我简单地结合你的两个例程,并限定你的工作簿/工作表。 thisworkbook被认为是test

 Sub Loopsheets() Dim wks As Worksheet Dim ws As Workbook Dim i As Integer Dim iStart As Integer Dim iEnd As Integer iStart = 1 iEnd = 5 Set wb = Workbooks("data") For i = iStart To iEnd Set wks = wb.Worksheets(cstr(i)) 'edited per Scott With wks .Range("A1").Select .Range(Selection, Selection.End(xlDown)).Select .Range(Selection, Selection.End(xlToRight)).Select Selection.Copy End With ThisWorkbook.Range("A1").Select Selection.Paste Next i End Sub