2017-03-22 4 views
0

Ich weiß, dass das ein leichtes wird, aber ich kann es einfach nicht nach Tagen des Probierens und Googles schaffen, also hörte ich mich nicht wie ein Idiot an, der hier fragt.VBA Find Next Column start loop wieder

Ich arbeite an, was ein einfacher Code sein sollte, um Werte in Spalten numerisch zu überprüfen sind in der Tat numerisch, zählt die Vorkommen und druckt die cell.address.

Es gibt zahlreiche Spalten in zahlreichen Arbeitsblättern zu suchen und der Code funktioniert gut für die erste Spalte in allen Arbeitsblättern Ich kann nicht gerade den findNext Code rechts, so dass es durch alle numerischen Spalten vor dem Verschieben auf das nächste Arbeitsblatt. (Code enthält den Start für die Überprüfung des Datums für eine zweite Schleife, wenn ich numerisch aussortiert bin)

Ich wäre sooooo dankbar für jede Hilfe, so dass ich nicht mehr Haare verlieren. Entschuldigung im Voraus Ich bin sehr neu in VBA.

Code:

Sub ErrorFormatCount() 

Dim j As Long 
Dim LastRow, LastCol, DateCol, AssetCol, NumericCol As Long 
Dim ErrorCount, Counter As Integer 
Dim Toolwb As Workbook 
Dim ws As Worksheet 

    Application.ScreenUpdating = False 
    Set Toolwb = Workbooks("EDTDoctor") 
    Toolwb.Sheets("Infrastructure").Activate 
    For Each ws In Worksheets 
     If ActiveSheet.Name = "EndSheetName" Then 
      Exit For 
     End If 
     'On Error Resume Next 
     NumericCol = ActiveSheet.Rows(7).Find("Numeric", Lookat:=xlWhole).Column 
     DateCol = ActiveSheet.Rows(7).Find("Date", Lookat:=xlWhole).Column 
     AssetCol = Rows(4).Find(What:="1035", Lookat:=xlWhole).Column 
     LastRow = ActiveSheet.Cells(Rows.Count, AssetCol).End(xlUp).Row 
     LastCol = ActiveSheet.Cells(AssetCol, Columns.Count).End(xlToLeft).Column 
     For j = 8 To LastRow 
      ErrorCount = 0 
      Counter = Toolwb.Sheets("Cover").Cells(41, "G").Value 
      NextPrintCell = Toolwb.Sheets("Cover").Cells(Rows.Count, "G").End(xlUp).Offset(1, 0).Row 

      If Not IsNumeric(Toolwb.ActiveSheet.Cells(j, NumericCol)) Then 
       ActiveSheet.Cells(j, NumericCol).Select 
       Toolwb.Sheets("Cover").Cells(NextPrintCell, "G") _ 
       = ActiveCell.address(RowAbsolute:=False, ColumnAbsolute:=False, External:=True) 
       ErrorCount = Application.WorksheetFunction.CountA(ActiveCell) 
       Toolwb.Sheets("Cover").Cells(41, "G").Value = ErrorCount + Counter 
      End If 

     Next j 

     Toolwb.ActiveSheet.Next.Activate 
    Next ws 
    Application.ScreenUpdating = True 
    Toolwb.Sheets("Cover").Activate 
    MsgBox ("Checked For Formatting Errors" & vbNewLine & vbNewLine _ 
    & "Format Errors Found" & " - " & Counter), vbInformation = vbOKOnly 
End Sub 

‚Mit Excel 2010

+0

Denken Sie, wir brauchen ein bisschen mehr Details, wohin die Ergebnisse gehen sollten. – SJR

+0

Keine Sorge. Der Code durchläuft alle Zeilen in ausgewählten Spalten (Spalten in jedem ws mit einem Kopf in Zeile (7) "numerisch" in den meisten Arbeitsblättern (außer dem ersten Blatt "Cover" und letzten "EndSheetName") Das kumulative Ergebnis für G41 und kopiert die Zellenadresse beginnend bei Cover! G43 für jeden gefundenen numerischen Fehler in die nächste Zeile. Leider ist es mir nicht möglich, die Arbeitsblattstruktur zu ändern, da diese Ausgabe von den Kundendaten festgelegt wird Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen oder wenn Sie eine Probe hochgeladen haben? – AmetureHour

Antwort

0

OK, noch ein paar Fragen, die ich in den Kommentaren markiert haben. Lassen Sie mich wissen, wie Sie auf

Sub ErrorFormatCount() 

Dim j As Long, k As Long 
Dim LastRow As Long, LastCol As Long, DateCol As Long, AssetCol As Long, NumericCol As Long 
Dim ErrorCount As Long, Counter As Long 
Dim Toolwb As Workbook 
Dim ws As Worksheet 

Application.ScreenUpdating = False 
Set Toolwb = Workbooks("EDTDoctor") 

For Each ws In Worksheets 
    If ws.Name = "EndSheetName" Then 
     Exit For 
    End If 
    'On Error Resume Next 
    NumericCol = ws.Rows(7).Find(What:="Numeric", Lookat:=xlWhole).Column 
    DateCol = ws.Rows(7).Find(What:="Date").Column 
    AssetCol = ws.Rows(4).Find(What:="1035").Column 
    LastRow = ws.Cells(Rows.Count, AssetCol).End(xlUp).Row 
    LastCol = ws.Cells(AssetCol, Columns.Count).End(xlToLeft).Column 
    For j = 8 To LastRow 
     For k = NumericCol To DateCol 'this is the loop for column but not sure if the start or end values are right 
      Counter = Toolwb.Sheets("Cover").Cells(41, "G").Value 
      NextPrintCell = Toolwb.Sheets("Cover").Cells(Rows.Count, "G").End(xlUp).Offset(1, 0).Row 
      If Not IsNumeric(ws.Cells(j, k)) Then 
       Toolwb.Sheets("Cover").Cells(NextPrintCell, "G") _ 
          = ws.Cells(j, k).Address(RowAbsolute:=False, ColumnAbsolute:=False, External:=True) 
       ErrorCount = Application.WorksheetFunction.CountA(ws.Cells(j, k)) 
       Toolwb.Sheets("Cover").Cells(41, "G").Value = ErrorCount + Counter 'not sure if this should vary for different columns 
      End If 
     Next k 
    Next j 
Next ws 

Application.ScreenUpdating = True 
Toolwb.Sheets("Cover").Activate 
MsgBox ("Checked For Formatting Errors" & vbNewLine & vbNewLine _ 
& "Format Errors Found" & " - " & Counter), vbInformation = vbOKOnly 

End Sub 
+0

@Mark Fitzgerald Vielen Dank, ich zwickte ein wenig, aber funktioniert wie ein Charme! – AmetureHour

+0

Nicht sicher, wer ist Mark Fitzgerald, aber froh, dass es geklappt hat Vielleicht könnten Sie es als Antwort auf Ihre Frage markieren? – SJR

+0

lol. Tut mir leid, falsche Benutzer. Danke SJR. – AmetureHour