2017-07-11 5 views
0

Ich habe mir viele andere Posts zu diesem ähnlichen Problem angeschaut, aber sie haben mein Problem nicht gelöst.Code funktioniert nicht beim Ausführen, aber beim Debuggen?

Ich habe Daten, die ungültige Werte enthalten. Ich habe die bedingte Formatierung verwendet, um diese Werte rot zu markieren. Aufgrund der Größe der Daten ist es keine Option, dass mein Skript die tatsächliche Formel/Werte überprüft, also lasse ich die angezeigte Farbe überprüfen. Mein Skript soll Spalten durchlaufen, nach dieser Farbe suchen, wenn Farbe gefunden wird, kopiert es die Zeile in ein anderes Blatt (damit es später mit einem anderen Skript zurückgegeben werden kann) und löscht dann die ursprüngliche Zeile und springt zur nächsten Zeile . Aus Gründen der Größe und Geschwindigkeit habe ich den Suchbereich auf einen bestimmten Punkt beschränkt, wo ich weiß, dass die Daten schlecht sind, also rot markiert (Zeile 337; Spalte 22.)

Wenn ich die Prozedur per Knopfdruck anrufe Es sieht diese rote Markierung nicht. Wenn ich durch den Code gehe, tut es das. Es ist mir gelungen, das Problem an dem Punkt festzuhalten, an dem ich die Spalten durchlaufe, aber ich kann nicht herausfinden, was ich falsch mache.

Mein Code:

Dim intSerialCount As Integer 
    intSerialCount = Sheet4.Range("I1").Value 

Dim intBadDataSerialNumberStart As Integer 
    intBadDataSerialNumberStart = 3 

Dim intBadDataSerialNumberCount As Integer 
    intBadDataSerialNumberCount = Sheet6.Cells(1, 2).Value 

Dim intRowCnt As Integer 

Dim intBeginRow As Integer 
    intBeginRow = intSerialCount + intBadDataSerialNumberStart - 1 
Dim intEndRow As Integer 
    intEndRow = 333 'intBadDataSerialNumberStart 

Dim intColCnt As Integer 

Dim intBeginCol As Integer 
    intBeginCol = 21 '7 
Dim intEndCol As Integer 
    intEndCol = 23 '37 

Dim button As MSForms.CommandButton 
Set button = Sheets("ANALYSIS TOOL").CommandButton2 

Dim strNoMatch As String 
    strNoMatch = "Something went wrong!" 
Dim strTitle As String 
    strTitle = "KPI Tool" 

Dim strPW As String 
    strPW = "******" 

'======================================================================================== 
Application.ScreenUpdating = False 

Debug.Print "checking sourcedata" 
If Sheet2.Range("A1").Value = "" Then 
Debug.Print "trimming sourcedata" 
    Sheet2.Activate 
    Sheet2.Columns("C:C").Select 
    Selection.Replace What:=" ", _ 
         Replacement:="", _ 
         LookAt:=xlPart, _ 
         SearchOrder:=xlByRows, _ 
         MatchCase:=False, _ 
         SearchFormat:=False, _ 
         ReplaceFormat:=False 
    Sheet2.Range("A1").Value = 1 
Else 
Debug.Print "Sourcedata already trimmed" 
End If 


If Sheet4.Range("H1").Value = False Then 
Debug.Print "BadData already removed? = FALSE" 
'---------------------------------------------------------------------------------------- 
    'Reorganise_TruckAnalysis 
     Sheet3.AutoFilter.Sort.SortFields.Clear 
     Sheet3.AutoFilter.ShowAllData 
     Sheet3.Range("A3").FormulaR1C1 = "=IF(DATA!RC[2]=0,NA(),DATA!RC[2])" '=IF(DATA!C3=0;NA();DATA!C3) 
     Sheet3.Activate 
     Sheet3.Range("A3").Select 
     Sheet3.Range("A3").AutoFill Destination:=Range("A3:A500") 
     Sheet3.Calculate 
Debug.Print "Reorganised TruckAnalysis" 
    'Loop Rows: 
    Debug.Print "Start looping rows" 
    For intRowCnt = intBeginRow To intEndRow Step -1 

    Debug.Print "Checking row " & intRowCnt 
     If IsError(Sheet3.Cells(intRowCnt, 1)) Then 
     Debug.Print "IsError found" 
      'do nothing, go to next row 
     Else 
      'Loop Columns: 
      Debug.Print "Start looping columns" 
      For intColCnt = intBeginCol To intEndCol 

       Debug.Print "Checking column " & intColCnt 
       If Sheet3.Cells(intRowCnt, intColCnt).DisplayFormat.Interior.ColorIndex = 3 Then 
       Debug.Print "Red Mark found" 
        If Sheet2.Cells(intRowCnt, 3).Value = Sheet3.Cells(intRowCnt, 1).Value Then 
        Debug.Print "Data Matches" 
         Application.CutCopyMode = False 
         Sheet2.Cells(intRowCnt, 3).EntireRow.Copy 
         Debug.Print "copying bad data" 
         Sheet6.Cells(intBadDataSerialNumberStart + intBadDataSerialNumberCount, 1).PasteSpecial Paste:=xlPasteFormats 
         Sheet6.Cells(intBadDataSerialNumberStart + intBadDataSerialNumberCount, 1).PasteSpecial Paste:=xlPasteValues 

         Sheet2.Cells(intRowCnt, 3).EntireRow.Delete Shift:=xlUp 
         Debug.Print "removing bad data from source" 
         intBadDataSerialNumberCount = intBadDataSerialNumberCount + 1 

         Exit For 
        Else 
         Debug.Print "Data doesn't match" 
         MsgBox strNoMatch, _ 
           vbOKOnly + vbInformation, strTitle 
        End If 

       End If 
      Debug.Print "No Red mark found" 
      Next intColCnt 
      Debug.Print "Restarting column count" 
      intColCnt = intBeginCol 
     End If 
    Debug.Print "Finished looping columns" 
    Next intRowCnt 
