【发布时间】:2020-04-08 05:00:51
【问题描述】:
我正在尝试将其转移到同一工作簿上的另一张工作表。它必须如下图所示。这些值必须出现在第一个 ID 列之后。
我在阅读和观看视频后尝试了以下代码。我进一步尝试识别 Sheet2 中的 lastrow 并将 Sheet1 中的值粘贴到下一个可用行。
Sub Transpose()
Dim SourceSheet As Worksheet
Dim TransferSheet As Worksheet
Dim inRange, outRange As Range
Dim finalrow As Integer
Dim i As Integer
'Assign
Set SourceSheet = Sheets("Sheet1")
Set TransferSheet = Sheets("Sheet2")
SourceSheet.Activate
Set inRange = ActiveSheet.Range("B2:B11")
inRange.Copy
'TRANSFER
TransferSheet.Activate
finalrow = TransferSheet.Cells(Rows.Count, 1).End(xlUp).Row 'find last row
For i = 2 To 11
outRange = TransferSheet.Range(Cells(ii, finalrow), Cells(ii, finalrow))
outRange.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
Next i
End Sub
【问题讨论】:
-
使用 Long 而不是 Integer,inRange 需要显式声明为 range 而不是隐式声明为 Variant。使用 Dim inRange, outRange As Range 只有 outRange 是一个范围。您需要将 inRange 作为 Range,将 outRange 作为 Range。创建对 Range 对象的引用时需要设置,例如设置 outRange = TransferSheet.Range(Cells(ii, finalrow), Cells(ii, finalrow)) 并且 ii 从未声明,但您使用的是一个名为 i 的循环变量 - 错字?除此之外,我不确定 pastespecial 也可以在那里工作。我会(取决于范围的大小)使用转置函数读入数组并用调整大小写出
-
完全限定具有父工作表名称的单元格引用。使用工作表集合而不是工作表。您不需要 Activesheet 和 Activate。使用适当的工作表变量限定您的范围。
-
我感谢那些对问题进行更改的人。我会确保我接下来的问题都以同样的方式形成。
-
如果你不介意的话,我希望你能给我展示你的第一条评论的例子,这样我也可以根据你的样本来研究它。我对您的意思有一个很好的了解,但只是为了确保我不会犯错误并且我可以学习正确的编码,我更喜欢从示例代码中学习。非常感谢