Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

MsgBox Schleife
#1
Hallo Leute!

Ich hoffe ihr könnt mir mal wieder helfen (:
Ziel ist es, die Datensätze zu überprüfen, ob in den Spalten A & D-J leere Zellen enthalten sind (Zeile für Zeile)
Sollten welche enthalten sein, soll eine MsgBox erscheinen. Diese soll folgende Buttons enthalten:
Ja, Nein, Abbrechen.

Als Text soll folgender erscheinen:
"Leere Zeilen in"
- Nummer
- Ebene
- Level
Gibt es zum Beispiel in Spalte A eine leere Zelle, so erscheint
- Nummer
usw.
In der letzten Zeile steht dann:
"Möchten Sie dennoch weitermachen?"
Mit Button Ja wird "DieseArbeitsmappe" dann weiterdurchlaufen bzw. die Prozeduren.
Mit Nein wird die Arbeitsmappe geschlossen und mit Abbrechen wird die MsgBox geschlossen.

Bisher habe ich folgenden Ansatz, komme jedoch nicht weiter:

Code:
Sub Test()
    Dim LastRow As Long, Nums As Long
   
    With Sheets("tblOne")
   
        LastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
        Set r = Range(.Cells(2, 1), .Cells(LastRow, 1))
       
        If Application.Count(r) <> r.Cells.Count Then
            If MsgBox("Fehler in folgenden Elementen:", vbYesNoCancel, "Überprüfung der Datensätze")
           
                If MsgBox = vbYes Then
                ActiveWorkbook.
               
                If MsgBox = vbNo Then
                ActiveWorkbook.Close False
               
                If MsgBox = vbCancel Then
                   
        End If
       
    End With
   
End Sub

Wie man sieht, gibt es einige Lücken (:
Vielleicht habe ich auch komplett einen falschen Ansatz genommen.
Ich freue mich über jeden Beitrag!
Beste Grüße
Joshua
Antworten Top
#2
Moin Joshua!
Zitat:Vielleicht habe ich auch komplett einen falschen Ansatz genommen.

Warum filterst Du nicht einfach nach "Leere"?

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#3
(06.06.2017, 09:07)RPP63 schrieb: Moin Joshua!

Warum filterst Du nicht einfach nach "Leere"?

Gruß Ralf

Das ist nicht das Ziel (:

Dem Anwender soll gezeigt werden, dass noch leere Zellen in den entsprechenden Elementen enthalten sind.
Diese Daten werden im Vorfeld aus einem Tool exportiert.

Mit dieser Prozedur soll gezeigt werden, welche Elemente noch unvollständig sind.
Antworten Top
#4
Darfst Du ja gerne so machen. ;)
Ich als Anwender Deiner Datei würde Dich teeren und federn, wenn ich mich durch x MsgBoxes klicken müsste!
Welchen Sinn soll das haben?
Du darfst ja gerne per VBA filtern und Dir dann eine Box mit den gesammelten Ergebnissen anzeigen lassen, wenn Dir der normale Filter nicht smart genug erscheint.

Schließlich warst Du es, der um evtl. Alternativen gebeten hatte.  :19:

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#5
Noch eine Alternative:
Simple bedingte Formatierung der Leerzellen …
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#6
Es sollen ja nicht unzählige msgBoxen erscheinen (: vielleicht habe ich mich nicht subtil genug ausgedrückt.

Es soll insgesamt eine MsgBox erscheinen, welche die Elemente bzw. Spalten aufführt, wo leere Zellen enthalten sind.

"Es sind folgende Leere Elemente noch zu definieren:

- Nummer
- Ebene
- Status

Möchten Sie dennoch die Prozeduren durchlaufen lassen?

Ja, Nein, Abbrechen"
Antworten Top
#7
Hallöchen,

ich habe hier mal prinzipiell einen Lösungsansatz für den Aufbau des Meldungsstrings aufgezeigt.

Code:
Sub test()
Dim strMsg As String, iCnt%, r As Range
'Schleife ueber Spalten A und B
For iCnt = 1 To 2
  'Bereich von Zeile 1 bis zur letzten gefuellten Zeile setzen
  Set r = Range(Cells(1, iCnt), Cells(Rows.Count, iCnt).End(xlUp))
  'Wenn Leerzellen enthalten, dann
  If Application.CountBlank(r) Then
    'Meldungstext aufbauen
    strMsg = strMsg & vbLf & r.SpecialCells(xlCellTypeBlanks).Address
  'Ende Wenn Leerzellen enthalten, dann
  End If
'Ende Schleife ueber Spalten A und B
Next
'Meldung ausgeben
MsgBox strMsg
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • joshua
Antworten Top
#8
Hallo,

ich habe es so verstanden:


Code:
Sub test()
 Dim LastRow As Long, j As Long
 Dim ati, frage
 Dim boVar As Boolean
 Dim strgText As String
 
 strgText = "Leere Zeilen in:"
 
 With Sheets("tblOne")
   LastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
   ati = Range("A2:J13")
   For j = 1 To 10
     If Application.CountA(Application.Index(ati, , j)) <> LastRow - 1 Then
       boVar = True
       strgText = strgText & vbLf & Space(10) & ati(1, j)
     End If
     If j = 1 Then j = 3
   Next j
 End With

 If boVar Then
   frage = MsgBox(strgText & vbLf & vbLf & "Möchten Sie dennoch weitermachen?", vbYesNoCancel, "Ich habe da mal eine Frage...")
   
   If frage = vbYes Then
     'weiter mit etwas
   ElseIf frage = vbNo Then
     ThisWorkbook.Close True 'mit speichern der Änderungen
   End If
 End If
 
End Sub


Spalte B ist ausschlaggebend zur Feststellung wie viel Zellen befüllt sein sollen. Dort wird die letzte belegte Zelle ausgelesen.
Gruß Atilla
Antworten Top
#9
Hallo schauan,
vielen dank für den Ansatz (:
Bisher wird nur die erste leere Zeile in Spalte A in einer MsgBox addressiert. Ich muss mich mal ein wenig antasten (:


Hallo atilla,
vielen Dank auch für deinen Ansatz (:
Der Aufbau ist super und entspricht genau meinen Vorstellungen.
Nur weiß ich nun nicht, wie ich die Variable j (falls true bzw. leere Zelle vorhanden) mit einem entsprechenden Text definiere, also:
Falls j (1) dann kommt im Space der MsgBox = "Nummerierung fehlt"
Falls j (2) dnn kommt under/ oder ="Betitelung fehlt"
Antworten Top
#10
Hallo joshua,

im Code waren noch zwei kleine Ungereimtheiten.

unten erst einmal die korrigierte Fassung:


Code:
Sub test()
 Dim LastRow As Long, j As Long
 Dim ati, frage
 Dim boVar As Boolean
 Dim strgText As String
 
 strgText = "Leere Zeilen in:"
 
 With Sheets("tblOne")
   LastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
   ati = Range("A1:J" & LastRow)
   For j = 1 To 10
     If Application.CountA(Application.Index(ati, , j)) <> LastRow Then
       boVar = True
       strgText = strgText & vbLf & Space(10) & ati(1, j)
     End If
     If j = 1 Then j = 3
   Next j
 End With

 If boVar Then
   frage = MsgBox(strgText & vbLf & vbLf & "Möchten Sie dennoch weitermachen?", vbYesNoCancel, "Ich habe da mal eine Frage...")
   
   If frage = vbYes Then
     'weiter mit etwas
   ElseIf frage = vbNo Then
     ThisWorkbook.Close True 'mit speichern der Änderungen
   End If
 End If
 
End Sub


Nun zu Deiner Frage, was soll im einzelnen auftauchen?
Mit obigen Code werden die Überschriften gelistet. Ich gehe davon aus , dass sich in Zeile 1 Überschriften befinden.
Es werden Spalten A und D:j untersucht.
Was soll erscheinen, wenn in Spalte A leere, was wenn Spalte D, Spalte E usw...
Gruß Atilla
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste