当我更新我的数据时,它会反转我的Sub的结果

时间:2015-02-03 15:31:24

标签: excel excel-vba vba

我有一个报告,我直接从我们的数据库(查询)中提取,但它包含的信息多于必要的信息(没有值的项目),所以我添加了一个子程序来删除额外的行。子例程似乎可以正常纠正空行。然后我有另一个子程序复制返回的值并将它们放在另一个已经布置了标题的工作表上,然后另一个在底部添加签名块。完成此操作后,用户会复制此工作表并将其重命名为适用的月份和年份。这将是一个完成且简单的过程,但......

问题是,当刷新工作簿数据以创建新报表时,格式化和完成报表的所有先前副本突然包含已删除的行。我不明白删除的行如何返回到不同工作表上的报告,但这里是我用来完成此操作的VBA。 (我已将此设置为在更新数据时自动运行,但我得到相同的结果)

希望有人可以提供帮助,感谢您提前提供任何帮助。

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim wb1 As Workbook
    Dim lr As Long, i As Long
    Set wb1 = ActiveWorkbook
    With wb1.Sheets("DATA SHEET")
        lr = Application.Max(.Cells(Rows.Count, 4).End(xlUp).Row, _
          .Cells(Rows.Count, 6).End(xlUp).Row)
        For i = lr To 1 Step -1
            If .Cells(i, 4).Value = 0 And _
              .Cells(i, 5).Value = 0 And _
              .Cells(i, 7).Value = 0 And _
              .Cells(i, 8).Value = 0 And _
              .Cells(i, 9).Value = 0 And _
              .Cells(i, 10).Value = 0 Then
                .Rows(i).EntireRow.Delete
            End If
        Next i
    End With
End Sub

这是复制数据的VBA,它只是一个录制的宏。我需要保留格式,但没有看到如何只传输值和格式。

Sub CopyToTemplate()
'
' CopyToTemplate Macro
'

'
    Rows("3:100").Select
    Selection.Copy
    Sheets("SAVE TEMPLATE").Select
    Range("A7").Select
    ActiveSheet.Paste

End Sub

1 个答案:

答案 0 :(得分:0)

最有可能的是,您正在复制自动链接到数据查询的单元格。因为您正在复制整个单元格,所以链接随之而来。

要仅复制值和格式,请替换

Range("A7").Select
Activesheet.Paste

Range("A7").PasteSpecial Paste:=xlPasteValues
Range("A7").PasteSpecial Paste:=xlPasteFormats

Here是有关PasteSpecial的文档。