繁体   English   中英

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

[英]Why isn't this loop working correctly? I keep getting the error Method 'Range' of object '_Global' failed

我试图绘制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,并且从未使其成为“停止点”。 只是一个愚蠢的错误!

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

请尝试以下方法。 而不是移动目标范围,我总是发现更好地固定在我的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

您的代码可以在我的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM