Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1220to1224
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

nach Anzeige MsgBox bzw. strFehler Makro abbrechen

nach Anzeige MsgBox bzw. strFehler Makro abbrechen
Sandra
Hallo zusammen,
ich habe ein Problem und hoffe Ihr könnt mir weiter helfen.
In meinem Makro tauchen verschiedene Prüfungen auf.
1. Prüfung

strFehler = strFehler & sListZeichen & "Die Spalte'" & _
ArrayQuelle(nIndex) & "' wurde nicht in der Quell-Datei gefunden" & vbCr 
2. Prüfung
strFehler = strFehler & sListZeichen & "Die Spalte'" & _
ArrayZiel(nIndex) & "' wurde nicht in der Ziel-Datei gefunden" & vbCr
3. Prüfung
Dim zeile As Long, spalte As Long
Dim i As Integer
Dim strausgabe As String, strzelle As String, x As String
Dim wks As Worksheet
Dim check As Boolean
Set wks = Sheets(1)
Dim spalten()
Dim spaltennamen()
Dim spaltenausgabe()
x = ""
spalten() = Array(5, 6, 7, 15, 18)
spaltennamen() = Array("In der Spalte Mangelart (E)", "In der Spalte Vertragsart (F)", "In der  _
Spalte Gewerk (G)", "In der Spalte Frist (O)", "In der Spalte Auftragnehmer (R)")
spaltenausgabe() = Array(x, x, x, x, x, x, x, x)
For i = 0 To UBound(spalten())
spaltenausgabe(i) = spaltennamen(i) & " in den Zeilen: "
Next i
With wks
For zeile = 65 To 500
If .Cells(zeile, 2).Value  "" Then
For i = 0 To UBound(spalten())
On Error GoTo schleife
If Cells(zeile, spalten(i)).Value = 0 Then
schleife:
spaltenausgabe(i) = spaltenausgabe(i) & vbCrLf & zeile & ",  " & vbCrLf
check = True
End If
Next i
End If
Next zeile
End With
If check = True Then
For i = 0 To UBound(spalten())
strausgabe = strausgabe & spaltenausgabe(i) & vbCrLf
Next i
MsgBox "Fehlerhaft ausgefüllte Zellen: " & vbCrLf & vbCrLf & _
strausgabe
Else
MsgBox "Es konnten keine leeren Zellen in den Spalten Mangelart (E), Vertragsart (F),  _
Gewerk (G), Frist (O) und Auftragnehmer (R) gefunden werden!"
End If

Nun ist es so, dass das Makro bei negativer Prüfung nicht weiter ausgeführt werden muss. Wenn also Meldung 1. erscheint kann das Makro abbrechen, ansonsten erst einmal weiter laufen. Wenn die 2. Meldung auftaucht sollte das Makro ebenfalls abbrechen, sonst weiterlaufen. Bei der 3. Prüfung muss das Makro nur abbrechen, wenn diese MsgBox erscheint:
MsgBox "Fehlerhaft ausgefüllte Zellen: " & vbCrLf & vbCrLf & _
strausgabe

Habt Ihr eine Idee, wie ich das bewerkstelligen kann?
Lieben Dank & Gruß
Sandra
AW: nach Anzeige MsgBox bzw. strFehler Makro abbrechen
12.07.2011 09:47:57
Rudi
Hallo,
Schema:
If strFehler "" then
Msgbox strFehler
Exit Sub
End If

Gruß
Rudi
AW: nach Anzeige MsgBox bzw. strFehler Makro abbrechen
12.07.2011 10:10:22
Sandra
Hallo Rudi,
ich habe Deinen Vorschlag jetzt mal bei der ersten Prüfung eingebaut.
Das sieht so aus:
       strFehler = strFehler & sListZeichen & "Die Spalte '" & _
ArrayQuelle(nIndex) & "' wurde nicht in der Quell-Datei gefunden" &  _
vbCr
If strFehler  "" Then
MsgBox strFehler
Exit Sub
End If
End If
End With

Die 1. Prüfung gibt ggf. als Fehler zurück, wenn eine der vorher benannten Spalten nicht in der Quelle gefunden werden konnte. Die Spaltenbeschriftungen sind alle da und es taucht trotzdem eine Fehlermeldung auf. Kannst Du mir sagen wie das kommt?
Was brauchst Du eventuell noch für Angaben von mir?
Danke & Gruß
Sandra
Anzeige
AW: nach Anzeige MsgBox bzw. strFehler Makro abbrechen
12.07.2011 10:39:19
Rudi
Hallo,
  • Was brauchst Du eventuell noch für Angaben von mir?

  • Am besten eine Beispielmappe.
    Gruß
    Rudi
    AW: nach Anzeige MsgBox bzw. strFehler Makro abbrechen
    12.07.2011 11:16:20
    Sandra
    Hallo Rudi,
    ein Beispielmappe ist ziemlich schwierig. Insgesamt bräuchtest Du 3 verschiedene Dateien von mir. Soll ich die alle hochladen?
    Gruß
    Sandra
    AW: nach Anzeige MsgBox bzw. strFehler Makro abbrechen
    12.07.2011 12:10:29
    Rudi
    Hallo,
    dann mal erst die mit dem Code. Ist evtl. nur ein logischer Fehler.
    Gruß
    Rudi
    jetzt mit Beispieldatei
    12.07.2011 12:39:55
    Sandra
    Hallo Rudi.
    Anbei die (geschrumpfte) Beispieldatei.
    https://www.herber.de/bbs/user/75674.xlsm
    Ich hoffe Du kannst mir helfen.
    Gruß
    Sandra
    Anzeige
    AW: jetzt mit Beispieldatei
    12.07.2011 13:05:12
    Rudi
    Hallo,
    ich glaube eher so:
      For nIndex = LBound(ArrayQuelle) To UBound(ArrayQuelle)
    With oXlSM.Sheets("Mängel vor der Abnahme") 'Name des Tabellenblattes, welches in der xlsm- _
    Datei benutzt wird
    nIndexXLSM = Application.Match(ArrayQuelle(nIndex), .Rows(2), 0) 'sucht in der Zeile 2  _
    nach den Spaltenbeschriftungen
    If IsNumeric(nIndexXLSM) Then
    MaxRow = .Cells(.Rows.Count, nIndexXLSM).End(xlUp).Row 'letzte Zeile in Spalte
    Set rngXLSM = .Range(.Cells(3, nIndexXLSM), .Cells(MaxRow, nIndexXLSM))
    If MaxRow > 3 Then
    ArrayXLSM = rngXLSM
    ElseIf MaxRow = 3 Then
    ArrayXLSM = rngXLSM.Resize(, 2)
    ReDim Preserve ArrayXLSM(1 To UBound(ArrayXLSM), 1 To 1)
    End If
    'Fehlermeldung die ausgegeben wird, wenn eine festgelegte Spaltenüberschrift nicht in  _
    der xlsm-Datei gefunden werden konnte
    Else
    strFehler = strFehler & sListZeichen & "Die Spalte '" & _
    ArrayQuelle(nIndex) & "' wurde nicht in der Quell-Datei gefunden." & vbCr
    MsgBox strFehler
    Exit Sub
    End If
    End With
    If IsArray(ArrayXLSM) Then
    With oXML.Sheets("neue Zustandsbeschreibungen") 'Name des Tabellenblattes, welches in der  _
    xml-Datei benutzt wird
    nIndexXML = Application.Match(ArrayZiel(nIndex), .Rows(64), 0) 'sucht in der Zeile 64  _
    nach den Spaltenbeschriftungen
    If IsNumeric(nIndexXML) Then
    'alle Inhalte der Zellen ab Zeile 65 werden für neue Daten gelöscht
    .Range(.Cells(65, nIndexXML), .Cells(.Rows.Count, nIndexXML)).ClearContents
    Set rngXML = .Cells(65, nIndexXML) 'erste Einfügezelle
    rngXML.Resize(UBound(ArrayXLSM), 1) = ArrayXLSM 'Daten aus Array einfügen
    Else
    strFehler = strFehler & sListZeichen & "Die Spalte '" & _
    ArrayZiel(nIndex) & "' wurde nicht in der Ziel-Datei gefunden." & vbCr
    MsgBox strFehler
    Exit Sub
    End If
    End With
    End If
    ArrayXLSM = Empty
    Next nIndex
    

    Gruß
    Rudi
    Anzeige
    AW: jetzt mit Beispieldatei
    12.07.2011 13:20:19
    Sandra
    Hallo Rudi,
    Prüfungen 1 und 2 funktionieren jetzt. Aber wie genau bekomme ich das mit Prüfung 3 hin. Da sieht der Code ja so aus:
    Dim zeile As Long, spalte As Long
    Dim i As Integer
    Dim strausgabe As String, strzelle As String, x As String
    Dim wks As Worksheet
    Dim check As Boolean
    Set wks = Sheets(1)
    Dim spalten()
    Dim spaltennamen()
    Dim spaltenausgabe()
    x = ""
    spalten() = Array(5, 6, 7, 15, 18)
    spaltennamen() = Array("In der Spalte Mangelart (E)", "In der Spalte Vertragsart (F)", "In der  _
    Spalte Gewerk (G)", "In der Spalte Frist (O)", "In der Spalte Auftragnehmer (R)")
    spaltenausgabe() = Array(x, x, x, x, x, x, x, x)
    For i = 0 To UBound(spalten())
    spaltenausgabe(i) = spaltennamen(i) & " in den Zeilen: "
    Next i
    With wks
    For zeile = 65 To 500
    If .Cells(zeile, 2).Value  "" Then
    For i = 0 To UBound(spalten())
    On Error GoTo schleife
    If Cells(zeile, spalten(i)).Value = 0 Then
    schleife:
    spaltenausgabe(i) = spaltenausgabe(i) & vbCrLf & zeile & ",  " & vbCrLf
    check = True
    End If
    Next i
    End If
    Next zeile
    End With
    If check = True Then
    For i = 0 To UBound(spalten())
    strausgabe = strausgabe & spaltenausgabe(i) & vbCrLf
    Next i
    MsgBox "Fehlerhaft ausgefüllte Zellen: " & vbCrLf & vbCrLf & _
    strausgabe
    Else
    MsgBox "Es konnten keine leeren Zellen in den Spalten Mangelart (E), Vertragsart (F),  _
    Gewerk (G), Frist (O) und Auftragnehmer (R) gefunden werden!"
    End If
    
    Und wenn diese MsgBox aufgerufen wird:
     MsgBox "Fehlerhaft ausgefüllte Zellen: " & vbCrLf & vbCrLf & _
    strausgabe
    
    dann soll danach der Abbruch erfolgen.
    Kannst Du mir da auch noch einmal helfen?
    DANKE!!!!!
    Gruß
    Sandra
    Anzeige
    Ich glaub ich hab es ...
    12.07.2011 13:22:06
    Sandra
    Mit exit Sub?
    So:
    End With
    If check = True Then
    For i = 0 To UBound(spalten())
    strausgabe = strausgabe & spaltenausgabe(i) & vbCrLf
    Next i
    MsgBox "Fehlerhaft ausgefüllte Zellen: " & vbCrLf & vbCrLf & _
    strausgabe
    Exit Sub
    Else
    MsgBox "Es konnten keine leeren Zellen in den Spalten Mangelart (E), Vertragsart (F),  _
    Gewerk (G), Frist (O) und Auftragnehmer (R) gefunden werden!"
    End If
    

    AW: jetzt mit Beispieldatei
    12.07.2011 13:23:51
    Rudi
    Hallo,
    If check = True Then
    For i = 0 To UBound(spalten())
    strausgabe = strausgabe & spaltenausgabe(i) & vbCrLf
    Next i
    MsgBox "Fehlerhaft ausgefüllte Zellen: " & vbCrLf & vbCrLf & _
    strausgabe
    Exit Sub
    Else
    MsgBox "Es konnten keine leeren Zellen in den Spalten Mangelart (E), Vertragsart (F),  _
    Gewerk (G), Frist (O) und Auftragnehmer (R) gefunden werden!"
    End If
    

    Gruß
    Rudi
    Anzeige
    AW: jetzt mit Beispieldatei
    12.07.2011 13:30:34
    Sandra
    Hey Rudi,
    also so wie ich dann doch noch entdeckt habe? Durch Exit Sub? :)
    Darf ich Dich da noch etwas fragen? - Zu einem anderen Problem? Oder soll ich lieber neu posten?
    Gruß
    Sandra
    AW: jetzt mit Beispieldatei
    12.07.2011 13:53:12
    Rudi
    Hallo,
    Fragen darfst du immer.
    Neue Probleme aber am besten in einem neuen Thread. Ist besser für die Recherche.
    Gruß
    Rudi
    AW: jetzt mit Beispieldatei
    12.07.2011 13:58:28
    Sandra
    Okay. Ich eröffne dann ein neues Thema!
    Danke für die tolle Hilfe!
    P. s. Ich hoffe Du hilfst beim nächsten Thema auch wieder so toll weiter!
    Lieben Gruß
    Sandra

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige