私はこの類似の問題について多くの他の投稿を見てきましたが、私の問題は解決しませんでした。実行時にコードが動作しませんが、デバッグ時にコードが動作しますか?
データに不正な値が含まれています。条件付き書式を使ってこれらの値を赤にしました。データのサイズのために、私のスクリプトが実際の数式/値をチェックするオプションではないので、表示された色をチェックします。 私のスクリプトは、この色を探している列をループすることになっています。色が見つかると、その行を別のシートにコピーしてから(別のスクリプトで後で返すことができるように)、元の行を削除して、 。 サイズとスピードのために、私はデータが悪いことを知っている特定のポイントに検索エリアを限定していますので、赤色になります(行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