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 (32 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, 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.
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 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 (32 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, 07:51
(Dieser Beitrag wurde zuletzt bearbeitet: 09.06.2017, 07: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
|