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),那么这将不起作用