您好-我正在尝试将针对特定条件的多张工作表中的数据编译为一张工作表。我希望它逐步从5到x遍历工作表并执行以下操作-查找源工作表范围E13:E37中的值为空白的行,并将值从(RowSource,2)复制并粘贴到(RowSource ,5)到(RowTarget,2)到(RowTarget,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
问题1是由于语法不正确或至少存在问题引起的:您应在两个“单元”的前面添加“源”标识符
Source.Range(Cells(c.Row, 2), Cells(c.Row, 5)).Copy
您还应该摆脱粘贴代码的“范围”,因为它是不必要的,并且也可能引起问题。这两个更改均在下面的代码块中完成。
Target.Range(Cells(j, 2)).PasteSpecial Paste:=xlPasteValues
在此处可以找到比我提供的有关使用范围和单元格时对其他标识符的需求更好的描述-仅当我激活工作表时,VBA复制和粘贴才有效
问题2是,您永远不会循环浏览工作表,代码会在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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句