2017-07-11 20 views
0

私はこの類似の問題について多くの他の投稿を見てきましたが、私の問題は解決しませんでした。実行時にコードが動作しませんが、デバッグ時にコードが動作しますか?

データに不正な値が含まれています。条件付き書式を使ってこれらの値を赤にしました。データのサイズのために、私のスクリプトが実際の数式/値をチェックするオプションではないので、表示された色をチェックします。 私のスクリプトは、この色を探している列をループすることになっています。色が見つかると、その行を別のシートにコピーしてから(別のスクリプトで後で返すことができるように)、元の行を削除して、 。 サイズとスピードのために、私はデータが悪いことを知っている特定のポイントに検索エリアを限定していますので、赤色になります(行337;列22)

ボタンを押してプロシージャを呼び出すとこの赤いマークは見えません。コードをステップ実行すると、それが実行されます。私は列をループする部分で問題を解決しましたが、私が間違っていることを理解することはできません。

マイコード:

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ランニング:

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をデバッグするとき:

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 

答えて

0

OKを、私はなぜ理由を見つけました赤いマーク。 displayformat.colorindex番号の識別には違いがあるようです。私が見つかりましたのColorIndexとdisplayformat.colorindexを要求します。Debug.Printを追加し、これは私が得たものである:

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 

なぜこれが起こっている私はわかりませんよ。なぜこの違いがあるのか​​、それを回避する方法を知りたいのです。私は-5と3の両方を探すためにOR文を追加できると思いますので、実行中とデバッグ中に動作します。 これについて新しい質問をするか、ここに続行する必要がありますか?

関連する問題