为什么用 cell.address 定义范围有效,但不能仅用 Excel VBA 定义单元格?

Why does define range with cell.address work but not cell only Excel VBA?

我正在尝试研究如何将公式应用于根据 here 中解释的 Range.End 方法定义的一系列单元格。

我根据 How to avoid using Select in Excel VBA macros.

避免了 Select 等

我之前使用了下面关于 Range(Cells, Cells) 的代码,我得到了复制 B 列中与列中数据的特定搜索条目相关的未知行数数据集的所需输出A.

Set CopyFrom1 = Cells(FirstRow, "B")    
Set CopyFrom2 = Cells(LastRow, "B")

sourceBook.Sheets("Sheet1").Range(CopyFrom1, CopyFrom2).Copy _
    destBook.Sheets("Sheet1").Range("C6")

现在数据集已复制到 destBook,我想对其应用公式。但是,我不知道它是多少行,所以我再次使用 Range(Cells, Cells) 方法。

LRow = destBook.Sheets("Sheet1").Cells(Rows.Count, "C").End(xlUp).Row
Set LRowA = Cells(LRow, "D")
Set FRowA = Cells(6, "D")
destBook.Sheets("Sheet1").Range(LRowA, FRowA).Formula = "=C6*2.236936"

这导致:运行-时间错误“1004”:应用程序定义或对象定义的错误。

我尝试了这种限定单元格的方法 Why does Range work, but not Cells?,因为 VBA 代码是 运行ning 来自 sourceBook 并且我在 destBook(不同的工作簿)中工作。但是,我收到 运行 时错误“438”:对象不支持此 属性 或方法 。与我要实现的目标相比,我不太明白这里有什么不同。

就在发布之前,我找到了 ,这给了我需要的结果。代码如下:

destBook.Sheets("Sheet1").Range(LRowA.Address, FRowA.Address).Formula = "=C6*2.236936"

有人可以向我解释为什么这行得通而其他行不通吗?

本例中正确的代码是

Set LRowA = destBook.Sheets("Sheet1").Cells(LRow, "D")
Set FRowA = destBook.Sheets("Sheet1").Cells(6, "D")

可以在此处找到解释:Why does Range work, but not Cells? 以及上面 Mat's Mug 评论中的进一步说明。

保存范围可以更容易:

Set rngFrom = sourceBook.Sheets("Sheet1").Range("B" & FirstRow, "B" & LastRow)
Set rngTo = destBook.Sheets("Sheet1").Range("C6").Resize(rngFrom.Rows.Count)

rngTo.Value = rngFrom.Value
rngTo.Offset(, 1).Formula = "=C6*2.236936"