我正在尝试绘制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,并且从未使其成为“停止点”。只是一个愚蠢的错误!
我不会删除这篇文章,只是因为我觉得我应该把我的愚蠢显示出来。谢谢大家的帮助!
答案 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