当然,我的问题的本质以前已经提出过。我的问题的新内容可能是它指的是我希望是一个错误在此 Microsoft.Learn 页面上,以及可能是我的愚蠢/深刻的问题。 (问题并不深奥,答案可能很深奥。)
实际上,我在下面的代码上花了很多时间,以至于我确定上面链接的示例是不正确的。只是“非常轻微”的哎呀。 (点?没有点?)
但我不太确定为什么它是错误的和/或如何解释
.Range(Cells
和 .Range(.Cells
在其上下文中的“点与无点”外观。
具体来说,
.Cells
中的点实际上是做什么或指代什么的?如果答案很简单,“它们会导致偏移”,好吧,但是除了执行代码并看到效果之外,这是如何发生的?
Cells
之前没有点有什么作用?再说一次,“结果是相对引用”不是我所追求的。但也许这两个答案就是这样,所以继续吧。
也许我还没有掌握
.Range(Cells
与.Range(.Cells
的细微差别。或者也许只是 Cells
vs .Cells
。
.Cells
与With
和范围(“B2:Z100)”到底有什么关系?
我添加到示例中并添加了我希望有意义的注释:(请参阅 P.S.)
Sub cat()
With Worksheets("Sheet1").Range("B2:E20")
' Microsoft's code ...
.Range(.Cells(1, 1), .Cells(5, 3)).Font.Bold = True
.Range(.Cells(1, 1), .Cells(5, 3)).Select
MsgBox Selection.Address ' affects C3:E7 (not B2:D6)
' My code ...
.Range(Cells(1, 1), Cells(5, 3)).Font.Color = vbRed
.Range(Cells(1, 1), Cells(5, 3)).Select
MsgBox Selection.Address ' DOES affect B2:D6
End With
End Sub
P.S.我刚刚查看了我提供的链接中的最后两个示例。我认为这可能对我在纸上跟踪这两块代码的执行情况有很大帮助,看看我是否可以获得相同的输出。这不是“简单”的
Cells
与 .Cells
交易,而是对上述所有内容的深入研究,再加上 Item
的有趣体验,我以为我知道它的含义和用法,但现在我知道了不确定,在所提供的上下文中。
解释(不需要阅读(!),但寻求改进)
在
With
... 之下
.Range(.Cells
不涉及相对引用,因为 Cells
之前有点。
相反,Cells 的参数看起来像是 B2 的 OFFSET。如果他们是...
.Range(.Cells(1,1))
表示将 Offset(1,1)
应用于 B2,从而给出 C3 和
.Range(.Cells(5,3))
表示将 Offset(5,3)
应用于 B2,得到 E7。
所以单元格 C3:E7 将是粗体。
再往下...
第二个
.Range(Cells
确实包含对 B2 的相对引用。
所以
Cells(1,1)
代表相对于B2的第1行第1列,即B2。
和
Cells(5,3)
代表相对于B2的第5行第3列,即D6。
所以 B2:D6 将是红色。
你是对的。这个例子是错误的。但你的结论(偏移)也不正确。
罪魁祸首是 Range.Range 属性 (Excel),其中属性
cell1
和 cell2
是“范围的 name”。而不是每个 Cell
对象。而且,如果没有命名,单元格的名称就是它的地址。
以下示例应该显示问题:
Sub test()
With ActiveSheet.Range("C3:Z100")
Set o = .Cells(1, 1)
MsgBox o.Address '$C$3
Set o = .Range(.Cells(1, 1), .Cells(1, 1)) 'is .Range("C3:C3") - third row, third column in parent range
MsgBox o.Address '$E$5
Set o = Cells(1, 1) 'is Activesheet.Cells(1, 1)
MsgBox o.Address '$A$1
Set o = .Range(Cells(1, 1), Cells(1, 1)) 'is .Range("A1:A1") - first row, first column in parent range
MsgBox o.Address '$C$3
End With
End Sub