Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
644to648
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
644to648
644to648
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Makro arbeitet nicht richtig

Makro arbeitet nicht richtig
02.08.2005 19:39:43
Josef
Guten Tag zusammen,
habe mit unten stehenden Makro ein Problem, dass ich nicht lösen kann.
Ich möchte aus dem TB2 die Daten (Zeilen kpl.) in TB1 kopieren und anschl. in TB2 die kopierte Zeile löschen. Dass klappt auch alles, nur jede aus TB2 kopierte Zeile landet immer in Zeile 10 von TB1 und überschreibt die bereits vorhandene. Die erste Zeile soll zwar in Zeile 10 im TB1 kopiert werden aber die nächste in Zeile 11 usw.
Es wäre sehr nett von Euch, wenn mir dabei jemand helfen würde.
Option Explicit

Sub KopierenBedingung()
Dim Z1 As Integer, Z2 As Integer
Z2 = 10
For Z1 = Cells(65536, 2).End(xlUp).Row To 10 Step -1
If Cells(Z1, 9) > ("602000-") Then
Range(Cells(Z1, 1), Cells(Z1, 23)).Copy Destination:=Sheets("Tabelle1").Cells(Z2, 1)
Z2 = Z2 + 1
Rows(Z1).ClearContents
End If
Next Z1
End Sub

Vielen Dank schon mal
Gruß Josef

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro arbeitet nicht richtig
02.08.2005 20:52:19
Reinhard
Hi Josef,
Code sieht ok aus fürmich.
Zeilen immer als Long deklarieren, wegen 32xxx.
Was soll ("602000-") sein?
Gruß
Reinhard
AW: Makro arbeitet nicht richtig
02.08.2005 21:51:46
Josef
Hallo Reinhard,
wenn die Zahl 602000- überschritten wird, z.B. 602000-12345, wird genau diese Zeile nach Tabelle1 kopiert und anschliessend in TB2 gelöscht. Die Zahl 60200- steht in jeder Zeile
in Spalte 9.
Ich hoffe Du kannst etwas damit anfangen?
Gruß Josef
AW: Makro arbeitet nicht richtig
02.08.2005 22:36:55
Reinhard
Halo Josef,
ich sah so eine Konstellation noch nie, anscheinend funktioniert es ja.
Ich hätte es so gemacht:
If mid(Cells(Z1, 9),8) > 0 Then
bzw.
If cint(mid(Cells(Z1, 9),8)) > 0 Then

Gruß
Reinhard
Anzeige
AW: Makro arbeitet nicht richtig
02.08.2005 23:14:05
Josef
Hallo Reinhard,
Danke für den Tip, aber damit lösche ich mit einem Schlag ca. 500 Datensätze.
Habe mein Makro noch mal getestet und habe festgestellt, wenn mehrere Zeilen größer als 602000- sind, werden die entsprechenden Zeilen richtig übertragen und auch gelöscht. Nun kann es aber sein, dass nur eine Zeile größer als 602000- ist, wenn ich diese Zeile dann übertrage, wird der Inhalt der Zeile 10 im TB1, überschrieben.
Ich hoffe jetzt ist es verständlicher.
Gruß Josef
AW: Makro arbeitet nicht richtig
03.08.2005 07:41:46
Erich
Hallo Josef,
dein Makro läuft schon richtig: Es kopiert die betreffenden Zeilen ab Zielzeile 10 - ob da nun schon was drin stand oder nicht.
Du willst aber wohl auch, dass in Tabelle 1 keine Zeile überschrieben wird. Also muss das Makro auch schon beim Start die erste Zielzeile hochsetzen auf die erste Zeile ab der Zeile 10, die leer ist - das macht das erste unten angehängte Makro.
Wenn die viele Zeilen hast und die Zeilen mit ... > "600200-" blockweise auftreten, lässt sich das Kopieren erheblich beschleunigen - das macht das zweite Makro unten:
Option Explicit
Sub KopierenBedingung2()
Dim Z1 As Long, Z2 As Long                    'Integer in Long geändert
If IsEmpty(Sheets("Tabelle1").Cells(10, 9)) Then
Z2 = 10
Else
Z2 = Sheets("Tabelle1").Cells(10, 9).End(xlDown).Row + 1
End If
For Z1 = Cells(65536, 2).End(xlUp).Row To 10 Step -1
If Cells(Z1, 9) > "602000-" Then
If Z2 > 65536 Then
MsgBox "In Tabelle1 ist keine Zeile mehr frei.", vbCritical
Exit Sub
End If
Range(Cells(Z1, 1), Cells(Z1, 23)).Copy Destination:=Sheets("Tabelle1").Cells(Z2, 1)
Z2 = Z2 + 1
Rows(Z1).ClearContents
End If
Next Z1
End Sub
Sub KopierenBedingung3()
Dim Z1 As Long, Z2 As Long, rg As Range       'Integer in Long geändert
If IsEmpty(Sheets("Tabelle1").Cells(10, 9)) Then
Z2 = 10
Else
Z2 = Sheets("Tabelle1").Cells(10, 9).End(xlDown).Row + 1
End If
For Z1 = Cells(65536, 2).End(xlUp).Row To 10 Step -1
If Z2 > 65536 Then
MsgBox "In Tabelle1 ist keine Zeile mehr frei.", vbCritical
Exit Sub
End If
If Cells(Z1, 9) > "602000-" Then
Set rg = Range(Cells(Z1, 1), Cells(Z1, 23))
Do While Cells(Z1 - 1, 9) > "602000-"
Z1 = Z1 - 1
If Z2 + rg.Rows.Count - 1 >= 65536 Then
MsgBox "Nicht alle Zeile wurden übertragen.", vbCritical
Exit Do
End If
Set rg = Union(rg, Range(Cells(Z1, 1), Cells(Z1, 23)))
Loop
rg.Copy Destination:=Sheets("Tabelle1").Cells(Z2, 1)
Z2 = Z2 + rg.Rows.Count
rg.EntireRow.ClearContents
End If
Next Z1
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Erich, die Makros laufen richtig, nur ich nicht!
03.08.2005 10:59:42
Josef
Morgen Erich,
zuerst mal Danke für Deine Mühe und Arbeit, die Du für mich aufgebracht hast!
Das Du nicht hellsehen kannst, hab ich zur Kenntnis genommen.
Mit den Makros, kann ich zusätzlich noch einen anderen Bereich abdecken. Einfach Klasse.
Danke nochmal
Gruß Josef
Danke, Reinhard
03.08.2005 18:24:23
Josef
Hallo Reinhard,
möchte mich für Deine Arbeit und die beiden Tips bedanken.
Gruß
Josef

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige