![](/img/trans.png)
[英]I am getting this error message. Run Time error '1004' Method 'Range' of object'_Global' Failed
[英]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.