Debug.Print "Finished looping rows" 
    'Reorganise_TruckAnalysis 
    Debug.Print "Reorganising TruckAnalysis" 
    Sheets("TRUCK ANALYSIS").Unprotect Password:=strPW 
    Sheet3.AutoFilter.ShowAllData 
    Sheet3.Range("A3").FormulaR1C1 = "=IF(DATA!RC[2]=0,NA(),DATA!RC[2])" '=IF(DATA!C3=0;NA();DATA!C3) 
    Sheet3.Activate 
    Sheet3.Range("A3").Select 
    Sheet3.Range("A3").AutoFill Destination:=Range("A3:A500") 
    Sheet3.Calculate 

    Sheet4.Range("H1").Value = True 
    button.Caption = "RETURN BAD DATA" 

Else 
Debug.Print "BadData already removed? = TRUE" 
    'SCRIPT FOR RETURNING BAD DATA 
    If intBadDataSerialNumberCount > 0 Then 
     Debug.Print "Secured Bad Data found" 
     intBeginRow = intBadDataSerialNumberStart 
     intEndRow = intBadDataSerialNumberStart + intBadDataSerialNumberCount 
     Debug.Print "Start looping rows" 
     For intRowCnt = intBeginRow To intEndRow 
     Debug.Print "checking row " & intRowCnt 
      Application.CutCopyMode = False 
      Sheet6.Cells(intRowCnt, 1).EntireRow.Copy 
      Sheet2.Cells(intSerialCount + intBadDataSerialNumberStart, 1).PasteSpecial Paste:=xlPasteValues 
      Sheet6.Cells(intRowCnt, 1).EntireRow.Clear 
     Next intRowCnt 
    End If 
    Sheets("ANALYSIS TOOL").Unprotect Password:=strPW 
    Sheet4.Range("H1").Value = False 
    button.Caption = "REMOVE BAD DATA" 
'---------------------------------------------------------------------------------------- 
End If 


    Sheet4.Activate 

End Sub 

debug.print beim Laufen:

checking sourcedata 
Sourcedata already trimmed 
BadData already removed? = FALSE 
Reorganised TruckAnalysis 
Start looping rows 
Checking row 337 
Start looping columns 
Checking column 21 
No Red mark found 
Checking column 22 
No Red mark found 
Checking column 23 
No Red mark found 
Restarting column count 
Finished looping columns 

Debug.print beim Debuggen:

checking sourcedata 
Sourcedata already trimmed 
BadData already removed? = FALSE 
Reorganised TruckAnalysis 
Start looping rows 
Checking row 337 
Start looping columns 
Checking column 21 
No Red mark found 
Checking column 22 
Red Mark found 
Data Matches 
copying bad data 
removing bad data from source 
Restarting column count 
Finished looping columns 

Antwort

0

OK, fand ich den Grund warum es ist nicht zu finden rote Markierung. Es scheint einen Unterschied bei der Identifizierung der Displayformat.ColorIndex Nummer zu geben. Ich habe debug.print die gefunden Color und displayformat.colorindex anfordert, und das ist, was ich habe:

Debug.print running: 

checking sourcedata 
Sourcedata already trimmed 
BadData already removed? = FALSE 
Reorganised TruckAnalysis 
Start looping rows 
Checking row 337 
Start looping columns 
Checking column 21 
DisplayFormat.Interior.ColorIndex = 24 
Interior.ColorIndex = 24 
No Red mark found 
Checking column 22 
DisplayFormat.Interior.ColorIndex = -5 
Interior.ColorIndex = 24 
No Red mark found 
Checking column 23 
DisplayFormat.Interior.ColorIndex = 24 
Interior.ColorIndex = 24 
No Red mark found 
Restarting column count 
Finished looping columns 

Debug.print debugging: 

checking sourcedata 
Sourcedata already trimmed 
BadData already removed? = FALSE 
Reorganised TruckAnalysis 
Start looping rows 
Checking row 337 
Start looping columns 
Checking column 21 
DisplayFormat.Interior.ColorIndex = 24 
Interior.ColorIndex = 24 
No Red mark found 
Checking column 22 
DisplayFormat.Interior.ColorIndex = 3 
Interior.ColorIndex = 24 
Red Mark found 
Data Matches 
copying bad data 
removing bad data from source 
Restarting column count 
Finished looping columns 

Ich bin nicht sicher, warum dies geschieht. Ich möchte wissen, warum es diesen Unterschied gibt und wie man ihn vermeidet. Ich denke, ich könnte eine OR-Anweisung hinzufügen, damit sie sowohl für -5 als auch für 3 aussieht, also wird es während des Laufens und während des Debuggens funktionieren. Soll ich eine neue Frage dazu stellen oder hier fortfahren?

Verwandte Themen