0

由于类型不匹配,此代码在For循环中返回错误:

  Dim sp, q, spb, spt, cp, cpb, cpt, g, n, i As String
  n = Range("G3").Value
  cp = ActiveCell.Offset(0, -4).Value
  q = ActiveCell.Offset(0, -3).Value
  cpt = cp * q
  cpb = cp * n
  i = 0.05
  For i = 0.05 To 10
    sp = cp + i
    spt = (sp * q)
    spb = spt * n
    g = spt - cpt - spb - cpb
    If g > 0 Then
      Range("I10").Value = g
      Exit For
    End If
  Next i
End Sub

在此处输入图像描述

4

3 回答 3

3

声明/暗淡你的变量是正确的类型:

Dim i As Double

对于其他变量,数字类型也是合适的。如果 Excel 在从字符串类型的单元格中提取它们时遇到问题,请在进行计算之前使用转换(CDbl、CLng、...)。

于 2013-07-08T09:51:54.053 回答
1

您可以先对单元格进行验证调用:

If IsNumeric(Range("I10").Value) then
    '// Do some numeric stuff 
else    
'// Do some non-numeric stuff

endif

有一个 Val() 函数可以尝试将字符串内容解释为数字: http: //office.microsoft.com/en-gb/excel-help/HV080557263.aspx

于 2013-12-18T11:25:03.543 回答
1

如上所述,正确调暗变量。例如,在您的代码中 sp、q、spb、spt、cp、cpb、cpt、g、n 都设置为“变体”类型,这可能是也可能不是您所追求的。我的猜测是您希望将它们全部设置为字符串,这意味着您必须执行以下操作:

将 sp 调暗为字符串,将 q 调为字符串,将 spb 调为字符串(等等,等等)。当然,这样做会导致很多代码被炸毁(以cpt = cp * q 为例)。

此外,循环的默认增量为 1。这是您在 for 循环中所期望的吗?在上面的示例中,您的 for 循环永远不会达到 10(停止在 9.05)。

我不确定这是否对您有帮助,但希望它能消除未来的任何困惑。

祝你好运!

于 2013-07-08T13:23:52.160 回答