Endlosschleife Warum?

Hallo, habe eine Frage das ist ein Modul namens kopieren, warum hört er nicht auf, wenn Zelle leer ist, die Kriterien müssten aber stimmten.

Bitte um Hilfe.

Danke

Code___________________________________________________________-
Sub kopieren()
'Variablen deklarieren
Dim zaehler As Integer
zaehler = 0
'Abfage

'Auf Tabelle1 springen
Sheets(„Kriterien“).Activate
Cells(6, 2).Select
Do Until IsEmpty(ActiveCell.Value)
ActiveCell.Copy
Sheets(„Entscheidungsmatrix“).Activate
Cells(11 + zaehler, 2).Select
ActiveCell.PasteSpecial
zaehler = zaehler + 1
Sheets(„Kriterien“).Activate
Cells(6 + zaehler, 2).Select
Loop

End Sub

Hallo, habe eine Frage das ist ein Modul namens kopieren,
warum hört er nicht auf, wenn Zelle leer ist, die Kriterien
müssten aber stimmten.

k.A.

Hallo Wischnor,

probiere mal dieses

Sub kopieren()
Dim Zei
Zei = Sheets("Kriterien").Cells(Rows.Count, 2).End(xlUp).Row
Sheets("Kriterien").Range(Cells(6, 2), Cells(Zei, 2)).Copy Destination:=Sheets("Entscheidungsmatrix").Cells(11, 2)
End Sub

Gruß
Reinhard

Moin, Wischnor,

warum hört er nicht auf, wenn Zelle leer ist

es gibt keinen Grund, die Schleife zu beenden. Auszug aus der VBA-Hilfe:

IsEmpty gibt den Wert True zurück, wenn die Variable nicht initialisiert ist oder explizit auf Empty gesetzt wurde, andernfalls wird False zurückgegeben. Die IsEmpty-Funktion gibt immer den Wert False zurück, wenn Ausdruck mehrere Variablen enthält. IsEmpty gibt nur für Variant-Werte sinnvolle Informationen zurück.
Gruß Ralf

Hallo,

bevor ich zu deiner Frage komme ein paar Anmerkungen.
Es ist völlig überflüssig, die verschiedenen Tabellen ständig zu activieren und zu selektieren. Die kostet nur überflüssig Zeit.
Ich nehme an, dass du erst ein Makro aufgezeichnet und das dann bearbeitet hast. Da spricht nichts gegen, aber

Sheets(„Entscheidungsmatrix“).Activate
Cells(11 + zaehler, 2).Select
ActiveCell.PasteSpecial

kann man auch schreiben als

Sheets(„Entscheidungsmatrix“).Cells(11 + zaehler, 2).PasteSpecial

und das geht viel schneller.
Zum anderen hat Reinhard schon einen sehr guten Vorschlag unterbreitet. Kopiere nicht einzelne Zellen, sondern immer ganze Blöcke -> nochmal schneller.
Ich hätte im übrigens

r=Sheets(„Kriterien“).Range(Cells(6, 2), Cells(6, 2).End(xlDown))
r.Copy Destination:=Sheets(„Entscheidungsmatrix“).Cells(11, 2)

benutzt :wink:

Jetzt zu deiner eigendlichen Frage.
Der Einwand von drambeldier kan ich nicht gelten lassen, denn der Ausdruck, den du mit IsEmpty abfragst ist zwar initialisiert, kann aber trotzdem auf den Wert Empty gesetzt sein.
Da er das offensichtlich nicht ist, liegt der Verdacht nahe, dass die Zellen unterhalb der einträge, die du haben willst nicht wirklich leer (im Excel-Sinne) sind. Z.B. könnte ein Leerzeichen drinnstehen.
(In dem Fall könnten die Lösungen von Reinhard und mir zu unerwünschten Ergebnissen führen.)
Das kann ich natürlich nicht beurteilen.
Sonst kannst du den Code ja auch mal Schrittweise im Debugger durchlaufen lassen und dir anzeigenlassen, was ActiveCell.value für einen Wert annnimmt.

