我想知道为什么当我似乎选择第一行作为范围时,以下显示的方式不同。
'writes to first column(expected to write to first row)
Set Rng = Range("A1, B1, C1")
Rng(1) = "blah"
Rng(2) = "blah2"
Rng(3) = "blah3"
'writes to first row
Set Rng = Range("A1:C1")
Rng(1) = "blah"
Rng(2) = "blah2"
Rng(3) = "blah3"
答案 0 :(得分:1)
对此有一个非常简单的解释。首先让我们看一下Range Object接受的参数......
Range([Cell1], [Cell2])as Range, OR, Range(RowIndex, ColumnIndex)as Range, OR, Range(arg)
如您所见,Range只能接受2个参数; Cell 1和Cell2; RowIndex,ColumnIndex或参数(在引号中指定)。
所以,如果我们这样做......
Set Rng = Range([A1], [B1], [C1]): Rng(1) = "blah": Rng(2) = "blah2": Rng(3) = "blah3"
我们会收到错误:"编译错误:参数数量错误或属性分配无效)
这是因为我们只是试图将3个参数传递给只接受2的对象。
所以说到,你的代码运行而不会抛出错误的原因是,你已经在引用中定义了你的范围(作为参数),并在其间使用逗号。因此,您可能正在输入("A1, B1, C1")
,但excel将其视为("A1")
。
因此,当您指定Rng(1)
时,您正在实现Range对象的varient,这意味着您只需指定RowIndex,以便在第1,2,3行中填充值。 / p>
但是,如果我们这样做......
Set Rng = Range("A1")
Rng(1, 1) = "blah"
Rng(1, 2) = "blah2"
Rng(1, 3) = "blah3"
您将获得所需的结果,因为您已经指定了ColumnIndex以及RowIndex。
转到第二个范围("A1:C1")
...
在Range对象中使用引号时,您将其指定为参数。因此,如果你这样做("A1", "B1", "C1")
,你会收到一个错误,因为当你只接受2时你试图传递3个参数。所以当你指定("A1:C1")
时你会使用一个列表分隔符:
告诉excel您指定了一系列单元格,与,
相比,告诉Excel您将2个不同的单元格指定为Range([Cell1], [Cell2])
。
希望这能详细解答你的问题。
答案 1 :(得分:0)
首先,您在Range对象中定义单元格值的方式是不合适的。请尝试以下代码,它将产生具有两个不同范围定义的相同输出:
i = 1
For Each Cell In Rng
Cell.Value = "blah" & i
i = i + 1
Next
为什么你定义Range值的方式是这样的,我尝试了两个宏,如下所示。从宏的输出中,假设第一个范围元素的列号(例如A1
的数字是1,而A1:D1
的数字是4)是n
,我们可以查看Rng(1) to Rng(n)
的输出将首先填充n
列,然后转到下一行。
无论您是否定义范围,都应注意Rng(n)
始终存在。您可以随时定义或访问Rng(100)
。
Sub Test1()
Set my_sheet1 = ThisWorkbook.Worksheets("Sheet1")
'writes to first column(expected to write to first row)
Set Rng = my_sheet1.Range("A1:B2, C1, D1")
i = 1
For Each Cell In Rng
Cell.Value = "blah" & i
i = i + 1
Next
Rng(3) = "3rd Rng"
For i = 1 To 20
Rng(i) = "No." & i & " Rng"
Next
End Sub
Sub Test2()
Set my_sheet2 = ThisWorkbook.Worksheets("Sheet2")
Set Rng = my_sheet2.Range("A1:D1") 'Range with 4 columns
'loop with 4 columns in a row
i = 1
For Each Cell In Rng
Cell.Value = "blah" & i
i = i + 1
Next
For i = 7 To 20
Rng(i) = "No." & i & " Rng"
Next
End Sub