Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Code Zeilen überspringen

Forumthread: VBA Code Zeilen überspringen

VBA Code Zeilen überspringen
25.11.2021 10:46:38
Carl
Hallo Zusammen,
ich habe ein kleines Problem mit einem Code. Der Code kopiert aus einer Tabelle bestimmte Ausschnitte in eine andere Tabelle in einer Arbeitsmappe.
Da nicht alle Zelle aus der ersten Tabelle gefüllt sind, sollen Leerzellen mit dem darüber stehenden Wert gefüllt werden.
Jetzt habe ich aber das Problem das für die nächste Zeit keine Leerzeilen in der Ausgangstabelle vorhanden sind. Dadurch kommt es zu einem Laufzeitfehler, der wieso auch immer sogar übersprungen wird, wenn ich das Marko komplett durchlaufen lasse sondern nur wenn ich Einzelschritte prüfe.
Das Problem allerdings ist das alle Zellen in der zweiten Tabelle mit den Kopfzeilen der Tabelle überschrieben werden?
Wie kann ich prüfen, ob Tabellenzeilen leer sind, wenn ja, er diese auswählen soll und dann diese mit dem Wert darüber befüllt.
Da ja der Code beim Ablaufen keine Fehlermeldung generiert, ist eine On Error resume next Anweisung nicht hilfreich, bzw. es müssten ja eigentlich zwei Code Zeilen übersprungen worden.
P.S. ich weiß der Code ist nicht super und wahrscheinlich zu komplex geschrieben, aber ich befinde mich am Anfang und passe die Markos nach Aufzeichnung an.
Windows("KD3-6.xlsm").Activate
Sheets("KD_6").Select
Range("KD6er[[Auftrag]:[Artikelcode]]").Select
Application.CutCopyMode = False
Selection.Copy
Windows("KW47.xlsm").Activate
Sheets("6er").Select
Range("_6erProjekte[[Projekt]:[Artikelcode]]").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("KD3-6.xlsm").Activate
Range("KD6er[[Bestellmenge]:[Name]]").Select
Application.CutCopyMode = False
Selection.Copy
Windows("KW47.xlsm").Activate
Range("_6erProjekte[[Bestellmenge]:[Name]]").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("_6erProjekte[[Projekt]:[Artikelcode]]").Select
Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
''# On Error Resume Next (bringt hier ja nix)
Selection.SpecialCells(xlCellTypeBlanks).Select
Application.CutCopyMode = False
Selection.FormulaR1C1 = "=R[-1]C"
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Code Zeilen überspringen
25.11.2021 10:49:21
Hajo_Zi

Zellen ausfüllen mit Wert davor
Range("a:a").SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
Oder als Wert
With Range("a:a").SpecialCells(xlCellTypeBlanks)
.FormulaR1C1 = "=R[-1]C"
.Value = .Value
End With
GrußformelHomepage
In diesem Forum bekomme nur selten eine Mailbenachrichtigung, weitere Antworten sind zufällig.
Anzeige
AW: vorher zaeheln ob Leerzellen
25.11.2021 11:28:10
hary
Moin
Du must bei "SpecialCells(xlCellTypeBlanks)" vorher zaehlen ob Leerzellen vorhanden sind.
z.B. so

With Selection
If Application.CountBlank(Range(.Address)) Then '--Leerzellen zaehlen
.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C" '--wenn ja
End If
End With
gruss hary
Anzeige
AW: VBA Code Zeilen überspringen
25.11.2021 12:42:50
GerdL
Moin Carl,
teste mal.

Sub Unit()
Dim wbkQ As Workbook: Set wbkQ = Workbooks("KD3-6.xlsm")
Dim wshQ As Worksheet: Set wshQ = wbQ.Worksheets("KD_6")
Dim wbkZ As Workbook: Set wbkZ = Workbooks("KW47.xlsm")
Dim wshZ As Worksheet: Set wshZ = wbZ.Worksheets("6er")
Dim rngA As Range
wshQ.Range("KD6er[[Auftrag]:[Artikelcode]]").Copy
wshZ.Range("_6erProjekte[[Projekt]:[Artikelcode]]").PasteSpecial xlPasteValues
Application.CutCopyMode = False
wshQ.Range("KD6er[[Bestellmenge]:[Name]]").Copy
wshZ.Range("_6erProjekte[[Bestellmenge]:[Name]]").PasteSpecial xlPasteValues
Application.CutCopyMode = False
With wshZ.Range("_6erProjekte[[Projekt]:[Artikelcode]]")
.Replace What:=" ", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
If WorksheetFunction.Count(.Cells) > 0 Then
For Each rngA In .SpecialCells(xlCellTypeBlanks).Areas
rngA.FormulaR1C1 = "=R[-1]C"
rngA.Value = rngA.Value
Next
End If
End With
Set wshZ = Nothing: Set wbkZ = Nothing: Set wshQ = Nothing: Set wbkQ = Nothing
End Sub
Gruß Gerd
Anzeige
AW: VBA Korrektur
25.11.2021 13:29:00
GerdL
WorksheetFunction.CountBlank statt WorksheetFunction.Count
Gruß Gerd
AW: VBA Code Zeilen überspringen
25.11.2021 17:46:51
Carl
Hallo Zusammen,
danke für die schnelle Antworten. Für den schnellen Einsatz ist die Lösung von hary top und genau das was ich suche.
Den Ansatz von GerdL muss ich mir mal in Ruhe anschauen.
;
Anzeige
Anzeige

