0

所以,我希望做一个“更好的”参考一单元格范围的SOA不具有复制/粘贴在我的方法,但下面的代码不起作用:如何将单元格区域存储到变量中?

Dim cellRange As Range 
' fieldIndex = 1, startRow = 10, lastRow = 20 
cellRange = s.Range(Cells(startRow, fieldIndex), Cells(lastRow, fieldIndex)) 

我缺少什么?我可以用其他方式使用它只是罚款:

s.Range(Cells(startRow, fieldIndex), Cells(lastRow, fieldIndex)).Value = "bob" 
+2

您必须使用单词'Set'来设置范围。也看到这个链接,因为你正在使用'Cells'对象http://stackoverflow.com/questions/14757265/excel-vba-error-copying-a-range-from-external-workbook/14763491#14763491 – 2013-02-08 14:40:18

回答

3

您需要使用Set的对象就像一个范围:

Dim cellRange As Range 
' fieldIndex = 1, startRow = 10, lastRow = 20 
Set cellRange = s.Range(Cells(startRow, fieldIndex), Cells(lastRow, fieldIndex)) 
+0

这工作就像魅力!谢谢。为什么在这种情况下需要'Set'? – Jon 2013-02-08 14:56:38

+3

@Jon,看到这个SO回答关于'Set'关键字:http://stackoverflow.com/q/10196620/293078 – 2013-02-08 15:57:58

+0

嗨道格,谢谢,这导致我查询什么是默认成员,这导致我[本页](http://www.cpearson.com/excel/DefaultMember.aspx),其中一个例子是页面的底部,很好地说明了如何设置对象和默认成员。 – Jon 2013-02-22 13:19:26

2

正如希德建议您可能还需要澄清的细胞部分,如这例如。

With s 
    Dim cellRange As Range 
    ' fieldIndex = 1, startRow = 10, lastRow = 20 
    Set cellRange = .Range(.Cells(startRow, fieldIndex), .Cells(lastRow, fieldIndex)) 
End with 
+0

为什么会这样(在'Cells'之前需要一个'。')? – Jon 2013-02-08 14:58:20

+0

上面的'With s'代码表示它变成了's.Cells(...)'的等价物。如果没有它的话,它并不重要,但是您可能会发现单元格有时没有上下文,具体取决于您在做什么。 – mattboy 2013-02-08 15:04:10