excel - 为什么这会跳过一行单元格?

标签 excel excel-2010 vba

我有一个宏,可以按部门过滤电子表格,然后将结果复制并粘贴到相应的部门工作表中。然后对 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/

相关文章:

excel - 从 Excel 中删除不需要的字符(Visual Basic)

vba - IE.navigate2 因保护模式关闭而失败

excel - 在 Visual Basic 中从用户窗体中获取单个变量

vba - 从 Excel 发送多封电子邮件

vba - 在 VBA (excel) 中循环行的最有效/最快的方法是什么?

python - 在 VBA 中,如何使用 Shell.Run 而不是 Shell.Exec 来捕获 shell 输出?

excel - VBA比较行,如果相同则计数

c# - 如何使用 DLL 在 C# 代码中读取 Excel 2010 文件?

java - 读取excel文件2010 apache poi忽略空单元格

java - Apache POI : Sort rows by date