Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: MsgBox nur einmal anzeigen

MsgBox nur einmal anzeigen
18.01.2018 08:41:13
Philip
Hallo zusammen
Ich habe einen Code geschrieben mit dem ich ein Paar Zelle zusammen rechne und dann eine MsgBox öffne. Nun möchte ich das die Msg box nur einmal angezeigt wird wenn der Wert ereicht wird.
Wenn möglich möchte ich die MsgBox bei 100,200,300,400,500,600,700 usw.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim summe As String
summe = Application.sum(Range("AB41:AB46"))
If summe > 100 Then
MsgBox ("Probe")
End If
End Sub

Gruss Philip
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
If Summe Mod 100 = 0 Then MsgBox
18.01.2018 08:45:53
RPP63
ohne weiteren Text
Gruß Ralf
AW: MsgBox nur einmal anzeigen
18.01.2018 08:47:40
UweD
Hallo
in ein Normales Modul
Public Nureinmal As Boolean
und folgende Änderung
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim summe As String
    summe = Application.Sum(Range("AB41:AB46"))
    If summe > 100 And Not Nureinmal Then
        MsgBox ("Probe")
        Nureinmal = True
    End If
End Sub
LG UweD
Anzeige
AW: MsgBox nur einmal anzeigen
18.01.2018 08:57:34
Philip
Hallo Uwe
Danke dir für deine Lösung.
Eine Frage habe ich noch, ist es möglich dass die MsgBox bei 200,300,400,usw. auch erscheint?
Und das in den selben Code gepackt.
Gruss Philip
AW: MsgBox nur einmal anzeigen
18.01.2018 08:58:07
UweD
das mit den 100,200,300 hatte ich noch überlesen
in ein normales Modul
Public Nureinmal As Integer
und ins Blatt
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Summe As Integer
    Summe = Application.Sum(Range("AB41:AB46"))
    If Summe Mod 100 = 0 And Summe > Nureinmal Then
        MsgBox ("Probe")
        Nureinmal = Summe
    End If
End Sub
LG UweD
Anzeige
AW: MsgBox nur einmal anzeigen
18.01.2018 09:04:32
Philip
Hallo
Funktioniert so wie ich es beschrieben habe, nur habe ich bemerkt dass ich es faltsch beschrieben habe.
die MsgBox soll einmal kommen wenn ich über 100,200,300,400,usw. komme nicht nur wenn ich genau diese Zahlen bekomme.
Ich hoffe du kannst mir trotzden noch weiter helfen.
Gruss Philip
Anzeige
AW: MsgBox nur einmal anzeigen
18.01.2018 09:35:05
UweD
Hallo
so?
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim RNG As Range
    Set RNG = Range("AB41:AB46")
    If Not Intersect(RNG, Target) Is Nothing Then
        With WorksheetFunction
            Nureinmal = .Max(100, .RoundUp(.Sum(RNG) / 100, 0) * 100)
        End With
    End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Summe As Integer
    With WorksheetFunction
        Summe = .Sum(Range("AB41:AB46"))
        If Summe > Nureinmal Then
            MsgBox ("Probe " & Summe)
            Nureinmal = .RoundUp(Summe / 100, 0) * 100
        ElseIf Summe = 0 Then
            Nureinmal = 100 'Bei Start oder nach Reset 
        End If
    End With
End Sub

LG UweD
Anzeige
AW: MsgBox nur einmal anzeigen
18.01.2018 10:33:18
Philip
Hallo
Ich nochmal.
Ich habe deinen Code angewendet, funktioniert soweit auch.
Aber jetz möchte ich den Code noch in anderen Zelle anwenden(AB16, AB29, AB32), aber mit einer anderen bedingung, die MsgBox sollte wenn die Werte 2500,5000,7500,10000,usw mit einem anderen Text geöffnet werden.
Gruss Philip
Anzeige
AW: MsgBox nur einmal anzeigen
18.01.2018 14:41:33
UweD
Hallo
so?
in ein Modul
Option Explicit
Public Nureinmal1 As Integer
Public Nureinmal2 As Integer
Public Nureinmal3 As Integer
Public Const RNG1 As String = "AB41:AB46"
Public Const RNG2 As String = "AB16:AB19"
Public Const RNG3 As String = "AB29:AB30"
Public Const Ru1 As Integer = 100
Public Const Ru2 As Integer = 1000
Public Const Ru3 As Integer = 2500
ins Blatt

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With WorksheetFunction
If Not Intersect(Range(RNG1), Target) Is Nothing Then
Nureinmal1 = .Max(Ru1, .RoundUp(.Sum(Range(RNG1)) / Ru1, 0) * Ru1)
End If
If Not Intersect(Range(RNG2), Target) Is Nothing Then
Nureinmal2 = .Max(Ru2, .RoundUp(.Sum(Range(RNG2)) / Ru2, 0) * Ru2)
End If
If Not Intersect(Range(RNG3), Target) Is Nothing Then
Nureinmal3 = .Max(Ru3, .RoundUp(.Sum(Range(RNG3)) / Ru3, 0) * Ru3)
End If
End With
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Summe As Integer
With WorksheetFunction
If Not Intersect(Range(RNG1), Target) Is Nothing Then
Summe = .Sum(Range(RNG1))
If Summe > Nureinmal1 Then
MsgBox ("Probe für " & Ru1 & "er: " & Summe)
Nureinmal1 = .RoundUp(Summe / Ru1, 0) * Ru1
ElseIf Summe = 0 Then
Nureinmal1 = Ru1 'Bei Start oder nach Reset
End If
End If
If Not Intersect(Range(RNG2), Target) Is Nothing Then
Summe = .Sum(Range(RNG2))
If Summe > Nureinmal2 Then
MsgBox ("Probe für " & Ru2 & "er: " & Summe)
Nureinmal2 = .RoundUp(Summe / Ru2, 0) * Ru2
ElseIf Summe = 0 Then
Nureinmal2 = Ru2 'Bei Start oder nach Reset
End If
End If
If Not Intersect(Range(RNG3), Target) Is Nothing Then
Summe = .Sum(Range(RNG3))
If Summe > Nureinmal3 Then
MsgBox ("Probe für " & Ru3 & "er: " & Summe)
Nureinmal3 = .RoundUp(Summe / Ru3, 0) * Ru3
ElseIf Summe = 0 Then
Nureinmal3 = Ru3 'Bei Start oder nach Reset
End If
End If
End With
End Sub

