我有一个宏,可以按部门过滤电子表格,然后将结果复制并粘贴到相应的部门工作表中。然后对 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
最佳答案
基本上你在哪里使用 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
我希望这有帮助。
关于excel - 为什么这会跳过一行单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16346682/