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

VBA Wenn Zelle belegt dann nächste...

Forumthread: VBA Wenn Zelle belegt dann nächste...

VBA Wenn Zelle belegt dann nächste...
03.05.2019 10:27:22
Erik
Hallo zusammen,
ich habe folgenden Code:
Sub Rueckgabeantrag()
Dim Rueckgabe As String
Dim intLZ As Integer
Dim i As Integer
Dim j As Integer
Dim Finish As String
Dim Menge As String
Dim Zähler As Long
With Sheets("Kundenteile")
intLZ = .Cells(Rows.Count, 16).End(xlUp).Row
For i = 1 To intLZ
If .Cells(i, 16).Value = "a" Then
Zähler = Zähler + 1
Rueckgabe = .Range("p" & i).Value
For j = i To intLZ
If Rueckgabe = .Range("p" & j).Value Then
Finish = .Cells(j, 5)
Worksheets("Tabelle1").Cells(19, 2) = Finish
Menge = .Cells(j, 7)
Worksheets("Tabelle1").Cells(19, 4) = Menge
.Cells(j, 16).ClearContents
Worksheets("Tabelle1").Visible = True
End If
Next j
End If
Next i
End With
If Zähler = 0 Then
MsgBox "Es wurden keine Teile selektiert"
Else
MsgBox "Rückgabeantrag erfolgreich gesendet"
End If
End Sub

Wenn allerdings die Zeile 19 bereits belegt ist soll der Code die nächste Überprüfung in Zeile 20 schreiben usw
bis Zeile 28.
Wenn mehr als 10 Zellen selektiert sind müsste eine Fehlermeldung kommen.
Vielen Dank
und Gruß
Erik
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Wenn Zelle belegt dann nächste...
03.05.2019 16:36:09
Erik
Hallo nochmal,
habe den Code wie folgt geändert:
Sub Rueckgabeantrag()
Dim Rueckgabe As String
Dim intLZ As Integer
Dim i As Integer
Dim j As Integer
Dim Finish As String
Dim Menge As String
Dim Zähler As Long
Dim Zeile As String
Zeile = 18
With Sheets("Kundenteile")
intLZ = .Cells(Rows.Count, 16).End(xlUp).Row
For i = 1 To intLZ
If .Cells(i, 16).Value = "a" Then
Zähler = Zähler + 1
Rueckgabe = .Range("p" & i).Value
For j = i To intLZ
If .Cells(Zeile, 2) > "" Then Zeile = Zeile + 1
If Rueckgabe = .Range("p" & j).Value Then
Finish = .Cells(j, 5)
Worksheets("Tabelle1").Cells(Zeile, 2) = Finish
Menge = .Cells(j, 7)
Worksheets("Tabelle1").Cells(Zeile, 4) = Menge
.Cells(j, 16).ClearContents
Worksheets("Tabelle1").Visible = True
End If
Next j
End If
Next i
End With
If Zähler = 0 Then
MsgBox "Es wurden keine Teile selektiert"
Else
MsgBox "Rückgabeantrag erfolgreich gesendet"
End If
End Sub
Funktioniert nun soweit bis auf die Abfrage ob mehr als 10 Teile selektiert sind.
Hier komme ich nun leider nicht mehr weiter.
Hat jemand einen Tipp?
Gruß
Erik
Anzeige
AW: VBA Wenn Zelle belegt dann nächste...
06.05.2019 15:35:49
Daniel
Hallo Erik,
als Ansatz:

For x = 19 To 28
If Worksheets("Tabelle1").Cells(x, 2) = "" Then
Worksheets("Tabelle1").Cells(x, 2) = .Cells(j, 5)
Worksheets("Tabelle1").Cells(x, 4) = .Cells(j, 7)
Exit For
End If
If x = 28 Then MsgBox "Mehr als 10 Zeilen selektiert!"
Next x
Unter der Annahme, dass die Bedingung "Bx ist leer" ausreicht. Falls diese befüllt, Dx aber nicht befüllt sein kann, bräuchtest du 2 For Schleifen.
Gruß
Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