Anzeige
AW: MsgBox nur einmal anzeigen
18.01.2018 15:07:51
Philip
Hallo Uwe
Danke für deine Bemühungen es funktioniert soweit auch nur ist in diesen Felder eine Formel und wenn ich diese berechne wird dein Code nicht ausgeführt.
Gruss Philip
AW: MsgBox nur einmal anzeigen
18.01.2018 16:21:31
UweD
Hallo nochmal
dann müssen die events beim calkulieren ausgeführt werden
in das Blatt noch ergänzen

Private Sub Worksheet_Calculate()
Worksheet_Change Range(RNG1)
Worksheet_Change Range(RNG2)
Worksheet_Change Range(RNG3)
End Sub
LG UweD
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

MsgBox nur einmal anzeigen in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Öffne den Visual Basic for Applications (VBA) Editor: Drücke ALT + F11, um den Editor zu öffnen.

  2. Füge ein Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle Einfügen > Modul.

  3. Definiere die Variablen: Füge die folgenden Zeilen in das Modul ein, um die benötigten Variablen zu deklarieren:

    Public Nureinmal As Integer
  4. Erstelle die Worksheet_Change-Prozedur: Füge den folgenden Code in das Arbeitsblatt ein, um die MsgBox nur einmal anzuzeigen:

    Private Sub Worksheet_Change(ByVal Target As Range)
       Dim Summe As Integer
       Summe = Application.Sum(Range("AB41:AB46"))
       If Summe Mod 100 = 0 And Summe > Nureinmal Then
           MsgBox ("Probe: " & Summe)
           Nureinmal = Summe
       End If
    End Sub
  5. Erstelle die Worksheet_Calculate-Prozedur: Diese sorgt dafür, dass die MsgBox angezeigt wird, auch wenn Werte durch Formeln berechnet werden:

    Private Sub Worksheet_Calculate()
       Worksheet_Change Range("AB41:AB46")
    End Sub

Mit diesen Schritten hast du die MsgBox in Excel VBA implementiert, die nur einmal angezeigt wird, wenn die Summe über 100, 200, 300 usw. steigt.


Häufige Fehler und Lösungen

  • Fehler: Die MsgBox wird nicht angezeigt.

    • Lösung: Stelle sicher, dass die Worksheet_Calculate-Prozedur vorhanden ist, damit Änderungen durch Formeln auch erkannt werden.
  • Fehler: MsgBox erscheint mehrmals.

    • Lösung: Überprüfe, dass die Bedingung If Summe Mod 100 = 0 And Summe > Nureinmal korrekt implementiert ist, um Mehrfachausgaben zu verhindern.

Alternative Methoden

Eine alternative Methode zur Anzeige der MsgBox könnte die Verwendung von benutzerdefinierten Dialogen sein, um mehr Informationen anzuzeigen oder Eingaben zu ermöglichen. Dies kann über die UserForm-Funktion in VBA erstellt werden.

Ein einfaches Beispiel:

' UserForm Show
UserForm1.Show

Praktische Beispiele

Hier ist ein weiteres praktisches Beispiel, das die MsgBox für andere Zellen anzeigt:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Summe As Integer
    If Not Intersect(Target, Range("AB16:AB19")) Is Nothing Then
        Summe = Application.Sum(Range("AB16:AB19"))
        If Summe > 2500 Then
            MsgBox ("Probe: " & Summe)
        End If
    End If
End Sub

Mit diesem Code wird die MsgBox angezeigt, wenn die Summe in den Zellen AB16 bis AB19 2500 übersteigt.


Tipps für Profis

  • Verwende Konstanten: Statt feste Zahlen in deinem Code zu verwenden, definiere sie als Konstanten für bessere Lesbarkeit und Wartbarkeit.
  • Fehlerbehandlung: Implementiere On Error Resume Next oder ähnliche Fehlerbehandlungsroutinen, um unerwartete Fehler zu vermeiden.
  • Dokumentation: Kommentiere deinen Code gut, damit du und andere ihn später leichter verstehen können.

FAQ: Häufige Fragen

1. Wie kann ich die MsgBox für andere Werte anpassen?
Du kannst die Bedingungen in der If-Anweisung ändern, z.B. If Summe > 2500 Then.

2. Was mache ich, wenn die MsgBox nicht mehr angezeigt wird?
Prüfe, ob die Nureinmal-Variable zurückgesetzt wurde und ob die Bedingungen im Code korrekt sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige