2015-10-20 214 views
0

我是VBA的新手,并且遇到了一些代码问题。我有名为2001,2002,2003 ... 2010的工作表。我想依次选择这些表中的每一个,并在每个工作表上执行一些简单的操作。我试图使用for循环,从2000年到2010年增加,但它陷入了困境。我认为问题是我不知道如何指定它应该使用for循环选择的表名。使用for循环递增遍历表

Sub Compile_data_from_worksheets() 

Dim i As Integer ' declare i as integer, this will count the number of Manufacturers 
Dim y As Long  ' declare y as long, this will capture the number of rows in a worksheet 
Dim x As String ' declare x as string, this will capture the name of each Manufacturer 

Application.StatusBar = "running macro" ' places message on the statusbar while macro runs 

ThisWorkbook.Activate 

Application.ScreenUpdating = False 'stop the screen updating as the macro runs 
Application.CutCopyMode = False  'clears the clipboard 


For i = 2000 To 2002    ' for each of the years in turn 

Sheets(i).Select   ' activate worksheet 2000 
Range("A17").Select 
Range(Selection, Selection.End(xlDown)).Select 
Range(Selection, Selection.End(xlToRight)).Select 
Selection.Copy 

Worksheets("Combined_data").Activate 

y = ActiveSheet.UsedRange.Rows.Count  'count how many rows of worksheet "AllData_Raw" have been used so far. 

Cells(y + 1, 1).Select   'use the Cells command to select data and then paste selection 

ActiveSheet.Paste 

Next i       ' next year... 

End Sub 
} 

回答

0

的问题是,如果一个整数放在里面Sheets(),它假设你正在寻找的指标,如第2000片不表2000

将其更改为

Sheets(cstr(i)).Select 

这就是说,你真的应该通过你的代码,并通过直接引用单元格删除.select。一个好的资源是here。它将大大加快速度并帮助确保更少的错误。

所以,你的for循环是这样

For i = 2000 To 2002    ' for each of the years in turn 
    With Sheets(CStr(i)) 
     .Range(.Range("A17"), .Range("A17").End(xlDown).End(xlToLeft)).Copy 
    End With 
    With Worksheets("Combined_data") 
     y = .UsedRange.Rows.Count  'count how many rows of worksheet "AllData_Raw" have been used so far. 
     .Cells(y + 1, 1).Paste 
    End With 
Next i