【问题标题】:vba run-time error 13 - when trying to execute a loopvba 运行时错误 13 - 尝试执行循环时
【发布时间】:2017-02-09 14:46:00
【问题描述】:

我有这个代码

Sub fillinvalues()

Dim interest As Double
Dim rate As Double
Dim payment As Double
Dim period As Double
Dim ws As Worksheet
Dim i As Object
Dim begbal As Double

Set ws = Worksheets("Sheet1")
payment = ws.Range("H3").Value
rate = ws.Range("H4").Value
begbal = ws.Range("E3").Value
begbal = 80000

Worksheets("Sheet1").Range("A2").Value = "PaymentNumber"
Worksheets("Sheet1").Range("B2").Value = "Payment/period"
Worksheets("Sheet1").Range("C2").Value = "Principal"
Worksheets("Sheet1").Range("D2").Value = "Interest"
Worksheets("Sheet1").Range("E2").Value = "RemainingBal"

ws.Range("A1:G1").Value = "Monthly Payments at effective monthy interest rate for 25-years"

ws.Range("A3").Value = 0
ws.Range("A3").Select
ws.Range("A3").Activate
period = 0

Do Until period = 301
' period = 0
ActiveCell.Offset(period, 0) = period
ActiveCell.Offset(period, 1) = payment
period = period + 1
Loop

Cells(3, 2).ClearContents

Cells(4, 4).Select
 Do Until ws.Columns(1) = Empty
ActiveCell.Value = ActiveCell.Offset(-1, 1).Value * rate
ActiveCell.Offset(0, -1).Value = ActiveCell.Offset(0, -2).Value - ActiveCell.Value
'For Each i In ws.Columns(4)
'i = ActiveCell.Offset(-1, 1).Value * rate
'ActiveCell.Value = i
ActiveCell.Offset(0, 1).Value = ActiveCell.Offset(-1, 1).Value - ActiveCell.Offset(0, -1).Value
ActiveCell.Offset(1, 0).Activate
'Next i

Loop
End Sub

但我在单元格 D4 上遇到类型不匹配错误(第二个循环在 Cells(4,4) 之后开始。我不明白为什么我已将 rate 声明为双精度,而当前单元格的值为双精度(见附图)。谢谢。

【问题讨论】:

  • ws.Columns(1) = Empty 应该是 ActiveCell = vbNullString 但你应该避免使用 activecell... 这是超级慢尝试使用 ws.Cells(4,i)For i = 4 to LastRow 并查看 lastrow :stackoverflow.com/documentation/excel-vba/918/…
  • 我尝试将 For..each.. 与对象声明一起使用,但没有任何运气。在开发 VB 程序方面,我仍然是一个新手,所以我现在尽量保持简单。感谢您的帮助。

标签: vba excel loops runtime-error


【解决方案1】:

我无法发表评论,因为我没有足够的代表,但我敢打赌,事情正在发生:

Do until ws.Columns(1) = Empty

当我在一个新的工作簿中测试这个时,我在测试列是否为空时总是正确的。我相信这是因为“空”表示尚未分配值并且它不是范围的属性。

我也同意 R3uK。避免使用 activecell 和 offsets。如果你不知道如何有足够的资源来解决这个问题。最好通过单元格引用或数组来引用。

最后,在没有任何类型的错误处理或值检查的情况下减去值时,您也可能会遇到问题。例如,一个单元格可以包含一个字符串。如果你然后尝试减去或乘以这个字符串,你会遇到错误。

我希望这会有所帮助!

编辑:完全错过了 R3uK 在我之前处理空的事情。

【讨论】:

  • 是的,您是对的,感谢您为我指明了正确的方向。
  • 没问题,很高兴能帮上忙!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
  • 1970-01-01
  • 1970-01-01
  • 2014-06-27
相关资源
最近更新 更多