7.8k Aufrufe
Gefragt in Tabellenkalkulation von vbalehrling Einsteiger_in (37 Punkte)
Hallo ihr helfenden !

Ich habe ein Problem mit Leerzellen. Ich habe einen Code, der im Range alle Werte einer Zelle kopiert (Arbeitsblatt1) und diese in Arbeitsblatt2 ab der letzten freien Zeile einfügt. In Arbeitsblatt 1 gibt es aber Formeln, die nicht kopiert werden sollen. Dank dieses Forums hat man meinen Code richtig umgeschrieben.
Jetzt aber zu dem Problem.
Im Range (10 Zeilen) werden nicht immer alle gebraucht. Diese bleiben quasi leer.

Wie muss der Code aussehen, damit dieser die leeren Zeilen/ Zellen nicht mitkopiert ???

Denn im Arbeitsblatt2 merkt sich Excel trotz des Codes, dass in bestimmten Zellen Formeln standen.
Damit entsteht folgender Fehler:
Beim nächsten Kopiervorgang via VBA fügt Excel den zu kopierenden Zellinhalt nicht in die nächste freie Zeile, sondern irgendwie merkt sich Excel,dass dort mal Formeln standen und lässt leere Zellen einfach frei.

Mein Code:

Private Sub CommandButton1_Click()
Dim lRow As Long
With Worksheets("Wareneingang")
lRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
Range("A10:O19").Copy
.Cells(lRow, 1).PasteSpecial Paste:=xlValues
End With
Application.CutCopyMode = False

Dim strText As String
strText = " Daten kopiert"
MsgBox strText
End Sub

15 Antworten

0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo,

also ich habe nun mehrmals Deine Frage durchgelesen und komme irgendwie nicht dahinter, was genau Du erreichen möchtest.

Was meinst Du mit

Im Range (10 Zeilen) werden nicht immer alle gebraucht. Diese bleiben quasi leer.

Mit Deinem Makro wird doch nur eine Zeile (Zeile 10) von Spalte A bis O kopiert. Warum nun 10 Zeilen?

Das

Denn im Arbeitsblatt2 merkt sich Excel trotz des Codes, dass in bestimmten Zellen Formeln standen.
Damit entsteht folgender Fehler:
Beim nächsten Kopiervorgang via VBA fügt Excel den zu kopierenden Zellinhalt nicht in die nächste freie Zeile, sondern irgendwie merkt sich Excel,dass dort mal Formeln standen und lässt leere Zellen einfach frei.


verstehe ich überhaupt nicht.

Du musst das alles etwas besser erklären oder eine Beispieldatei einstellen, damit man es besser vesteht.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von vbalehrling Einsteiger_in (37 Punkte)
Hallo Oliver,

warum er 10 Zeilen kopiert, das weiß ich auch nicht !

Wie und wo kann ich die Datei hochladen?
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo,

ich nochmal. Das mit

Mit Deinem Makro wird doch nur eine Zeile (Zeile 10) von Spalte A bis O kopiert. Warum nun 10 Zeilen?

nehme ich zurück. Ich hätte vielleicht meine Brille etwas putzen sollen, dann hätte ich gesehen, dass der Bereich von Zeile 10 bis 19 kopiert wird.
Aber trotzdem benötigt man die Kriterien, was bei auftreten einer leeren Zelle nun passieren soll. Wenn eine Zelle leer, dann die gesamte Zeile nicht kopieren oder nur wenn die gesamte Zeile leer ist?

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo,

hochladen kannst Du z.B. bei http://www.file-upload.net/ ] und den Link, den Du erhälst, musst Du uns hier mitteilen.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von vbalehrling Einsteiger_in (37 Punkte)
Hallo Oliver,

nur wenn die gesamte Zeile leer ist, soll das Makro diese Zelle nicht kopieren.

MfG
0 Punkte
Beantwortet von vbalehrling Einsteiger_in (37 Punkte)
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo,

nachfolgender VBA-Code sollte das machen, was Du Dir vorgestellt hast.

Tausche den VBA-Code gegen Deinen alten Code aus.
Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.

Private Sub CommandButton1_Click()
Dim lRow As Long
Dim intRow As Integer
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With

On Error GoTo ERRORHANDLER

With Worksheets("Wareneingang")
For intRow = 10 To 19
If WorksheetFunction.CountBlank(Rows(intRow)) = 256 _
Or WorksheetFunction.CountBlank(Rows(intRow)) = 16384 = False Then
lRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
Range("A" & intRow & ":O" & intRow).Copy
.Cells(lRow, 1).PasteSpecial Paste:=xlValues
End If
Next
End With
Application.CutCopyMode = False

MsgBox " Daten kopiert"
ERRORHANDLER:
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
End Sub


MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo,

ich nochmal. In meinem Coe aus AW7 war ein kleiner Fehler. Nachfolgend der richtige Code.

Private Sub CommandButton1_Click()
Dim lRow As Long
Dim intRow As Integer
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With

On Error GoTo ERRORHANDLER

With Worksheets("Wareneingang")
For intRow = 10 To 19
If WorksheetFunction.CountBlank(Rows(intRow)) < 256 _
Or WorksheetFunction.CountBlank(Rows(intRow)) < 16384 Then
lRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
Range("A" & intRow & ":O" & intRow).Copy
.Cells(lRow, 1).PasteSpecial Paste:=xlValues
End If
Next
End With
Application.CutCopyMode = False

MsgBox " Daten kopiert"
ERRORHANDLER:
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
End Sub


MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von vbalehrling Einsteiger_in (37 Punkte)
Hallo Oliver,


erstmal vielen vielen vielen Dank für deine Mühe!
Ich habe beide Varianten probiert, aber leider kopiert er auch die leeren Zellen mit und kopiert neue Einträge weiterhin im ersten Arbeitsblatt nach den besagten 11 Zeilen.

Liegt es evtl. an die Excel-Version? Ich habe hier Office 2000.

Wäre sehr nett, wenn du noch ein paar Lösungsansätze im "Ärmel" hättest.
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo,

nein, das liegt nicht an Deiner Excelversion, sondern eher daran, dass ich Deine Datei nicht heruntergeladen hatte und mir daher entgangen ist (obwohl Du es geschrieben hattest) in Spalte A eine Formel vorkommt und dann kann meine Lösung nicht funktionieren. Aber das kriegen wir schon hin. Dauert nur ein wenig, da ich jetzt erst mal etwas anderes zu Ende führen muss.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
...