Microsoft Excel

Herbers Excel/VBA-Archiv

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

MsgBox nur einmal anzeigen


Betrifft: MsgBox nur einmal anzeigen von: Philip
Geschrieben am: 18.01.2018 08:41:13

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

  

Betrifft: If Summe Mod 100 = 0 Then MsgBox von: RPP63
Geschrieben am: 18.01.2018 08:45:53

ohne weiteren Text

Gruß Ralf


  

Betrifft: AW: MsgBox nur einmal anzeigen von: UweD
Geschrieben am: 18.01.2018 08:47:40

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


  

Betrifft: AW: MsgBox nur einmal anzeigen von: Philip
Geschrieben am: 18.01.2018 08:57:34

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


  

Betrifft: AW: MsgBox nur einmal anzeigen von: UweD
Geschrieben am: 18.01.2018 08:58:07

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


  

Betrifft: AW: MsgBox nur einmal anzeigen von: Philip
Geschrieben am: 18.01.2018 09:04:32

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


  

Betrifft: AW: MsgBox nur einmal anzeigen von: UweD
Geschrieben am: 18.01.2018 09:35:05

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


  

Betrifft: AW: MsgBox nur einmal anzeigen von: Philip
Geschrieben am: 18.01.2018 10:33:18

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


  

Betrifft: AW: MsgBox nur einmal anzeigen von: UweD
Geschrieben am: 18.01.2018 14:41:33

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



  

Betrifft: AW: MsgBox nur einmal anzeigen von: Philip
Geschrieben am: 18.01.2018 15:07:51

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


  

Betrifft: AW: MsgBox nur einmal anzeigen von: UweD
Geschrieben am: 18.01.2018 16:21:31

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


Beiträge aus dem Excel-Forum zum Thema "MsgBox nur einmal anzeigen"