所以我有一小部分VBA代码,我曾经根据某些特定标准在Excel中传输数据行。如果列S包含" 1"它将行复制到下一个工作表。通常有大约40到50行可以复制大约80到100行,并且复制的行并不总是连续的,但是当它们粘贴在它们中时。该代码使用ActiveSheet.Next
动态生效。
Sub FwdCases()
Dim strsearch As String, lastline As Integer, tocopy As Integer
Application.ScreenUpdating = False
Range("S:S").EntireColumn.Hidden = False
strsearch = "1"
lastline = Range("A200").End(xlUp).Row
j = 2
For i = 2 To lastline
For Each c In Range("S" & i & ":S" & i)
If InStr(c.Text, strsearch) Then
tocopy = 1
End If
Next c
If tocopy = 1 Then
Rows(i).Copy Destination:=ActiveSheet.Next.Rows(j)
j = j + 1
End If
tocopy = 0
Next i
ActiveSheet.Range("S:S").EntireColumn.Hidden = True
Application.ScreenUpdating = True
ActiveSheet.Next.Select
End Sub
这段代码非常好用。在编辑器和从按钮调用时。但是我最近发现它也是复制和粘贴一大堆额外的条件格式(数百个冗余),所以我将复制粘贴方法更改为PasteSpecial xlPasteFormulas
,但显然我已经错误地实现了它,因为现在代码只能在从编辑。当我使用按钮运行它时,它只复制2行,然后向前跳2张(不是1 )并停止。
我改变了:
Rows(i).Copy Destination:=ActiveSheet.Next.Rows(j)
为:
ActiveSheet.Rows(i).Copy
ActiveSheet.Next.Rows(j).PasteSpecial xlPasteFormulas
为什么这个简单的改变会造成如此严重的破坏?
编辑:扩展了第一段。
答案 0 :(得分:2)
尝试明确提及您的工作表,即
Workbooks("Book1").Sheets("Sheet1").Rows(i).Copy
Workbooks("Book1").Sheets("Sheet1").Rows(j).PasteSpecial xlPasteFormulas
同意以下评论,我已从语法
中删除了.Next
答案 1 :(得分:0)
修正了它。只需要使用Select
分解代码并使用Selection.PasteSpecial
代替ActiveSheet.Next.Rows(j).PasteSpecial
。即使通过按钮调用它现在也能正常工作。
ActiveSheet.Rows(i).Copy
ActiveSheet.Next.Select
Rows(j).EntireRow.Select
Selection.PasteSpecial Paste:=xlPasteFormulas
ActiveSheet.Previous.Select