PasteValues到测试列旁边的下一个空白单元格

时间:2016-12-31 20:55:09

标签: excel-vba vba excel

我正在试图找出如何在列中粘贴一系列单元格" L"基于第一栏中第一个空白单元格的位置" F。"这就是我迄今为止所拥有的"

With Sheets("Sheet1")

      .Range("H4:I" & .Cells(Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy     'January
        Workbooks("2017 Plan.xlsx").Sheets("Consolidated").Range("L" & Cells(Rows.Count, "F").End(xlUp).Row).Offset(1, 0).PasteSpecial Paste:=xlPasteValues     'paste to 1+ rows paste last row used

End With

第一部分工作正常,但当我试图找到第一栏中的第一个空白时," F"列中的分配值" L"抛出错误。粘贴数据的范围在表格中。任何见解都将非常感激。

2 个答案:

答案 0 :(得分:2)

使用CellsRangeRows等属性时,始终限定要引用的工作表:

With Sheets("Sheet1")
   'This line is missing a qualification of `Rows`
   '.Range("H4:I" & .Cells(Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy     'January
    .Range("H4:I" & .Cells(.Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy     'January

   'This line is missing qualification of Cells and Rows
   'Workbooks("2017 Plan.xlsx").Sheets("Consolidated").Range("L" & Cells(Rows.Count, "F").End(xlUp).Row).Offset(1, 0).PasteSpecial Paste:=xlPasteValues     'paste to 1+ rows paste last row used
    Workbooks("2017 Plan.xlsx").Sheets("Consolidated").Range("L" & Workbooks("2017 Plan.xlsx").Sheets("Consolidated").Cells(Workbooks("2017 Plan.xlsx").Sheets("Consolidated").Rows.Count, "F").End(xlUp).Row).Offset(1, 0).PasteSpecial Paste:=xlPasteValues     'paste to 1+ rows paste last row used

End With

现在最后一个语句变得有点笨拙,所以我们可以使用With块来简化编码:

With Sheets("Sheet1")
    .Range("H4:I" & .Cells(.Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy     'January
End With

With Workbooks("2017 Plan.xlsx").Sheets("Consolidated")
    .Range("L" & .Cells(.Rows.Count, "F").End(xlUp).Row).Offset(1, 0).PasteSpecial Paste:=xlPasteValues     'paste to 1+ rows paste last row used
End With
编辑:在与XLMatters聊天后,我们发现在列中找到最后一个使用过的单元格的常规方法不起作用,因为目标位于表格内。最终被使用的代码是:

With Workbooks("2017 Plan.xlsx").Sheets("Consolidated")
    .Range("L" & .Cells(2, "F").End(xlDown).Row + 1).PasteSpecial Paste:=xlPasteValues
End With

查找最后一个单元格并粘贴结果的更健壮的方法是:

dim lastRow As Long
With Workbooks("2017 Plan.xlsx").Sheets("Consolidated")
    lastRow = .Columns("F").Find(What:="*", _
                                 After:=.Cells(1, "F"), _
                                 Lookat:=xlPart, _
                                 LookIn:=xlFormulas, _
                                 SearchOrder:=xlByRows, _
                                 SearchDirection:=xlPrevious, _
                                 MatchCase:=False).Row
    .Range("L" & lastRow + 1).PasteSpecial Paste:=xlPasteValues
End With

答案 1 :(得分:0)

Worksheet对象及Set定义为Workbooks("2017 Plan.xlsx").Sheets("Consolidated")更容易,而不是记住在整个代码中正确地重新输入整个内容。

其次,由于您使用PasteSpecial仅复制值,因此您不需要括号,您可以为xlPasteValues添加空格。

评论:您正在搜索查看A列的最后一行,同时从列H中复制数据:I,如果A列中的数据未对齐,结果可能与您不同寻找。

<强>代码

Option Explicit

Sub PasteSpecialValues()

Dim ConsolSht   As Worksheet

Set ConsolSht = Workbooks("2017 Plan.xlsx").Sheets("Consolidated")

With Sheets("Sheet1")
    .Range("H4:I" & .Cells(.Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy  ' January
    ConsolSht.Range("L" & ConsolSht.Cells(ConsolSht.Rows.Count, "F").End(xlUp).Row + 1).PasteSpecial xlPasteValues
End With

End Sub