Infobox / Tutorial

VBA Code Zeilen Überspringen in Excel


Schritt-für-Schritt-Anleitung

  1. Arbeitsmappe und Tabellen aktivieren: Stelle sicher, dass die richtigen Arbeitsmappen und Tabellen aktiviert sind. Verwende dazu folgenden Code:

    Windows("KD3-6.xlsm").Activate
    Sheets("KD_6").Select
  2. Daten kopieren: Kopiere die relevanten Daten aus der Quelltabelle:

    Range("KD6er[[Auftrag]:[Artikelcode]]").Copy
    Windows("KW47.xlsm").Activate
    Sheets("6er").Select
    Range("_6erProjekte[[Projekt]:[Artikelcode]]").PasteSpecial Paste:=xlPasteValues
  3. Leerzeilen erkennen und füllen: Nutze SpecialCells um die Leerzeilen zu erkennen und diese mit dem Wert darüber zu füllen:

    With Selection
       If Application.CountBlank(.Cells) > 0 Then
           .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
           .SpecialCells(xlCellTypeBlanks).Value = .SpecialCells(xlCellTypeBlanks).Value
       End If
    End With
  4. Daten ersetzen: Verwende Replace, um unerwünschte Leerzeichen zu entfernen:

    Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart

Häufige Fehler und Lösungen

  • Laufzeitfehler bei leerer Auswahl: Wenn du versuchst, SpecialCells(xlCellTypeBlanks) zu verwenden, ohne dass Leerzellen vorhanden sind, kann dies zu einem Laufzeitfehler führen. Stelle sicher, dass du zuerst nach Leerzellen zählst:

    If Application.CountBlank(Range("A:A")) > 0 Then
       Range("A:A").SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
    End If
  • Alle Zellen werden mit Kopfzeilen überschrieben: Achte darauf, dass du die richtige Auswahl triffst und die Zellen korrekt referenzierst, bevor du Daten kopierst und einfügst.


Alternative Methoden

Eine alternative Methode, um Leerzeilen zu füllen, ist die Verwendung eines benutzerdefinierten VBA-Skripts, das die Logik in einer Schleife umsetzt:

Sub FillBlanks()
    Dim rng As Range
    Set rng = ActiveSheet.UsedRange

    Dim cell As Range
    For Each cell In rng
        If IsEmpty(cell) Then
            cell.Value = cell.Offset(-1, 0).Value
        End If
    Next cell
End Sub

Praktische Beispiele

Ein Beispiel für das Überspringen von Zeilen und das Füllen von Leerzellen könnte so aussehen:

Sub FillEmptyCells()
    Dim wsh As Worksheet
    Set wsh = ThisWorkbook.Worksheets("Sheet1")

    If Application.CountBlank(wsh.Range("A:A")) > 0 Then
        With wsh.Range("A:A").SpecialCells(xlCellTypeBlanks)
            .FormulaR1C1 = "=R[-1]C"
            .Value = .Value
        End With
    End If
End Sub

Tipps für Profis

  • Verwende On Error Resume Next: Um Fehler beim Ausführen der Codezeilen zu ignorieren, kannst du On Error Resume Next verwenden, aber sei vorsichtig, da dies auch andere Fehler ignoriert:

    On Error Resume Next
    ' Dein Code hier
    On Error GoTo 0 ' Fehlerbehandlung zurücksetzen
  • Debugging: Nutze die Debugging-Funktion in Excel VBA, um durch deinen Code zu gehen und Probleme schnell zu identifizieren.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass keine Laufzeitfehler auftreten? Verwende Application.CountBlank um zuerst die Anzahl der Leerzellen zu zählen, bevor du mit SpecialCells arbeitest.

2. Was bedeutet On Error Resume Next? Diese Anweisung erlaubt es dem Code, bei einem Fehler fortzufahren, anstatt eine Fehlermeldung anzuzeigen. Verwende sie jedoch mit Bedacht.

3. Wie kann ich Leerzellen in einer bestimmten Spalte füllen? Nutze With und SpecialCells wie in den obigen Beispielen gezeigt.

4. Welche Excel-Version benötige ich für diese Methoden? Die beschriebenen Methoden sind in Excel VBA ab Version 2007 verfügbar.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige