2017-10-08 2 views
0

Ich habe diese Qn bei Mr Excel geschrieben, aber keine der Lösung funktioniert.VBA: Alert wenn Base oder 2 * Base

https://www.mrexcel.com/forum/excel-questions/1026003-vba-alert-if-base-2-base.html?posted=1#post4924266

Ich wieder Herstellung der Qn hier:

Mit Excel 2010 Ich möchte Excel mich warnen, wenn ein Zellenwert nicht gleich Basis oder 2 * Basis, aber wenn eine Zelle ist NICHT Base, es könnte 2 * Base oder umgekehrt sein; Daher sagt mir Excel immer, dass es falsch ist.

Wie soll ich meinen untenstehenden Code ändern?

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 

Antwort

3

Nur Test, um zu sehen, ob die Zelle nicht gleich Basis oder Base ist * 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 

Ich glaube, Sie Probleme hatten immer es zu arbeiten, weil Sie Ihre Anforderung wurden Interpretieren "Wenn der Zellenwert nicht gleich Base oder 2 * Base ist" wie "wenn der Zellenwert nicht gleich der Base ist oder der Zellenwert nicht gleich 2 * Base ist", aber Sie meinen "wenn der Zellenwert ist nicht (gleich der Basis oder gleich 2 * Basis) ", die ausgedrückt werden kann, indem man das" nicht "auf das Innere der Klammern anwendet, als" wenn die Zelle Wert ist (nicht gleich Basis) und (ungleich 2 * Basis) ".


Beachten Sie auch, dass Ihre Aussage

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

äquivalent zu der Aussage ist

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 

aber wahrscheinlich

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 
+0

Hallo Thank y zu verwenden beabsichtigt Ou so sehr! Es funktioniert. Ich habe vergessen, I als Integer zu dimmen. Nochmals vielen Dank! – user72728

+0

@ user72728 'i' würde ohnehin auf' Variant/Integer' oder 'Variant/Long' gesetzt, würde es also nicht zu echten Problemen führen, wenn man es nicht als Integer deklariert. (Es ist einfach keine gute Idee, es nicht korrekt zu deklarieren.) – YowE3K