Ich versuche, eine Liste von Namen auf einem Blatt zu nehmen, zu überprüfen, ob es auf einem zweiten Blatt erscheint, und wenn ja, auf einem dritten Blatt den Namen und anzeigen wie oft es angezeigt wird.Ein Fehler auftritt/einfrieren mit COUNTIF in VBA
Ich habe irgendwo Code gefunden und versucht, ihn für meine Zwecke anzupassen. Ich habe Do Bis IsEmpty verwendet, um durch das erste Arbeitsblatt und zwei verschachtelte IF-Anweisungen zu überprüfen, ob der Name auf dem zweiten Blatt angezeigt wird, und COUNTIF, um sie zu berechnen.
Ich dachte, ich hätte alles richtig gemacht, aber wenn ich das Makro versuche, läuft es für einen Moment, dann legt er auf und friert ein. Ich bin sehr neu bei VBA und habe wahrscheinlich ein paar sehr einfache Fehler gemacht, aber ich bin nicht vertraut genug mit VBA, um den Fehler zu finden.
Unten ist der Code, den ich verwende.
Sub NS_FPS_Macro()
Dim NSName As String
Dim FPSCount As String
Application.ScreenUpdating = False
NSName = Worksheets("Summary_Report").Range("B2").Select
Do Until IsEmpty(Worksheets("Summary_Report").Range("B:B"))
Sheets("FPS_Report").Activate
If ActiveCell.Value = NSName Then
Found = True
End If
If Found = True Then
FPSCount = Application.WorksheetFunction.CountIf(Range(Worksheets("FPS_Report").Range("B:B")), NSName)
Destination = Sheets("Report").Cells(Rows.Count, "A").End(xlUp).Offset(1)
End If
ActiveCell.Offset(1, 0).Select
Loop
Application.ScreenUpdating = True
End Sub
Es ist so schwer zu verstehen, um zu versuchen, was die unendliche Schleife verursacht -Das ist, warum Excel friert, soll es nicht aus der Schleife sein, können Sie versuchen, um zu sehen, was tut F8 drücken und sehen, wo es neigt dazu, niemals zu enden, gemäß der Logik hätte es beim ersten leeren Wert ausgehen müssen, scheint es aber nicht zu sein. Es scheint auch, dass Ziel ein Fehler ist, versuchen Sie, einen Bereich festzulegen? Wenn dies der Fall ist, müssen Sie "Ziel festlegen" anstelle von "Ziel" verwenden. – Sgdva
Sobald "Gefunden" auf "Wahr" gesetzt ist, wird es nie wieder auf "Falsch" zurückgesetzt. Dies macht es bedeutungslos. Warum musst du Found trotzdem verwenden? Es sieht so aus, als ob Sie seine Anwesenheit nur an einer Stelle testen. Warum schreiben Sie diese Zeilen also nicht direkt in die Bedingung "If ActiveCell.Value = NSName"? –
Auch - all Ihre Auswahl und Verrechnung ist nicht notwendig. Arbeite direkt von den fraglichen Zellen, ohne sie auszuwählen :) –