Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 用于对具有条件的列求和的宏意外停止_Excel_Vba - Fatal编程技术网

Excel 用于对具有条件的列求和的宏意外停止

Excel 用于对具有条件的列求和的宏意外停止,excel,vba,Excel,Vba,我想通过VBA计算列的和。 以下是我的代码: Sub CALRU() ECP_CA = 0 Radome_CA = 0 For i = 1 To 21726 If Cells(i, "L") = "GET" Then If Cells(i, "H") = "2014" Then ECP_CA = ECP_CA + Cells(

我想通过
VBA
计算列的和。 以下是我的代码:

Sub CALRU()
       ECP_CA = 0
       Radome_CA = 0
            For i = 1 To 21726
                If Cells(i, "L") = "GET" Then
                    If Cells(i, "H") = "2014" Then
                        ECP_CA = ECP_CA + Cells(i, "J")
                    Else
                        MsgBox "not found"
                    End If
                Else
                    MsgBox "not found"
                End If
            Next i

End Sub
当我的循环找到第一个结果为真时,它停止了。并且不终止列的其余部分。 有人能给我一个建议问题出在哪里?
谢谢。

如果代码停止,则必须单击MsgBox中的确定按钮,宏才能继续

编辑#1:

这可能有助于解决您的问题:

Sub CALRU()
       ECP_CA = 0
       Radome_CA = 0
            For i = 1 To 21726
                If Cells(i, "L") = "GET" Then
                    If Cells(i, "H") = "2014" Then
                        ECP_CA = ECP_CA + ReturnNumber(Cells(i, "J"))
                    Else
                        MsgBox "not found"
                    End If
                Else
                    MsgBox "not found"
                End If
            Next i

End Sub

Public Function ReturnNumber(v As Variant) As Double
    Dim L As Long, temp As String, CH As String
    L = Len(v)
    If L = 0 Then
        ReturnNumber = 0
    Exit Function
End If
    temp = ""
    For i = 1 To L
        CH = Mid(v, i, 1)
        If CH Like "[0-9]" Or CH = "." Or CH = "-" Then temp = temp & CH
    Next i
    If temp = "" Then
        ReturnNumber = 0
    Else
        ReturnNumber = CDbl(temp)
    End If

End Function

如果代码停止,则必须单击MsgBox中的“确定”按钮,宏才能继续

编辑#1:

这可能有助于解决您的问题:

Sub CALRU()
       ECP_CA = 0
       Radome_CA = 0
            For i = 1 To 21726
                If Cells(i, "L") = "GET" Then
                    If Cells(i, "H") = "2014" Then
                        ECP_CA = ECP_CA + ReturnNumber(Cells(i, "J"))
                    Else
                        MsgBox "not found"
                    End If
                Else
                    MsgBox "not found"
                End If
            Next i

End Sub

Public Function ReturnNumber(v As Variant) As Double
    Dim L As Long, temp As String, CH As String
    L = Len(v)
    If L = 0 Then
        ReturnNumber = 0
    Exit Function
End If
    temp = ""
    For i = 1 To L
        CH = Mid(v, i, 1)
        If CH Like "[0-9]" Or CH = "." Or CH = "-" Then temp = temp & CH
    Next i
    If temp = "" Then
        ReturnNumber = 0
    Else
        ReturnNumber = CDbl(temp)
    End If

End Function
它现在应该可以工作了:

Option Explicit

Sub CALRU()

    Dim ecp_ca          As Double
    Dim Radome_CA       As Double
    Dim i               As Long

    ecp_ca = 0
    Radome_CA = 0

    With ActiveSheet
        For i = 1 To 217
            If .Cells(i, "L") = "GET" Then
                If .Cells(i, "H") = "2014" Then
                    ecp_ca = ecp_ca + .Cells(i, "J")
                Else
                    Debug.Print "not found"
                End If
            Else
                Debug.Print "not found"
            End If
        Next i

    End With

End Sub
我尝试了217个,因为我不想等待21K的打印。我已将MsgBoxes更改为Debug.Print,并使用ActiveSheet添加了
,因为这可能也是一个问题<代码>选项显式
也被添加。

现在应该可以工作了:

Option Explicit

Sub CALRU()

    Dim ecp_ca          As Double
    Dim Radome_CA       As Double
    Dim i               As Long

    ecp_ca = 0
    Radome_CA = 0

    With ActiveSheet
        For i = 1 To 217
            If .Cells(i, "L") = "GET" Then
                If .Cells(i, "H") = "2014" Then
                    ecp_ca = ecp_ca + .Cells(i, "J")
                Else
                    Debug.Print "not found"
                End If
            Else
                Debug.Print "not found"
            End If
        Next i

    End With

End Sub

我尝试了217个,因为我不想等待21K的打印。我已将MsgBoxes更改为Debug.Print,并使用ActiveSheet添加了
,因为这可能也是一个问题<代码>选项Explicit
也被添加。

当然我单击了OK,但我的意思是stoped它不终止运行,它返回到宏中的代码并返回一个错误:不兼容type@vero该错误通常意味着J列中的某些或所有单元格包含文本值,而不是数字是!不兼容的地方在这一行:“ECP_CA=ECP_CA+Cells(i,“J”)”===>>我添加了“Dim i As Double”只是大声叫喊“Sub-CALRU()”,但在文中@Gary的意思是,如果J列中的一个值是文本,那么您将得到一个数据类型不匹配错误-例如,
1+a
将无法工作。不兼容不在那一行-它在
单元格(i,“J”)
@vero查看我的编辑1中返回的值中。当然,我单击了“确定”,但我的意思是“停止”,它不终止运行,它返回到宏中的代码,并返回一个错误:不兼容type@vero该错误通常意味着J列中的某些或所有单元格包含文本值,而不是数字是!不兼容的地方在这一行:“ECP_CA=ECP_CA+Cells(i,“J”)”===>>我添加了“Dim i As Double”只是大声叫喊“Sub-CALRU()”,但在文中@Gary的意思是,如果J列中的一个值是文本,那么您将得到一个数据类型不匹配错误-例如,
1+a
将无法工作。不兼容不在这一行-它在
单元格(i,“J”)
@vero请参阅我的编辑1中返回的值中。如果其中一个值是文本,并且变量需要是两倍才能处理数字的分数,那么这将不起作用(10685.22)如果其中一个值是文本,并且变量必须是双精度才能处理数字的分数(10685.22),那么这将不起作用