VBA:如果为基数或2*基数,则发出警报

VBA:如果为基数或2*基数,则发出警报,vba,excel,Vba,Excel,我已经在Excel先生上发布了这个Qn,但没有一个解决方案有效 我在这里重新制作Qn: 使用Excel 2010。 我想让Excel提醒我,如果单元格值不等于基数或2*基数,但当单元格不等于基数时,它可以是2*基数,反之亦然;因此Excel总是告诉我这是错误的 我应该如何修改下面的代码 Sub SubTotal_test() Dim k, i, j, minim, countleft, base, tmp_row, Last_Row, rw As Integer base =

我已经在Excel先生上发布了这个Qn,但没有一个解决方案有效

我在这里重新制作Qn:

使用Excel 2010。 我想让Excel提醒我,如果单元格值不等于基数或2*基数,但当单元格不等于基数时,它可以是2*基数,反之亦然;因此Excel总是告诉我这是错误的

我应该如何修改下面的代码

Sub SubTotal_test()
    Dim k, i, j, minim, countleft, base, tmp_row, Last_Row, rw As Integer

    base = InputBox("State the number of items")
    Last_Row = ActiveWorkbook.ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row

    For i = Last_Row + 1 To 1 Step -1

        If (ActiveWorkbook.ActiveSheet.Cells(i, 3) = "L" And ActiveWorkbook.ActiveSheet.Cells(i, 11) <> base) Then
            If (ActiveWorkbook.ActiveSheet.Cells(i, 3) = "L" And ActiveWorkbook.ActiveSheet.Cells(i, 11) <> (2 * base)) Then
                MsgBox "There is an error with the SubTotal. Please change manually."
                Exit For
            End If
        Else
            'MsgBox "SubTotal OK"
            ActiveWorkbook.ActiveSheet.Cells(i, 11).Select
        End If
    Next i

End Sub
小计测试()
Dim k,i,j,minim,countleft,base,tmp_行,Last_行,rw为整数
基本=输入框(“说明项目数量”)
最后一行=ActiveWorkbook.ActiveSheet.Cells(Rows.Count,2).End(xlUp).Row
对于i=最后一行+1到1步骤-1
如果(ActiveWorkbook.ActiveSheet.Cells(i,3)=“L”和ActiveWorkbook.ActiveSheet.Cells(i,11)基),则
如果(ActiveWorkbook.ActiveSheet.Cells(i,3)=“L”和ActiveWorkbook.ActiveSheet.Cells(i,11)(2*base)),则
MsgBox“小计有错误。请手动更改。”
退出
如果结束
其他的
“MsgBox”小计正常
ActiveWorkbook.ActiveSheet.Cells(i,11)。选择
如果结束
接下来我
端接头

只需测试单元格是否不等于base或base*2:

Sub SubTotal_test()
    Dim k, i, j, minim, countleft, base, tmp_row, Last_Row, rw As Integer

    base = InputBox("State the number of items")
    Last_Row = ActiveWorkbook.ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row

    For i = Last_Row + 1 To 1 Step -1
        If ActiveWorkbook.ActiveSheet.Cells(i, 3) = "L" And _
           ActiveWorkbook.ActiveSheet.Cells(i, 11) <> base And _
           ActiveWorkbook.ActiveSheet.Cells(i, 11) <> 2 * base Then
            MsgBox "There is an error with the SubTotal. Please change manually."
            ActiveWorkbook.ActiveSheet.Cells(i, 11).Select
            Exit For
        End If
    Next i

End Sub
这与声明是等价的

Dim k, i, j, minim, countleft, base, tmp_row, Last_Row, rw As Integer
Dim k As Variant, i As Variant, j As Variant, minim As Variant, countleft As Variant, base As Variant, tmp_row As Variant, Last_Row As Variant, rw As Integer
但您可能打算使用

Dim k As Integer, i As Integer, j As Integer, minim As Integer, countleft As Integer, base As Integer, tmp_row As Integer, Last_Row As Integer, rw As Integer

只需测试单元格是否不等于base或base*2:

Sub SubTotal_test()
    Dim k, i, j, minim, countleft, base, tmp_row, Last_Row, rw As Integer

    base = InputBox("State the number of items")
    Last_Row = ActiveWorkbook.ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row

    For i = Last_Row + 1 To 1 Step -1
        If ActiveWorkbook.ActiveSheet.Cells(i, 3) = "L" And _
           ActiveWorkbook.ActiveSheet.Cells(i, 11) <> base And _
           ActiveWorkbook.ActiveSheet.Cells(i, 11) <> 2 * base Then
            MsgBox "There is an error with the SubTotal. Please change manually."
            ActiveWorkbook.ActiveSheet.Cells(i, 11).Select
            Exit For
        End If
    Next i

End Sub
这与声明是等价的

Dim k, i, j, minim, countleft, base, tmp_row, Last_Row, rw As Integer
Dim k As Variant, i As Variant, j As Variant, minim As Variant, countleft As Variant, base As Variant, tmp_row As Variant, Last_Row As Variant, rw As Integer
但您可能打算使用

Dim k As Integer, i As Integer, j As Integer, minim As Integer, countleft As Integer, base As Integer, tmp_row As Integer, Last_Row As Integer, rw As Integer

你好,非常感谢!它确实有效。我忘了将I设置为整数。再次感谢你@user72728
i
将默认为
Variant/Integer
Variant/Long
,因此未能将其声明为整数不会导致任何实际问题。(不正确申报不是个好主意。)你好,非常感谢!它确实有效。我忘了将I设置为整数。再次感谢你@user72728
i
将默认为
Variant/Integer
Variant/Long
,因此未能将其声明为整数不会导致任何实际问题。(不正确申报不是个好主意。)