2

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

任何帮助是极大的赞赏!

这是我所拥有的:

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    
4

1 回答 1

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

我希望这有帮助。

于 2013-05-03T03:31:10.563 回答