Fehlerprotokoll erstellen - Fehlermeldung generieren
Folgende Situation:
Tabelle bestehend aus einer 5x5 Matrix... Erste Spalte und erste Reihe bestehen aus "Bezeichnungen" (Reihennamen: Gelb. Blau, Rot & Schwarz und Spaltennamen: Team 1, Team 2, Team 3 & Team 4). Nun möchte ich par Makro ausgespuckt bekommen in welchen Zellen ein Wert fehlt (zB: in "<Team 1> fehlt <rot>" oder in "<Team 2> fehlt <blau> & <schwarz>").
Dies sollte in einem separat aufpoppenden Fenster angezeigt werden indem ich das ganze "nur" mit ok-button bestätigen kann (und das Fenster schließt sich wieder) oder ich per Knopfdruck exportieren kann (am liebsten in die Zwischenablage)...
Hat jemand für mich eine Lösung?
Tabelle bestehend aus einer 5x5 Matrix... Erste Spalte und erste Reihe bestehen aus "Bezeichnungen" (Reihennamen: Gelb. Blau, Rot & Schwarz und Spaltennamen: Team 1, Team 2, Team 3 & Team 4). Nun möchte ich par Makro ausgespuckt bekommen in welchen Zellen ein Wert fehlt (zB: in "<Team 1> fehlt <rot>" oder in "<Team 2> fehlt <blau> & <schwarz>").
Dies sollte in einem separat aufpoppenden Fenster angezeigt werden indem ich das ganze "nur" mit ok-button bestätigen kann (und das Fenster schließt sich wieder) oder ich per Knopfdruck exportieren kann (am liebsten in die Zwischenablage)...
Hat jemand für mich eine Lösung?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 180162
Url: https://administrator.de/contentid/180162
Ausgedruckt am: 22.11.2024 um 20:11 Uhr
16 Kommentare
Neuester Kommentar
Hallo brotherkeeper!
Ein einfacher Ansatz könnte so aussehen:
Da für die Ausgabe eine "
Die Zeilen 18 und 19 sind derzeit auskommentiert - wenn Du in jedem Fall (also auch, wenn keine Daten fehlen) eine Rückmeldung erhalten willst, einfach die Kommentarzeichen am Anfang dieser Zeilen entfernen ...
Wenn schließlich noch die Ausgaben (zumindest nach dem Einfügen im Zieldokument) nicht durch "|", sondern durch Zeilenschaltungen getrennt sein sollen, die Zeilen 12 und 16 durch
und
ersetzen.
Grüße
bastla
Ein einfacher Ansatz könnte so aussehen:
Sub Check()
InfoSpalte = 1
InfoZeile = 1
Zeile = InfoZeile + 1
Do While Cells(Zeile, InfoZeile).Value <> ""
Fehler = ""
Spalte = InfoSpalte + 1
Do While Cells(InfoZeile, Spalte).Value <> ""
If Cells(Zeile, Spalte).Value = "" Then Fehler = Fehler & " & " & Cells(InfoZeile, Spalte).Value
Spalte = Spalte + 1
Loop
If Fehler <> "" Then Ausgabe = Ausgabe & " | " & Cells(Zeile, InfoSpalte).Value & " fehlt " & Mid(Fehler, 4)
Zeile = Zeile + 1
Loop
If Ausgabe <> "" Then
InputBox "Fehlende Angaben:", "Fehler", Mid(Ausgabe, 4)
'Else
' MsgBox "Alle Daten vorhanden", vbInformation + vbOKOnly
End If
End Sub
InputBox
" verwendet wird, kannst Du einfach per "Strg + c
" oder Kontextmenü das Ergebnis in die Zwischenablage kopieren.Die Zeilen 18 und 19 sind derzeit auskommentiert - wenn Du in jedem Fall (also auch, wenn keine Daten fehlen) eine Rückmeldung erhalten willst, einfach die Kommentarzeichen am Anfang dieser Zeilen entfernen ...
Wenn schließlich noch die Ausgaben (zumindest nach dem Einfügen im Zieldokument) nicht durch "|", sondern durch Zeilenschaltungen getrennt sein sollen, die Zeilen 12 und 16 durch
If Fehler <> "" Then Ausgabe = Ausgabe & vbCrLf & Cells(Zeile, InfoSpalte).Value & " fehlt " & Mid(Fehler, 4)
InputBox "Fehlende Angaben:", "Fehler", Mid(Ausgabe, 3)
Grüße
bastla
Hallo brotherkeeper!
Mein Beispiel ist aufgrund Deiner allgemein gehaltenen Beschreibung einfach auf die Zellen A1:E5 ausgelegt - eine Anpassung aufgrund der zusätzlichen Informationen werde ich später vornehmen ...
Mit
solltest Du auch in der Anzeige die gewünschte Formatierung erhalten.
Grüße
bastla
Mein Beispiel ist aufgrund Deiner allgemein gehaltenen Beschreibung einfach auf die Zellen A1:E5 ausgelegt - eine Anpassung aufgrund der zusätzlichen Informationen werde ich später vornehmen ...
außer das ich keinen Umbruch habe, "nur" ein doppeltes Recheck als Trennzeichen und alles in einer Reihe...
Meine Erklärung oben scheint nicht verständlich genug gewesen zu sein - daher nochmals: Da Du die Fehlermeldung ja kopieren wolltest, habe ich die Ausgabe darauf ausgerichtet; ein Versuch, den kopierten Text zB in einem Editor oder in Word einzufügen, sollte dort auch das gewünschte Ergebnis bringen.Mit
InputBox Mid(Ausgabe, 3), "Fehler", Mid(Ausgabe, 3)
Grüße
bastla
Hallo brotherkeeper!
Ging doch etwas schneller als erwartet ...
Soferne meine Annahmen (Farben in den Zellen B5:B9 und B11:B12 und die Teamnamen in E2:G2 und I2:J2) zutreffen, sollte das etwa so gehen:
Grüße
bastla
Ging doch etwas schneller als erwartet ...
Soferne meine Annahmen (Farben in den Zellen B5:B9 und B11:B12 und die Teamnamen in E2:G2 und I2:J2) zutreffen, sollte das etwa so gehen:
Sub Check()
InfoSpalte = 2
InfoZeile = 2
For Spalte = 5 To 7
Fehler = ""
For Zeile = 5 To 9
If Cells(Zeile, Spalte).Value = "" Then Fehler = Fehler & " & " & Cells(Zeile, InfoSpalte).Value
Next
If Fehler <> "" Then Ausgabe = Ausgabe & vbCrLf & Cells(InfoZeile, Spalte).Value & " fehlt " & Mid(Fehler, 4)
Next
For Spalte = 9 To 10
Fehler = ""
For Zeile = 11 To 12
If Cells(Zeile, Spalte).Value = "" Then Fehler = Fehler & " & " & Cells(Zeile, InfoSpalte).Value
Next
If Fehler <> "" Then Ausgabe = Ausgabe & vbCrLf & Cells(InfoZeile, Spalte).Value & " fehlt " & Mid(Fehler, 4)
Next
If Ausgabe <> "" Then
InputBox Mid(Ausgabe, 3), "Fehler", Mid(Ausgabe, 3)
'Else
' MsgBox "Alle Daten vorhanden", vbInformation + vbOKOnly
End If
End Sub
bastla
Hallo brotherkeeper!
Grüße
bastla
Die fehlermeldung werden für jeden "block" neu generiert
Vielleicht könntest Du die "blocks" einmal näher erläutern - ich bin immer noch auf Annahmen (s.o.) angewiesen ...Team 1 fehlen rote shirts & rote hosen
...sollte eigentlich (innerhalb eines Blocks) bereits so aussehen ...außerdem scheint es eine Zeichenlimitierung in der MessageBox zu geben welche die Fehlermeldung "kastriert"... Kann das geändert werden oder muss ich mit da mit der Zwischenablage behilflich sein?
Du kannst allenfalls die "InputBox
" meinen; welche Limitierung meinst Du festgestellt zu haben?Grüße
bastla
Hallo brotherkeeper!
Die Teamnamen stehen demnach nur in den Spalten E:G? Wenn ja, ändere die Zeile 9 auf
und entferne die Zeilen 15 bis 24.
Hinsichtlich der Ausgabe: Wenn nur eine Bildschirmanzeige genügt, versuch es anstelle der Zeile 26 mit
Wenn beide Möglichkeiten erhalten bleiben sollen, verwende auch die "alte" Zeile 26 weiterhin.
Grüße
bastla
Die Teamnamen stehen demnach nur in den Spalten E:G? Wenn ja, ändere die Zeile 9 auf
For Zeile = 5 To 9
Hinsichtlich der Ausgabe: Wenn nur eine Bildschirmanzeige genügt, versuch es anstelle der Zeile 26 mit
MsgBox Mid(Ausgabe, 3), vbInformation + vbOKOnly
Grüße
bastla
Hallo brotherkeeper!
Die Eckdaten (seinerzeit ging es noch um eine "5x5 Matrix") ändern sich bei Dir ja mit beinahe jedem Kommentar ...
Um die Zeilen 22 und 44 zu ignorieren, könnte das etwa so gehen:
Grüße
bastla
Die Eckdaten (seinerzeit ging es noch um eine "5x5 Matrix") ändern sich bei Dir ja mit beinahe jedem Kommentar ...
Um die Zeilen 22 und 44 zu ignorieren, könnte das etwa so gehen:
Sub Del0()
Range("E4:Q63").Select
Selection.Replace What:="0", Replacement:="", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="0%", Replacement:="", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="#DIV/0!", Replacement:="", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
ReplaceFormat:=False
Range("E4").Select
Application.CutCopyMode = False
For Each Cell In Range("E47:Q49").Cells
If Cell.Value < 60 Then Cell.Value = ""
Next
InfoSpalte = 2
InfoZeile = 1
'block 1
'shirts
For Spalte = 5 To 17
Fehler = ""
For Zeile = 4 To 62
Select Case Zeile
Case 22, 44
Case Else
If Cells(Zeile, Spalte).Value = "" Then Fehler = Fehler & " & " & Cells(Zeile, InfoSpalte).Value
End Select
Next
If Fehler <> "" Then Ausgabe = Ausgabe & vbCrLf & Cells(InfoZeile, Spalte).Value & " fehlt " & Mid(Fehler, 4)
Next
If Ausgabe <> "" Then
MsgBox Mid(Ausgabe, 3), vbInformation + vbOKOnly
'Else
' MsgBox "Alle Daten vorhanden", vbInformation + vbOKOnly
End If
Calculate
End Sub
bastla