Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

MsgBox für mehrere Bedingungen

Betrifft: MsgBox für mehrere Bedingungen von: FloP
Geschrieben am: 04.09.2020 00:28:15

Hallo Liebe Excel/VBA Experten,

zunächst wollte ich euch kurz Danke sagen. Eure Beiträge bzw. Antworten haben mir bisher super geholfen.

Ich arbeite im Qualitätsmanagement und habe mit Hilfe Euerer Beiträge und dem Makro Rekorder ein Fehlereingabeformular erarbeitet, welches grundsätzlich sehr gut funktioniert.

Allerdings bin ich jetzt irgendwie mit meinem Latein am Ende.
Damit auf jeden Fall die Artikelnummer in C3 eingegeben wird habe ich ganz am Anfang eine MsgBox eingebaut. Ich möchte aber, dass in Zelle H7 (Fehlerbeschreibung) und in Zelle K7 (Sammeln oder nicht) auch auf jeden Fall etwas eingegeben werden muss. Also im Endeffekt 3 MsgBox Abfragen hintereinander. Das bekomme ich, auch mit den Forenbeiträgen, nicht hin.
Evtl. könnt Ihr mir helfen. Hier ist das Makro:

Sub Fehlererfassen()
'
' Fehlererfassen Makro
'
    
    If Range("c3").Value = "" Then
    MsgBox "Erst Artikel eingeben!!!"
        Else
    Range("A7:M7").Copy
    Windows("Fehlererfassung.xlsm").Activate
        ActiveWorkbook.AcceptAllChanges
    Sheets("Fehler Erfassung").Select
    Range("A2").Select
    Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveWorkbook.Save
    Windows("Fehlereingabe AP1.xlsm").Activate
    Sheets("Fehlereingabe").Select
    Range("h7").Select
    ActiveCell.FormulaR1C1 = "Bitte Fehler auswählen"
    Range("i7").Select
    Selection.ClearContents
    Range("K7").Select
    Selection.ClearContents
    
    Range("C3").Select
    Selection.ClearContents
    
    End If
    
    
    
End Sub
Obwohl das Makro eigentlich einwandfrei läuft, wäre es außerdem super, wenn Ihr einfach mal drüber schauen könnt und mir evtl. Optimierungsvorschläge machen könntet, bzw. auf potentielle Gefahren hinweisen könntet, da ich, wie gesagt, meine VBA Kenntnisse nur anhand des Rekorders und des Forums im Selbststudium generiert habe.

Herzlichen Dank schon einmal im voraus.

Gruß,
Flo

Betrifft: AW: MsgBox für mehrere Bedingungen
von: Matthias L
Geschrieben am: 04.09.2020 05:22:32

Hallo,

hier (m)ein Optimierungsvorschlag

statt:
 Range("i7").Select
 Selection.ClearContents
 
 Range("K7").Select
 Selection.ClearContents
 
 Range("C3").Select
 Selection.ClearContents
schreibe einfach:
 Range("i7").ClearContents
 Range("K7").ClearContents
 Range("C3").ClearContents
oder als Einzeiler:
Range("C3,I7,K7").ClearContents
Gruß Matthias

Betrifft: AW: MsgBox für mehrere Bedingungen
von: Pierre
Geschrieben am: 04.09.2020 09:46:44

Hallo Flo,

mein Vorschlag wäre, die Bearbeitung des Blattes zu sperren, bis in den 3 Zellen was eingetragen wurde.
Denn du willst ja, dass definitiv die 3 Zellen befüllt werden.
Mit deinem Code kann man einfach die nervige kleine Box wegklicken und kann dann machen, was man will.

Das könnte dann nach diesem Prinzip laufen:
With Range("C3")
        If .Value = "" Then                                  'Wenn dieser Wert in Zelle,
                Application.EnableEvents = False             'dann Blatt sperren
                .Select                                      'Zelle bleibt ausgewählt
                Application.EnableEvents = True              'Blatt freigeben
        End If
End With
Analog dann für H7 und K7.

Das ist jetzt natürlich nur für eine Zelle.

Aber vielleicht gefällt dir das ja?

Gruß Pierre

Betrifft: Als Schleife ...
von: Pierre
Geschrieben am: 04.09.2020 10:13:24

Hallo nochmal,

so kann das als Schleife aussehen:
Dim Zelle As Range

For Each Zelle In Range("K7, H7, C3")
    If IsEmpty(Zelle) Then
        Application.EnableEvents = False
            Zelle.Select
        Application.EnableEvents = True
    End If
Next Zelle
Ist die kürzere Variante, als für jede Zelle einen kompletten "With"-Block zu basteln.

Gruß Pierre

Betrifft: AW: Als Schleife ...
von: FloP
Geschrieben am: 04.09.2020 16:56:46

Hallo,

Danke Matthias und Pierre für die Antworten.

@ Pierre,

der Ansatz gefällt mir. Ich bin aber glaub ich zu doof. Wo muss ich denn die Schleife einbauen das es funktioniert?
Wenn ichs an den Anfang meines Makros (in Modul 1) schreibe passiert nix. Habe auch probiert es bei Objekt (Diese Arbeitsmappe) einzutragen aber passiert auch nix.

Gruß, Flo

Betrifft: AW: Als Schleife ...
von: Pierre
Geschrieben am: 07.09.2020 09:18:54

Hallo Flo,

sorry, ich war am Wochenende nicht hier unterwegs, hoffe, du wirst es dennoch lesen.

Hier mal das gesamte Makro:
'einfügen bei der Tabelle, bei der das Makro laufen soll
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
'sorgt dafür, dass die im Code angegebenen Zellen nacheinander gesperrt bleiben, bis diese  _
einen anderen
'Zellwert haben, als im Code angegeben!
Dim Zelle As Range

For Each Zelle In Range("K7, H7, C3")          'Zellen evtl. anpassen! Umgekehrte Reihenfolge!
    If IsEmpty(Zelle) Then                     'Wenn Zelle leer,
        Application.EnableEvents = False       'dann Blatt "sperren"
            Zelle.Select                       'o. a. Zelle bleibt ausgewählt, bis Wert anders
        Application.EnableEvents = True        'erst dann Bearbeitung möglich!
    End If
Next Zelle

End Sub

Einfügen unter dem Tabellenblatt, in dem die Sperrung erfolge soll (bei mir einfach "Tabelle1").

Gruß Pierre

PS: Ich mache nur auf offen, damit Flo das hoffentlich liest.

Beiträge aus dem Excel-Forum zum Thema "MsgBox für mehrere Bedingungen"