Gruß Yelmalio

Hallo,

vielen Dank für eure Antworten.
Leider funktioniert das nicht! Bei

Sheets(„Kriterien“).Range(Cells(6, 2), Cells(Zei, 2)).Copy Destination:=Sheets(„Entscheidungsmatrix“).Cells(11, 2)

bekomme ich immer einen Fehler Laufzeitfehler 1004 Objektdefinierter Fehler. Weiss jemand wie ich das beheben kann, habe es schon mit Worksheets versucht aber ohne Erfolg.

Ihr habt recht, es ist besser einen ganzen Block auf einmal zu kopieren, aber ich habe es noch nicht erwähnt, ich muss die einzelnen Zellen unterscheiden. Ob Sie zur Gruppe 1 oder zur Gruppe 2 gehören.

Gibt es dafür auch ein optimales Rezept?

Vielen Dank.

Viele Grüße
Wischnor

PS: Super Board. Muss ich echt sagen!!

Hi Wischnor,

Leider funktioniert das nicht! Bei

Sheets(„Kriterien“).Range(Cells(6, 2), Cells(Zei, 2)).Copy
Destination:=Sheets(„Entscheidungsmatrix“).Cells(11, 2)

bekomme ich immer einen Fehler Laufzeitfehler 1004
Objektdefinierter Fehler. Weiss jemand wie ich das beheben
kann, habe es schon mit Worksheets versucht aber ohne Erfolg.

Blattschutz? Vebundene Zellen?

Ihr habt recht, es ist besser einen ganzen Block auf einmal zu
kopieren, aber ich habe es noch nicht erwähnt, ich muss die
einzelnen Zellen unterscheiden. Ob Sie zur Gruppe 1 oder zur
Gruppe 2 gehören.

Was für Gruppen?
Lade mal eine Beispielmappe hoch, FAQ:2861

Gruß
Reinhard

Hey, ich habe es hinbekommen, vielleicht als info ich arbeite mit Excel 2007, ist etwas pingelig wahrscheinlich

Mein code sieht folgendermaßen aus

Set wks1 = Worksheets(„T1“)
Set wks2 = Worksheets(„T2“)
If wks1.Cells(6 + i, muss) „“ Then
wks1.Cells(6 + i, 2).Copy _
Destination:=wks2.Cells(11 + i_Entscheidungsmatrix, 2)
i_Entscheidungsmatrix = i_Entscheidungsmatrix + 1
End If

Das funktioniert ganz gut.
Problem ist, er kopiert die ganze Zellen also auch Rand usw. kann ich das irgendwie verhindern, das er nicht die Ränder mitkopiert??

Vielen Dank

Wischnor

Hi Wischnor,

Hey, ich habe es hinbekommen, vielleicht als info ich arbeite
mit Excel 2007, ist etwas pingelig wahrscheinlich

sag bitte die Version immer mit dazu.

Problem ist, er kopiert die ganze Zellen also auch Rand usw.
kann ich das irgendwie verhindern, das er nicht die Ränder
mitkopiert??

Sub tt()
Set wks1 = Worksheets("T1")
Set wks2 = Worksheets("T2")
If wks1.Cells(6 + i, muss) "" Then
 wks2.Cells(11 + i\_Entscheidungsmatrix, 2) = wks1.Cells(6 + i, 2).Value
 i\_Entscheidungsmatrix = i\_Entscheidungsmatrix + 1
End If
End Sub

Gruß
Reinhard

Super funktioniert.

Vielen Dank.

PS: Macht das echt so einen gewaltigen Unterschied zwischen Word 2002 und 2007

Gruß
Wischnor

PS: Macht das echt so einen gewaltigen Unterschied zwischen
Word 2002 und 2007

Hi Wischnor,

gewaltig ist relativ, sie sind halt nicht 100% kompatibel in Excel, bei 1000 zeilen Vba-Code haste halt erstmal Beschäftigung alles durchzuprüfenm ggfs. abzuändern.

Gruß
Reinhard