代码在编辑器中工作,但不在Button中工作

时间:2017-08-21 20:20:09

标签: vba excel-vba button paste excel

所以我有一小部分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

为什么这个简单的改变会造成如此严重的破坏?

编辑:扩展了第一段。

2 个答案:

答案 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