2016-03-04 118 views
2

我正在使用Excel 2013.在我的代码中,我指的是我必须在Excel工作表中操作典型数据。例如:Excel VBA:范围和单元格的意外结果

**Names** 
     Ann 
     Jim 
     Tom 
     Liz 

我不希望我的数据集内指的特定细胞时,包括+1在我的代码。

也就是说,让 “安安” 我宁愿用

Cells(1,1) 

Cells (1+1,1) 

所以我定义不包括头一个范围:

Set R = Range(Cells(2,1),Cells(5,1) 

现在这个说法指“安”

R.Cells(1,1) 

接下来,我想我的范围[R内指的是“小范围”:

R.Range(R.Cells(2,1), R.Cells(3,1)) 

但出乎意料的是,现在,而不是预期的“吉姆”和“汤姆”(第二至第三单元我的范围R),我得到“安”和“吉姆”(Excel工作表中的第二到第三)。

任何人都可以提供一些关于我在这里失踪的见解吗?

谢谢

回答

1

这是一个不传递继承血统的经典案例。内R.Range(Cells(2,1), Cells(3,1))Cells不知道它们属于R让他们默认为ActiveSheet property可能会或可能不会甚至是R是(更多的问题出现了下标超出范围错误)的工作表。

with R 
    debug.print .Range(.Cells(2,1), .Cells(3,1)).address 
end with 

With ... End With statement是传递遗传亲子关系的最简单方法。请注意,.Cells而不是Cells用于传递参考。它也可以写成,

debug.print R.Range(R.Cells(2,1), R.Cells(3,1)).address 

样本子:从VBE的立即窗口

Sub Unexpected_result_with_Range_and_Cells() 
    Dim R As Range 

    Set R = Range(Cells(2, 1), Cells(5, 1)) 
    Debug.Print R.Address 
    Debug.Print R.Cells(1, 1).Value 

    With R 
     Debug.Print .Range(.Cells(2, 1), .Cells(3, 1)).Address 
     Debug.Print .Cells(2, 1).Value 
     Debug.Print .Cells(3, 1).Value 
    End With 

End Sub 

结果:

$A$2:$A$5 
Ann 
$A$4:$A$5 
Jim 
Tom 
+0

我很抱歉地说,情况并非如此。这是我想到的第一个想法,但在引用“R”(我编辑了上面的代码,BTW)之后,行为仍然是相同的 – AHB0378

+0

Right ...'$ A $ 4:$ A $ 5'是'Tom'和'Liz'但是'R.Range(R.Cells(2,1),R.Cells(3,1))'应该是'Jim'和'Tom'。顺便说一句,我真的很感谢帮助 – AHB0378

相关问题