Registriert seit: 22.04.2016
Version(en): 2016
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
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
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)
Registriert seit: 22.04.2016
Version(en): 2016
(06.06.2017, 10: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.
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
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)
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
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)
Registriert seit: 22.04.2016
Version(en): 2016
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"
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
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:1 Nutzer sagt Danke an schauan für diesen Beitrag 28
• joshua
Registriert seit: 14.04.2014
Version(en): 2003, 2007
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
Registriert seit: 22.04.2016
Version(en): 2016
09.06.2017, 08:51
(Dieser Beitrag wurde zuletzt bearbeitet: 09.06.2017, 08:52 von joshua.)
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"
Registriert seit: 14.04.2014
Version(en): 2003, 2007
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
|