VBA: Zelleninhalt prüfen und nächste leere Zelle finden


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und aktiviere den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu:

    • Rechtsklick auf "VBAProject (DeineDatei.xlsm)" > Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:

    Sub Rueckgabeantrag()
       Dim Rueckgabe As String
       Dim intLZ As Integer
       Dim i As Integer
       Dim j As Integer
       Dim Finish As String
       Dim Menge As String
       Dim Zähler As Long
       Dim Zeile As Integer
       Zeile = 18
    
       With Sheets("Kundenteile")
           intLZ = .Cells(Rows.Count, 16).End(xlUp).Row
           For i = 1 To intLZ
               If .Cells(i, 16).Value = "a" Then
                   Zähler = Zähler + 1
                   Rueckgabe = .Range("p" & i).Value
                   For j = i To intLZ
                       If .Cells(Zeile, 2) <> "" Then Zeile = Zeile + 1
                       If Rueckgabe = .Range("p" & j).Value Then
                           Finish = .Cells(j, 5)
                           Worksheets("Tabelle1").Cells(Zeile, 2) = Finish
                           Menge = .Cells(j, 7)
                           Worksheets("Tabelle1").Cells(Zeile, 4) = Menge
                           .Cells(j, 16).ClearContents
                           Worksheets("Tabelle1").Visible = True
                       End If
                   Next j
               End If
           Next i
       End With
    
       If Zähler = 0 Then
           MsgBox "Es wurden keine Teile selektiert"
       Else
           If Zähler > 10 Then
               MsgBox "Mehr als 10 Teile selektiert!"
           Else
               MsgBox "Rückgabeantrag erfolgreich gesendet"
           End If
       End If
    End Sub
  4. Anpassungen vornehmen:

    • Stelle sicher, dass die Arbeitsblätter "Kundenteile" und "Tabelle1" existieren.
  5. Code ausführen:

    • Drücke F5, um das Makro auszuführen.

Häufige Fehler und Lösungen

  • Problem: Der Code funktioniert nicht.

    • Lösung: Überprüfe, ob die Arbeitsblätter korrekt benannt sind und ob die Spalten die erwarteten Daten enthalten.
  • Problem: Fehlermeldung bei mehr als 10 selektierten Teilen.

    • Lösung: Stelle sicher, dass die Abfrage für die Anzahl der selektierten Teile korrekt implementiert ist. Der Code sollte wie oben beschrieben angepasst werden.

Alternative Methoden

Eine alternative Methode zur Überprüfung der nächsten leeren Zelle könnte die Verwendung von Find-Methoden sein, um effizienter durch die Zellen zu navigieren. Dies kann die Performance verbessern, besonders bei großen Datenmengen.


Praktische Beispiele

Nehmen wir an, du hast eine Liste von Rückgabeanträgen in "Kundenteile". Das oben genannte Makro sucht nach dem Buchstaben "a" in der 16. Spalte und schreibt die entsprechenden Werte in die erste freie Zelle in "Tabelle1", beginnend bei Zeile 19.

Wenn du mehr als 10 Rückgabeanträge hast, zeigt das Makro eine Warnmeldung an.


Tipps für Profis

  • Verwende Option Explicit am Anfang deines Moduls. Dies zwingt dich, alle Variablen zu deklarieren, was zu weniger Fehlern führt.

  • Dokumentiere deinen Code mit Kommentaren, um die Wartung zu erleichtern.

  • Nutze die Möglichkeit von Fehlerbehandlung, um unerwartete Fehler abzufangen. Beispiel:

    On Error GoTo Fehlerbehandlung

FAQ: Häufige Fragen

1. Wie kann ich den Code anpassen, um mehr als 10 Rückgabeanträge zu verarbeiten? Du kannst den Code anpassen, indem du die Zeilen von 19 bis zu einer höheren Zahl iterierst, z. B. 40. Achte darauf, die Logik entsprechend zu ändern, um sicherzustellen, dass keine Zellen überschrieben werden.

2. Gibt es eine Möglichkeit, die Rückgabeanträge in einer bestimmten Reihenfolge zu sortieren? Ja, du kannst die Rückgabeanträge vor der Verarbeitung sortieren. Das kannst du entweder manuell in Excel tun oder ein zusätzliches Sortiermakro schreiben.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige