我正在试图找出如何在列中粘贴一系列单元格" 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"抛出错误。粘贴数据的范围在表格中。任何见解都将非常感激。
答案 0 :(得分:2)
使用Cells
,Range
,Rows
等属性时,始终限定要引用的工作表:
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