.End(xlToRight)在一个范围内

时间:2012-01-13 12:54:18

标签: excel-vba vba excel

我刚刚想知道我是否可以某种方式改变以下代码段以包含.End(xlToRight)而不是定义L6(结果是相同的)。

Sub Test()
Dim LastCol As String

With Worksheets("Sheet1")
    LastCol = .Cells(5, .Columns.Count).End(xlToLeft).Address
    .Range(Range("A5"), LastCol).Copy    

    .Range("B5:L5", Range("B5:L5").Offset(LastRow - FirstRow, 0)).PasteSpecial xlPasteFormulas

    .Range("B6", .Cells.SpecialCells(xlCellTypeLastCell)).Copy
    .Range("B6").PasteSpecial xlPasteValues
End With
End Sub

非常感谢任何帮助:)

编辑:更新了pdw TonyDallimore (请参阅下面的回复)

Tony,上面的代码是我一直努力工作的总和。在with语句中,我希望复制第5行的内容,并将它们粘贴到第n行 - 这是由columnA中已存在的列表定义的。根据您的建议,最后一行将粘贴除顶行(r5)之外的所有值,以保持用户的透明度,同时最小化文件大小。 中间位是剩余的“正在进行的工作”,因为L5不一定是最重要的列。

1 个答案:

答案 0 :(得分:5)

这两个问题

.End(xxx)与键盘上的Ctrl+Arrow相同,并停在与当前单元格不同的第一个单元格。因此,如果您从具有值的单元格开始,它将在没有值的单元格处停止,反之亦然。

从左上角开始并使用xlDownxlToRight时遇到的问题是,它会停在桌子中间的空白单元格中。如果绝对不能在中间有一个空白单元格,那就很好,但是从右下方XlUpxlToLeft更安全。

问题1

你的问题是.End(xxx).Column会返回12并且你不知道怎么把它变成字母“L”吗?

是这样,有很多选择。我认为最容易记住的是

.Cells(6,Columns.Count).End(xlToLeft).Address

将返回“$ L $ 6”。

问题2

.Cells(1000, ColRange)代表右下角的细胞吗?

.Cells.SpecialCells(xlCellTypeLastCell)可能是一个更容易的选择。