为什么这个循环不能正常工作?我一直收到错误对象'_Global'的方法'范围'失败

时间:2013-05-07 21:06:41

标签: excel vba excel-vba excel-2010

我正在尝试绘制lnD和i,其中i是x轴,lnD是y轴。我有一个等式,我正在为i输入一系列值,并尝试检索lnD的值。

然而,我遇到了一个奇怪的问题。首先,这是代码。我应该注意到它会导致我的Excel冻结几秒钟,但它不会崩溃或任何事情。:

Tracker = 0
Alpha = -1.593975
Beta = -334.6942

For i = 0 To 0.1 Step 0.01
    Tracker = Tracker + 1
    lnD = Beta * i + Alpha
    Range("XFB" & Tracker).Value = i
    Range("XFC" & Tracker).Value = lnD
Next i

我得到对象'_Global'失败的错误“方法'范围'”。当我查看数据所在的列时,它只是i = 0和lnD = -1.593975,一遍又一遍地重复。当我查看Tracker的值时,它已经增加到10万,并且因为所有列都已经填满了excel的底部,这意味着循环实际上是循环的。但为什么我会陷入零,而不是增加?为什么我会收到此错误?

编辑:我应该注意,如果你将顶行更改为For i = 0到10 step 1,它会起作用......那么这与我输入的数字有关吗?

编辑2:所以,在获得建议之后,我在这里放置的代码中没有出现错误,我查看了我的变量声明。问题最终是我宣布我是一个整数!这使得它向下舍入为零,导致循环卡在i = 0,并且从未使其成为“停止点”。只是一个愚蠢的错误!

我不会删除这篇文章,只是因为我觉得我应该把我的愚蠢显示出来。谢谢大家的帮助!

2 个答案:

答案 0 :(得分:1)

尝试以下方法。不是移动目标范围,我总是发现更好地修复我的trget顶部并使用偏移来填充bwllow和右边的单元格。

Sub testit()

Dim StartCell As Range
tracker = 0
Alpha = -1.593975
Beta = -334.6942

Set StartCell = ActiveSheet.Range("XFB1")

For i = 0 To 0.1 Step 0.01
    lnD = Beta * i + Alpha
    StartCell.Offset(tracker, 0).Value = i
    StartCell.Offset(tracker, 1).Value = lnD
    tracker = tracker + 1
Next i

End Sub

答案 1 :(得分:1)

您的代码可以在我的PC上运行(将列更改为“A”和“B”,因为我在Excel 2010中工作,而我的columsn不会一直运行到您写入的位置) 。你的评论似乎表明,你实际上已经为我提供了更多的值,而不是你所说的(“追踪器在10,000s而我只经历了10个步骤),那会有什么问题吗?

顺便说一句,将单个单元格值写入excel是不太可能有效的。将所有内容写入数组然后将数组写入excel会更快。

我的Excel上有效(请注意我将输出的开头更改为“A1”,小心不要覆盖任何数据):

Sub test()

   ' Parameters
   Dim Alpha#:         Alpha = -1.593975
   Dim Beta#:          Beta = -334.6942
   Dim nmbOfSteps&:    nmbOfSteps = 11&
   Dim increment#:     increment = 0.01
   Dim startValue#:    startValue = 0#

   ' Fill in values in an array
   Dim result() As Double, cntr&
   ReDim result(1 To nmbOfSteps, 1 To 2)
   For cntr = 1 To nmbOfSteps
      Dim iValue#: iValue = startValue + CDbl(cntr - 1&) * increment
      result(cntr, 1) = iValue
      result(cntr, 2) = Alpha + Beta * iValue
   Next cntr

   ' Write the entire array in one go
   ThisWorkbook.ActiveSheet.Range("A1").Resize(nmbOfSteps, 2).Value2 = result

End Sub