0

我正在尝试绘制 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的值时,它已经增加到了1万,并且由于所有列都填满到excel的底部,这意味着循环实际上是循环的。但是为什么我被困在零,而不是增加?为什么我会收到此错误?

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

编辑 2:因此,在得到我放在这里的代码中不存在错误的建议后,我查看了我的变量声明。问题最终是我将 i 声明为整数!这使它向下舍入为零,导致循环卡在 i = 0 处,并且永远不会使其达到“停止点”。只是一个愚蠢的错误!

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

4

2 回答 2

1

您的代码确实可以在我的 PC 上运行(在将列更改为“A”和“B”之后,因为我在 Excel 2010 中工作并且我的列并没有一直运行到您正在写入的位置)。您的评论似乎表明您实际上为 i 循环的值比您所说的要多得多(“跟踪器在 10,000 秒内,而我只经过 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
于 2013-05-07T21:31:50.523 回答
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
于 2013-05-07T21:22:50.260 回答