2016-07-01 11 views
1

Um Schleifen der effizienteste Weg, um eine Schleife durch eine große Stichprobe von Zeilen zu erreichen, habe ich den folgenden Code in Sheet3 von this answer inspiriert:Laufzeitfehler ‚1004‘, wenn sie durch eine große Stichprobe von Zeilen

Sub Testing_Data() 
Dim k As Long, S2 As Worksheet, VArray 

Application.ScreenUpdating = False 
Set S2 = ThisWorkbook.Sheets("Sheet2") 
VArray = Range("A:A" & Cells(Rows.Count, "A").End(xlUp).Row).Value 

For k = 2 To UBound(VArray, 1) 
    S2.Cells(k, "B") = VArray(k, 1)/100 
    S2.Cells(k, "C") = VArray(k, 1) * S2.Cells(k, "B") 
Next 
End Sub 

Nach dem Ausführen des Codes, der Laufzeitfehler '1004': Application-definierte oder objektdefinierte Fehler aufgetreten. Wie man es repariert?

+0

Welche Zeile gibt den Fehler? An dem Punkt, an dem der Fehler auftritt; Was sind die Werte Ihrer Variablen? –

+0

@ destination-data Es zeigt auf keine Zeilen. –

+1

@ Anastasiya-Romanova 秀 Wenn ein Problem mit Ihrem Code vorliegt, können Sie ihn Schritt für Schritt mit der Taste F8 durchlaufen. So können Sie sehen, welche Zeilen ausgeführt werden können und an welcher Stelle der Fehler ausgelöst wird. – Carrosive

Antwort

1

nach dem Code schrittweise durch die Fehler auf der VArray = Linie, hier zwei Dinge:

  1. Range("A:A"... sollte stattdessen sein Range("A"... wie Sie eine Zeile angeben und nicht die gesamte Spalte von oben nach unten von der Auswahl gesamtes Blatt.
  2. Ein Range mehrerer aufeinanderfolgender Zellen kann mit Range(FirstCell, LastCell) referenziert werden. Ihr Code wählt nur die untere Zelle aus. Wenn Sie also "A1", am Anfang Ihrer Bereichsreferenz eingeben, werden alle Zellen ausgewählt, die Sie benötigen.

Sub Testing_Data() 
Dim S2 As Worksheet, VArray() As Variant 

Application.ScreenUpdating = False 
Set S2 = ThisWorkbook.Sheets("Sheet2") 
    VArray = Range("A1", "A" & Cells(Rows.Count, "A").End(xlUp).Row) 

For k = 2 To UBound(VArray) 
    S2.Cells(k, "B") = VArray(k, 1)/100 
    S2.Cells(k, "C") = VArray(k, 1) * S2.Cells(k, "B") 
Next 
End Sub 
+0

** Kompilierfehler: Ungültige oder nicht qualifizierte Referenz ** –

+0

@ Anastasiya-Romanova 秀 Ich habe meine Antwort mit ein paar zusätzlichen Anpassungen an Ihrem Code aktualisiert. – Carrosive

+0

Das funktioniert gut. (+1) –

0
VArray = Range("A:A" & Cells(Rows.Count, "A").End(xlUp).Row).Value 

referenziert nicht Sheet2 sondern das aktuell angezeigte Blatt. Verwenden

With S2 
    VArray = .Range("A1:A" & .Cells(Rows.Count, "A").End(xlUp).Row).Value 
End With 

Hinweis der Wechsel von "A: A" bis "A : A". Das Objekt Range benötigt eine Anfangszelle und eine Endzellenreferenz, die durch einen Doppelpunkt getrennt sind.

Sie sollten aus Leistungsgründen auch die folgenden Anweisungen in den Block With eingeben. Auf diese Weise würde der Verweis auf das Blatt nur einmal und nicht mehrfach gesucht.

+0

Der Fehler trat immer noch –

+0

verpasste ein zusätzliches '.' vielleicht vor dem' rows.count' benötigt? – Dave

+0

Dies hat das gleiche Problem wie die Frage: 'Bereich (" A: A100 ")' (zum Beispiel) ist kein gültiger Bereich ... –

1

user1016274 ist Recht müssen Sie entweder S2 hinzufügen für Ihren Bereich und Zellen

VArray = S2.Range("A:A" & S2.Cells(Rows.Count, "A").End(xlUp).Row).Value 

oder seinen Rat folgen:

With S2 
    VArray = .Range("A:A" & .Cells(Rows.Count, "A").End(xlUp).Row).Value 
End With 

was sehr nützlich ist. es spart Zeit und Platz, wenn Sie mehrere Anweisungen haben.

Der andere Fehler ist in Ihrem Range. Sie müssen 2 Zellen durch ein Komma getrennt definieren, hier definieren Sie die Spalte A und die Zelle in der letzten Zeile getrennt durch &. Versuchen Sie folgendes:

VArray = Range(S2.Cells(1, 1), S2.Cells(Rows.Count, "A").End(xlUp)) 

EDIT: Als ich dies ausführen, funktioniert es gut für mich:

Sub Testing_Data() 
Dim k As Long, S2 As Worksheet, VArray 

Application.ScreenUpdating = False 
Set S2 = ThisWorkbook.Sheets("Sheet2") 

VArray = Range(S2.Cells(1, 1), S2.Cells(Rows.Count, "A").End(xlUp)).Value 

For k = 2 To UBound(VArray, 1) 
    S2.Cells(k, "B") = VArray(k, 1)/100 
    S2.Cells(k, "C") = VArray(k, 1) * S2.Cells(k, "B") 
Next 
End Sub 
+0

Mit Ihrem Code oder user1016274, ** Der Laufzeitfehler '1004': Anwendungsdefinierter oder objektdefinierter Fehler aufgetreten ** tritt immer noch auf –

+0

Es funktioniert für mich Ich habe gerade meine Antwort mit dem ganzen Code bearbeitet Lass mich wissen, ob es noch immer nicht funktioniert –

+0

Ich schwöre, der Fehler tritt immer noch unter Verwendung Ihrer aktualisierten Antwort auf –

Verwandte Themen