Excel VBA问题-复制索引范围的语法

Excel VBA问题-复制索引范围的语法,excel,vba,Excel,Vba,嗨–我正在尝试将特定条件下的多张表中的数据编译成一张表。 我希望这一步通过工作表从5号到x号,并执行以下操作 -查找源工作表范围E13:E37中的值为空的行,并将(行源,2)到(行源,5)中的值复制并粘贴到(行目标,2)到(行目标,5)中的目标工作表 -将源工作表单元格“C2”中的值复制并传递到每行目标 我的代码有两个问题: 1.我在复制粘贴范围时出错。我已经尝试了很多不同的语法,但都不正确。 2.它实际上并不是一步一步地穿过所有的床单 有人能帮我吗?多谢各位 Sub Get_Activitie

嗨–我正在尝试将特定条件下的多张表中的数据编译成一张表。 我希望这一步通过工作表从5号到x号,并执行以下操作 -查找源工作表范围E13:E37中的值为空的行,并将(行源,2)到(行源,5)中的值复制并粘贴到(行目标,2)到(行目标,5)中的目标工作表 -将源工作表单元格“C2”中的值复制并传递到每行目标 我的代码有两个问题: 1.我在复制粘贴范围时出错。我已经尝试了很多不同的语法,但都不正确。 2.它实际上并不是一步一步地穿过所有的床单 有人能帮我吗?多谢各位

Sub Get_Activities()
    Dim c As Range 'count for blank
    Dim j As Integer 'target sheet row
    Dim w As Integer ' sheet number
    Dim Source As Worksheet
    Dim Target As Worksheet
    Dim SheetCount As Integer

    Set Target = ActiveWorkbook.Worksheets("Report") 'where the data is going

    j = 4     ' Start copying to row 4 in target sheet

    w = 5     'start at 5th Worksheet in file which should be the first Plant

    If w <= ActiveWorkbook.Sheets.Count Then

    Set Source = ActiveWorkbook.Worksheets(w) 'where the data is coming from

    For Each c In Source.Range("E13:E37")   ' Look at all the tasks
        If c = "" Then
         Source.Cells(2, 3).Copy Target.Cells(j, 1)
         Source.Range(Cells(c.Row, 2), Cells(c.Row, 5)).Copy
         Target.Range(Cells(j, 2)).PasteSpecial Paste:=xlPasteValues ' Getting an invalid operator error for j.Row

        j = j + 1
        End If

    Next c

  w = w + 1

 End If

End Sub
Sub Get_活动()
尺寸c作为空白范围的“计数”
尺寸j为整数的“目标图纸行”
尺寸w为整数“页码
将源设置为工作表
将目标变暗为工作表
Dim SHEETCUNT为整数
将Target=ActiveWorkbook.Worksheets(“报告”)设置为数据的去向
j=4'开始复制到目标工作表中的第4行
w=5'从文件中的第5个工作表开始,该工作表应为第一个工厂

如果问题1是由于不正确或至少是容易出现问题的语法造成的: 您应该在两个“单元格”前面添加“源”标识符

Source.Range(Cells(c.Row, 2), Cells(c.Row, 5)).Copy
您还应该去掉粘贴代码的“范围”,因为它是不必要的,并且可能会导致问题。这两个更改都已在下面的代码块中完成

 Target.Range(Cells(j, 2)).PasteSpecial Paste:=xlPasteValues
关于使用范围和单元格时是否需要额外标识符,可以在此处找到比我所能提供的更好的描述-

第二个问题是,你永远不会在工作表中循环,代码在if之后结束,我选择了“Do While”循环。在这种情况下,你可以选择任何你喜欢的循环形式,只要你循环

Do While w <= ActiveWorkbook.Sheets.Count

Set Source = ActiveWorkbook.Worksheets(w) 'where the data is coming from

For Each c In Source.Range("E13:E37")   ' Look at all the tasks
    If c = "" Then
     Source.Cells(2, 3).Copy Target.Cells(j, 1)
     Source.Range(Source.Cells(c.Row, 2), Source.Cells(c.Row, 5)).Copy
     Target.Cells(j, 2).PasteSpecial Paste:=xlPasteValues ' Getting an invalid operator error for j.Row

    j = j + 1
    End If

Next c

w = w + 1

Loop

Do While w问题1是由于语法不正确或至少容易出现问题:
您应该在两个“单元格”前面添加“源”标识符

Source.Range(Cells(c.Row, 2), Cells(c.Row, 5)).Copy
您还应该去掉粘贴代码的“范围”,因为它是不必要的,并且可能会导致问题。这两个更改都已在下面的代码块中完成

 Target.Range(Cells(j, 2)).PasteSpecial Paste:=xlPasteValues
关于使用范围和单元格时是否需要额外标识符,可以在此处找到比我所能提供的更好的描述-

第二个问题是,你永远不会在工作表中循环,代码在if之后结束,我选择了“Do While”循环。在这种情况下,你可以选择任何你喜欢的循环形式,只要你循环

Do While w <= ActiveWorkbook.Sheets.Count

Set Source = ActiveWorkbook.Worksheets(w) 'where the data is coming from

For Each c In Source.Range("E13:E37")   ' Look at all the tasks
    If c = "" Then
     Source.Cells(2, 3).Copy Target.Cells(j, 1)
     Source.Range(Source.Cells(c.Row, 2), Source.Cells(c.Row, 5)).Copy
     Target.Cells(j, 2).PasteSpecial Paste:=xlPasteValues ' Getting an invalid operator error for j.Row

    j = j + 1
    End If

Next c

w = w + 1

Loop
Do While w