1

我想复制工作表 3 的单元格范围(C1:Z1000)并将它们粘贴到工作表 1 的第一个空列(在第 1 行)。下面的代码块在最后一行: source.Range("C1:Z1000").Copy destination.Cells(1, emptyColumn)

Sub CopyRange()

Dim source As Worksheet
Dim destination As Worksheet
Dim emptyColumn As Long

Set source = Sheets("Sheet3")
Set destination = Sheets("Sheet1")

'find empty Column (actually cell in Row 1)'
emptyColumn = destination.Cells(1, destination.Columns.Count).End(xlUp).Column
If emptyColumn > 1 Then
emptyColumn = emptyColumn + 1
End If

source.Range("C1:Z1000").Copy destination.Cells(1, emptyColumn)

End Sub
4

4 回答 4

2

emptyColumn正如其他人所建议的那样,我认为您的问题是您获得价值的方式。这对我有用:

Sub CopyRange()

Dim source As Worksheet
Dim destination As Worksheet
Dim emptyColumn As Long

Set source = Sheets("Sheet3")
Set destination = Sheets("Sheet1")

'find empty Column (actually cell in Row 1)'
emptyColumn = destination.Cells(1, destination.Columns.Count).End(xlToLeft).Column
If emptyColumn > 1 Then
emptyColumn = emptyColumn + 1
End If

source.Range("C1:Z1000").Copy destination.Cells(1, emptyColumn)

End Sub

您当前拥有它的方式将拉出工作表中的最后一列,粘贴到它时似乎会引发错误。上述方法将拉出第一个空列。也就是说,如果 C 列为空,则值为emptyColumn3

于 2013-03-18T13:27:52.487 回答
1

您是否尝试过单步执行您的代码?

如果这样做,您会注意到以下行将始终将emptyColumns变量设置为最右边的列,而不管使用了哪些列:

emptyColumn = destination.Cells(1, destination.Columns.Count).End(xlUp).Column

通过向其添加 1 并粘贴,您尝试粘贴到不存在的列。那每次都会给你一个错误。

相反,请尝试以下操作来查找最后使用的列。它从第一行的最右边的列开始向左搜索(如键入CTRL+ LEFT),以找到最后使用的列:

emptyColumn = destination.Cells(1, destination.Columns.Count).End(xlToLeft).Column

然后你可以添加 1 并粘贴。

于 2013-03-18T09:30:07.520 回答
0

我找到了这篇文章,并根据我的需要对其进行了修改。将粘贴转置

Sub Transpose_PasteModified()

Dim source As Worksheet
Dim destination As Worksheet
Dim emptyColumn As Long

Set source = Sheets("Sheet1")
Set destination = Sheets("Sheet2")
'Data Source
source.Range("A3:C3").Copy
'Gets Empty Column
emptyColumn = destination.Cells(3, destination.Columns.Count).End(xlToLeft).Column

'In order to avoid issues of first row returning 1
'in this case #3 is the row so we're checking A3
'If row changes then change A3 to correct row

If IsEmpty(destination.Range("A3")) Then
destination.Cells(3, 1).PasteSpecial Transpose:=True
Else
emptyColumn = emptyColumn + 1
destination.Cells(3, emptyColumn).PasteSpecial Transpose:=True
End If

End Sub
于 2014-06-26T06:04:16.963 回答
0

尝试这个:

emptyColumn = destination.Cells(1, destination.Columns.Count).End(xltoright).Column

source.Range("C1:Z1000").Copy Destination:= Cells(1, emptyColumn)

命名参数后跟一个冒号等于:=

您的 End 代码应为: End(xlToRight)

另一种选择是:

source.Range("C1:Z1000").Copy 
with destination
    .cells(1,emptycolumn).select
    .paste
end with

我希望这会有所帮助

菲利普

于 2013-03-18T09:14:24.007 回答