写了一段VBA小程序,运行总是报错,看了半天也没看出来哪里错了,求指教。

bnuqian 2017-07-05 05:43:07
VBA程序如下,求各位大神指教了。
Private Sub 基于颗粒数计算过滤器精度()
Dim i As Integer
Dim X, X1, X2, B1, B2 As Double
If Range("D25").Value > 5 Then
Range("E4").Value = "<" & Range("I6")
Else
For i = 1 To 8
If Range("D" & "25+i") >= 5 Then
X1 = Range("I" & "5+i").Value
X2 = Range("J" & "5+i").Value
B1 = Range("D" & "24+i").Value
B2 = Range("D" & "25+i").Value
Exit For
Next i
X = (X1 - X2) * Log(5 / B1) / Log(B1 / B2) + X1
Range("E4").Value = X
End If

If i = 8 Then
Range("E4").Value = ">" & Range("J13")
End If

End Sub
...全文
819 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-08-24
  • 打赏
  • 举报
回复
注释掉所有On Error Resume Next语句,在VBA IDE中运行, 出错后点击调试,光标会停在出错的那条语句处, 或者 事先在怀疑可能有逻辑错误的语句处设置断点,运行经过断点时中断, 此时可以在立即窗口中使用 ?变量名 或 ?函数名(函数参数) 或 过程名(参数) 辅助调试。
samayinlike 2017-08-21
  • 打赏
  • 举报
回复
Private Sub 基于颗粒数计算过滤器精度() Dim i As Integer Dim X, X1, X2, B1, B2 As Double dim pd as boolean If Range("D25").Value > 5 Then Range("E4").Value = "<" & Range("I6") Else For i = 1 To 8 pd=true If Range("D" & "25+i") >= 5 Then X1 = Range("I" & "5+i").Value X2 = Range("J" & "5+i").Value B1 = Range("D" & "24+i").Value B2 = Range("D" & "25+i").Value pd=false Exit For End If Next i if pd =true then X = (X1 - X2) * Log(5 / B1) / Log(B1 / B2) + X1 Range("E4").Value = X end if If i = 8 Then Range("E4").Value = ">" & Range("J13") End If End Sub
mrharong2017 2017-07-06
  • 打赏
  • 举报
回复
在EXIT FOR 下面加一行
end if
of123 2017-07-06
  • 打赏
  • 举报
回复
      For i = 1 To 8
        If Range("D" & "25+i") >= 5 Then
           X1 = Range("I" & "5+i").Value
           X2 = Range("J" & "5+i").Value
           B1 = Range("D" & "24+i").Value
           B2 = Range("D" & "25+i").Value
           Exit For
        End If
      Next i
bnuqian 2017-07-06
  • 打赏
  • 举报
回复
引用 1 楼 chewinggum 的回复:
报啥错也舍不得说
提示Next 没有for
脆皮大雪糕 2017-07-06
  • 打赏
  • 举报
回复
引用 8 楼 chewinggum 的回复:

    If Range("D25").Value > 5 Then
      Range("E4").Value = "<" & Range("I6")
    Else
      For i = 1 To 8
        If Range("D" & "25+i") >= 5 Then
           X1 = Range("I" & "5+i").Value
           X2 = Range("J" & "5+i").Value
           B1 = Range("D" & "24+i").Value
           B2 = Range("D" & "25+i").Value
           Exit For
       
            X = (X1 - X2) * Log(5 / B1) / Log(B1 / B2) + X1
            Range("E4").Value = X
         End if 
      Next i
    End If
靠,还是不对,exit for的位置不对
脆皮大雪糕 2017-07-06
  • 打赏
  • 举报
回复

    If Range("D25").Value > 5 Then
      Range("E4").Value = "<" & Range("I6")
    Else
      For i = 1 To 8
        If Range("D" & "25+i") >= 5 Then
           X1 = Range("I" & "5+i").Value
           X2 = Range("J" & "5+i").Value
           B1 = Range("D" & "24+i").Value
           B2 = Range("D" & "25+i").Value
           Exit For
       
            X = (X1 - X2) * Log(5 / B1) / Log(B1 / B2) + X1
            Range("E4").Value = X
         End if 
      Next i
    End If
脆皮大雪糕 2017-07-06
  • 打赏
  • 举报
回复
按照逻辑应该是end if在next i 后面,否则循环做一堆赋值没意义

   If Range("D25").Value > 5 Then
      Range("E4").Value = "<" & Range("I6")
    Else
      For i = 1 To 8
        If Range("D" & "25+i") >= 5 Then
           X1 = Range("I" & "5+i").Value
           X2 = Range("J" & "5+i").Value
           B1 = Range("D" & "24+i").Value
           B2 = Range("D" & "25+i").Value
           Exit For

            X = (X1 - X2) * Log(5 / B1) / Log(B1 / B2) + X1
            Range("E4").Value = X
    End If
       Next i
熊孩子开学喽 2017-07-06
  • 打赏
  • 举报
回复
把处理的语句都去掉, 看看这代码结构吧: If Range("D25").Value > 5 Then ..... Else For i = 1 To 8 If Range("D" & "25+i") >= 5 Then ..... Exit For Next i ....... End If 两个if, 一个end if
脆皮大雪糕 2017-07-05
  • 打赏
  • 举报
回复
For i = 1 To 8 next 之后 i=9 所以你的If i = 8 这个判断总也进不去 这个只是逻辑问题,并不导致报错。
脆皮大雪糕 2017-07-05
  • 打赏
  • 举报
回复
报啥错也舍不得说

2,462

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