如何遍历工作表并复制某些特定范围

时间:2017-11-29 18:17:18

标签: vba

所以我希望我的代码循环显示工作表,依赖于工作表名称我想复制不同的范围(如果工作表不会列出我只想跳过它)(让我说我知道列的编号/地址)我想要复制(行数可能不同,取决于我得到的原始文件),我想将所有这些范围一个在另一个下面复制到名为check_data的工作表中,右边有一个列,从哪个工作表这个部分来自。我有时会被困在这部分代码中,但似乎它并没有遍历表单。

到目前为止,我得到了这个(但我对vba来说是全新的)

Sub Copy_data()

Dim wb As Workbook
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim ws3 As Worksheet


Set wb = ActiveWorkbook

Set ws1 = wb.Sheets("A")
Set ws2 = wb.Sheets("B")
Set ws3 = wb.Sheets("Check_data")


For Each ws In Worksheets

If ws.Name = "A" Then
ws1.Activate
ws1.Range("A1:Q1").Select
ws1.Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
ws3.Select
    If ws3.Range("A1") = "" Then
       ws3.Range("A1").Select
       ActiveSheet.Paste
    Else
        Selection.End(xlDown).Offset(1, 0).Select
        ActiveSheet.Paste
    End If

ElseIf ws.Name = "B" Then
ws2.Activate
ws2.Range("A1:Q1").Select
ws2.Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
ws3.Select
    If ws3.Range("A1") = "" Then
        ws3.Range("A1").Select
        ActiveSheet.Paste
    Else
        Selection.End(xlDown).Offset(1, 0).Select
        ActiveSheet.Paste
    End If
Else
End If
Next ws

End Sub

感谢您的任何建议

1 个答案:

答案 0 :(得分:0)

这里有几件事。始终使用对象完全指定工作簿和工作表,并使用这些对象预先计算Sheets等方法,如下所示:

Dim wb As Workbook
Dim ws1 As Worksheet
Dim ws2 As Worksheet

Set wb = ThisWorkbook

ws1 = wb.Sheets("A")
ws2 = wb.Sheets("Check_data")

ws1.Range("A1:Q1").Select
ws1.Range(Selection, Selection.End(xlDown)).Select
Selection.Copy

...当您准备粘贴时也是如此,除了您需要显式激活您要粘贴的工作表:

ws2.Activate

If ws2.Range("A1") = "" Then
    ws2.Range("A1").Select
    Selection.Paste
Else
    Selection.End(xlDown).Offset(1, 0).Select
    Selection.Paste
End If

显然,这不是您的整个代码段被重写的,但它是您想要进入的方向。