2017-07-10 3 views
0

Ich habe drei Blätter, Blatt1, Blatt2 und Blatt3.Das Programm läuft für eine lange Zeit

Ich versuche, Blatt 1, Spalte N und F in Blatt 3 zu kopieren.

Dann, mit dieser ID, schaue ich in Spalte A und sehen, ob sie übereinstimmen, Wenn ja, dann kopiere ich die Matched ID auf Blatt3.

Ich verwende aus diesem Grund den folgenden Code.

der Code funktionierte bis jetzt gut. Aber ich aktualisiere mein sheet2 heute Morgen, und aus irgendeinem Grund ist der Code Keep auf Ausführung für eine lange Zeit und immer noch bin ich nicht in der Lage, die Ausgabe zu bekommen, ich bin nicht in der Lage, den Grund dafür herauszufinden.

Ich habe versucht zu debuggen und die folgende Zeile wurde markiert.

If Not RNG Nothing Then

Außerdem bin ich eine Schaltfläche in dem Arbeitsblatt verwenden und die Funktionen aufrufen, wie

Anruf thisworkbook.lookup

In ähnlicher Weise habe ich 6 weitere Funktionen, die an diesen Knopf angeschlossen sind.

Hier ist der vollständige Code. Könnte mir jemand helfen, herauszufinden, was der Grund dafür ist.

Sub lookup() 
Dim totalrows As Long 
Dim Totalcolumns As Long 
Dim rng As Range 
Dim rng1 As Range 
Dim rng2 As Range 
Dim i As Long 
'Copy lookup values from sheet1 to sheet3 
Sheets("S1").Select 
totalrows = ActiveSheet.UsedRange.Rows.Count 
Totalcolumns = ActiveSheet.UsedRange.Columns.Count 
'TotalRows = 441 
'Totalcolumns = 392 
Range("N5:N" & totalrows).Copy Destination:=Sheets("s3").Range("E5") 
Range("F5:F" & totalrows).Copy Destination:=Sheets("s3").Range("H5") 
'Go to the destination sheet 
Sheets("s3").Select 
For i = 5 To totalrows 
'Search for the value on sheet2 
Set rng = Sheets("s2").UsedRange.Find(Cells(i, 5).Value) 
'If it is found put its value on the destination sheet 
If Not rng Is Nothing Then 
Cells(i, 6).Value = rng.Value 
Cells(i, 1).Value = rng.Offset(0, 1).Value 
Cells(i, 2).Value = rng.Offset(0, 2).Value 
Cells(i, 3).Value = rng.Offset(0, 3).Value 
Cells(i, 4).Value = rng.Offset(0, 9).Value 
Cells(i, 9).Value = rng.Offset(0, 10).Value 
Cells(i, 12).Value = rng.Offset(0, 6).Value 
Cells(i, 13).Value = rng.Offset(0, 5).Value 
Cells(i, 14).Value = rng.Offset(0, 8).Value 
End If 
Next 
End Sub 
+0

Ein paar Vorschläge: Add „Thisworkbook“ als Qualifier vor „Sheets“, wo Sie die verschiedenen Blattnamen auswählen. Dies stellt sicher, dass es nicht versucht, mit dem ActriveWorkbook zu arbeiten (es sollte nicht ...) Hat das Arbeitsblatt viele Formeln? Sie könnten versuchen: 'Application.Calculation = xlManual' am Anfang und' Application.Calculation = xlAutomatic' am Ende. Sie können auch am Anfang "application.screenupdating = false" und am Ende "application.screenupdating = true" ausprobieren. Diese Dinge beschleunigen VBA-Routinen auf sehr großen Tabellen, die viel Zeit für die Berechnung benötigen. – ainwood

+0

@ainwood ya, was sind die Vorschläge? – Mikz

+0

Sieht so aus, als könnten Sie den VBA durch ein paar SVERWEIS-Formeln ersetzen, haben Sie das berücksichtigt? – jkpieterse

Antwort

0

Das Problem wurde dadurch verursacht, dass der UserdRange des Arbeitsblatts S1 weit über seine wahre Größe hinausging. Problem gelöst von:

  1. Suchen Sie die letzte Zeile in Ihrer Tabelle S1, die Daten enthält.
  2. Wählen Sie die Zelle unter dieser Zeile aus.
  3. Drücken Sie Strg + Umschalt + Ende auf Ihrer Tastatur.
  4. Klicken Sie mit der rechten Maustaste in diesen Bereich und wählen Sie Löschen.
  5. Wählen Sie Löschen Gesamte Zeilen.
  6. Datei speichern
Verwandte Themen