为什么这会跳过一排细胞?

时间:2013-05-02 20:00:19

标签: excel excel-vba excel-2010 vba

我有一个按部门过滤电子表格的宏,然后复制&将结果粘贴到相应的部门工作表中。然后对9个部门中的每个部门重复。它工作正常,除了它不复制和粘贴“Punch Press”部分的数据的最后一行。它显示突出显示的单元格,但数据不会随之传输。

非常感谢任何帮助!

这就是我所拥有的:

Sub UpdateTables()
  'PunchPress Macro



    Sheets("Audit scores").Select
    ActiveSheet.Range("$A$1:$AL$118").AutoFilter Field:=2, Criteria1:= _
        "Punch Press ESP"


    Range("X1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlToRight)).Select


    Selection.Copy
    Sheets("Punch Press").Select
    Range("X1").Select
    ActiveSheet.Paste
    Columns("A:A").ColumnWidth = 17.57
    Columns("A:A").ColumnWidth = 20.57
    Rows("2:2").RowHeight = 15
    Selection.RowHeight = 15

    Range("A1").Select

End Sub    

1 个答案:

答案 0 :(得分:0)

基本上你是以错误的方式使用Range(..)的地方。我相信你假设这会强制将范围放在活动表上,但这是一种情况。当我运行这个时,我得到一个错误。

我已更新您的代码以便运行,但没有任何性能增强。以下对我有用。

Sub UpdateTables()
'PunchPress Macro

    With Sheets("Audit scores")
        .AutoFilterMode = False '<~~Remove filters
        .Range("$A$1:$AL$118").AutoFilter Field:=2, Criteria1:="Punch Press ESP"
        .Range("X1").Select
        .Range(Selection, Selection.End(xlDown)).Select
        .Range(Selection, Selection.End(xlToRight)).Select
    End With

    Selection.Copy

    With Sheets("Punch Press")
        .Select
        .Range("X1").Select
        .Paste
        .Columns("A:A").ColumnWidth = 17.57
        .Columns("A:A").ColumnWidth = 20.57
        .Rows("2:2").RowHeight = 15
        Selection.RowHeight = 15
        .Range("A1").Select
    End With

End Sub

为复制值添加一点优化。复制方法是最好的,因为您过滤了工作表,但这可以在一行中完成。我还检索了最后一行和列以供使用而不是依赖于向下和向右选择,因为这将停止在空单元格上。

Sub UpdateTables()
'PunchPress Macro

    Dim rs As Long, cs As Long

    With Sheets("Audit scores")
        rs = .Cells.Find("*", , , , xlByColumns, xlPrevious).Row
        cs = .Cells.Find("*", , , , xlByRows, xlPrevious).Column 
        .AutoFilterMode = False '<~~Remove filters
        .Range("$A$1:$AL$118").AutoFilter Field:=2, Criteria1:="Punch Press ESP"
        .Range(.Cells(1, "X"), .Cells(rs, cs)).Copy Sheets("Punch Press").Range("X1")
    End With

    With Sheets("Punch Press")
        .Columns("A:A").ColumnWidth = 20.57
        .Rows("1:2").RowHeight = 15
        .Activate
        .Range("A1").Select
    End With

End Sub

我希望这会有所帮助。