2013-11-15 20 views
2

现在我打字:设置为一个单元格的引用,然后修改其内容

ActiveCell.Offset(-1, 0) = ActiveCell.Offset(-1, 0) + 1 

我倒是大大宁愿设置单元格的引用,并使用它,而不是打字ActiveCell.Offset每时间。我试着将它设置为一个名为sick范围:

Dim sick As Range 
Set sick = ActiveCell.Offset(-1, 0) 

但是当我说sick = sick + 1没有奏效。它说这是一种类型不匹配。为什么?

+0

您尝试添加1的单元格中可能存在文本。 – Sam

回答

2

是的这是因为生病的类型范围。您可以使用值属性这样访问它的值:

sick.value = sick.value + 1 
+0

谢谢!我感到很蠢,但现在起作用了。我只是不知道我不得不说病态。感谢您的快速回复。 – user2994436

+0

Hm ...'.Value'是'Range'类型的默认属性,所以这应该完全等同于'sick = sick + 1'。这不能成为它工作的原因; @ user2994436必须无意中改变了使其工作的其他内容。 –

+0

@ Jean-FrançoisCorbett我知道这一点,但我也注意到,在某些情况下,由于某种原因,如果未明确调用,VBA将不会评估为“Value”属性。 – ApplePie

0

可能的原因是,你的sick单元包含一个非数字类型的数据,可能是一个字符串(即文本)。

我试过你的代码; sick = sick + 1对我来说工作得很好 - 只要sick单元格包含数字数据(或VBA可以解释的数据)。但是,如果sick包含一个字符串,我能够重现您的类型不匹配错误。

注意.Value是范围类型的默认属性,因此

sick = sick + 1 

是完全等同于

sick.Value = sick.Value + 1 

这两条线可以互换使用。有些人喜欢后者,因为它更明确你在做什么。其他人是前者,因为它更简洁。这完全是一个品味问题。

相关问题