Microsoft Excel

Herbers Excel/VBA-Archiv

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

Private Sub Worksheet_Change(ByVal Target as range

    Betrifft: Private Sub Worksheet_Change(ByVal Target as range von: Holger
    Geschrieben am: 28.08.2003 15:49:28

    Hallo,
    ich habe ein Problem, wo ich einfach nicht weiter komme.
    Erstmal folgende Programmierung (die Formel habe ich vereinfacht):

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Cells(1, 1) - (Cells(1, 2)> 100 Then
    Dim Mldg, Stil, Titel, Antwort
    Mldg = "TEXT"
    Stil = vbOKOnly + vbCritical + vbDefaultButton1
    Titel = "Überprüfen Sie bitte Ihre Eingabe!"
    Antwort = MsgBox(Mldg, Stil, Titel, Hilfe, Ktxt)
    End If
    End Sub
    


    Folgendes Problem: Der User macht in der Tabelle viele Eingaben, z. B. in den Spalten A und C. In den Spalten B und D stehen Planwerte. Wenn nun der eingetragene Wert um z. B. 100 differiert, soll dem User eine Meldung gezeigt werden.
    * Wie kann ich es erreichen, die Programmierung so zu ändern, dass für einzelne ausgewählte Zellen eine Eingabeprüfung vorgenommen wird?
    * Gibt es in VBA einen Befehl für den "Betrag" von 100? Sprich, die Differenz kann auch - 100 betragen, deshalb wäre "Betrag von 100" eine Hilfe.
    Gruß an alle, Holger
      


    Betrifft: AW: Private Sub Worksheet_Change(ByVal Target as range von: ChrisL
    Geschrieben am: 28.08.2003 17:52:37

    Hi Holger

    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Target.Column <= 2 Then
    
        If Abs(Cells(Target.Row, 1) - Cells(Target.Row, 2)) > 100 Then
        MsgBox "Überprüfen Sie bitte Ihre Eingabe!", vbOKOnly + vbCritical + vbDefaultButton1, "Titel"
        Target.Select
        End If
        
    End If
    End Sub
    



    Gruss
    Chris


      


    Betrifft: AW: Private Sub Worksheet_Change(ByVal Target as range von: Holger
    Geschrieben am: 29.08.2003 09:07:35

    Hallo Chris,
    vielen Dank für Deine Hilfe. Leider ist es nicht genau das, was ich suchte. Liegt daran, dass ich es nicht eindeutig erklärt hatte. Vielleicht kannst Du mir aber noch weiter helfen.
    In Deiner Programmierung (habe ich noch mal unten eingefügt) werden alle Zellen in Spalte 1 und 2 verglichen. Was ich benötige, ist ein Vergleich von Zelle zu Zelle. In der Zeile 1 muss z. B. eine andere Forderung hinterlegt werden als in Zeile 2 u.s.w.
    Weiterhin muss dann der Wert in der Spalte 2 mit der in der Spalte 3 verglichen werden. Insgesamt sind in 11 Zeilen und 4 Spalten die Werte miteinander zu vergleichen, aber pro Vergleich muss eine seperate Forderung (z. B. > 100 oder auch mal >10 %) hinterlegt werden.
    Kannst Du mir helfen???
    Gruß, Holger

    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Target.Column <= 2 Then
    
        If Abs(Cells(Target.Row, 1) - Cells(Target.Row, 2)) > 100 Then
        MsgBox "Überprüfen Sie bitte Ihre Eingabe!", vbOKOnly + vbCritical + vbDefaultButton1, "Titel"
        Target.Select
        End If
        
    End If
    End Sub
    



      


    Betrifft: AW: Private Sub Worksheet_Change(ByVal Target as range von: ChrisL
    Geschrieben am: 29.08.2003 10:34:34

    Hi Holger

    Du kannst soviele Bedingungen machen wie du willst... z.B.

    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Target.Address = "$B$1" Or Target.Address = "$C$1" Then
    
        If Range("B1") - Range("C1") > 100 Then
        MsgBox "Überprüfen Sie bitte Ihre Eingabe!", vbOKOnly + vbCritical + vbDefaultButton1, "Titel"
        Target.Select
        End If
        
    End If
    
    
    If Target.Address = "$B$2" Or Target.Address = "$C$2" Then
    
        If Range("B2") - Range("C2") > 0.1 Then
        MsgBox "Überprüfen Sie bitte Ihre Eingabe!", vbOKOnly + vbCritical + vbDefaultButton1, "Titel"
        Target.Select
        End If
        
    End If
    
    ' usw.
    End Sub
    



    Gruss
    Chris


      


    Betrifft: AW: Private Sub Worksheet_Change(ByVal Target as range von: Holger
    Geschrieben am: 29.08.2003 11:17:17

    Hallo Chris,
    fast am Ziel!!! Das einzige Problem, was ich jetzt noch habe, ist, dass sich die zu vergleichenden Werte nicht in benachbarten Spalten befinden. Es ist immer noch eine andere Spalte dazwischen. Das hatte ich bisher nicht beschrieben, weil ich es nicht für wichtig erachtete, aber die Programmierung funktioniert nur (zumindest bei mir) bei 2 benachbarten Spalten. Das Programm sieht bei also so aus:

    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Target.Address = "$A$1" Or Target.Address = "$C$1" Then
    
        If Range("A1") - Range("C1") > 100 Then
        MsgBox "Überprüfen Sie bitte Ihre Eingabe!", vbOKOnly + vbCritical + vbDefaultButton1, "Titel"
        Target.Select
        End If
        
    End If
    'viele andere Anforderungen folgen hier noch
    End Sub
    


    Kannst Du mir noch einmal helfen??? Wäre absolut spitze!!!!!!!!!!!!!!!!!!!!!!

    Danke Dir schon mal für Deine tolle Hilfe.
    Ciao und Gruß aus Braunschweig


      


    Betrifft: AW: Private Sub Worksheet_Change(ByVal Target as range von: Holger
    Geschrieben am: 29.08.2003 12:00:32

    Hallo Chris,
    Problem gefunden! Weiß zwar nicht, wo der Fehler lag, habe aber die gesamte Tabelle in eine neue kopiert, da ging es dann auch Spaltenübergreifend.
    Super und vielen Dank für Deine Hilfe. Da wäre ich nie drauf gekommen!!!!
    Ciao, Holger


      


    Betrifft: AW: Private Sub Worksheet_Change(ByVal Target as range von: Holger
    Geschrieben am: 01.09.2003 16:55:07

    Hallo Chris,
    Deine Tipps haben mich echt weiter gebracht. Dachte auch, ich hätte es nun verstanden, stolpere nun aber über ein Problem. Zunächst meine jetzige Programmierung:

    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    
    'Zeile 9
    If Target.Address = "$K$9" Or Target.Address = "$I$9" Then
        If Abs((Range("k9") - 2 * Range("i9")) / (2 * Range("I9"))) > 0.1 Then
        MsgBox "Text", vbOKOnly + vbCritical + vbDefaultButton1, "Überprüfen Sie bitte Ihre Eingabe!"
        Target.Select
        End If
    End If
    
    'Zeile 10
    If Target.Address = "$K$10" Or Target.Address = "$I$10" Then
        If Abs((Range("k10") - 2 * Range("i10")) / (2 * Range("I10"))) > 0.15 Then
        MsgBox "Text", vbOKOnly + vbCritical + vbDefaultButton1, "Überprüfen Sie bitte Ihre Eingabe!"
        Target.Select
        End If
    End If
    End Sub
    


    Nun möchte ich wieder die Zeile 9 vergleichen, und zwar die Zellen in den Spalten M und K. Folgende Programmierung dachte ich müsste funktionieren, tut's aber nicht:
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    
    'Zeile 9
    If Target.Address = "$K$9" Or Target.Address = "$I$9" Then
        If Abs((Range("k9") - 2 * Range("i9")) / (2 * Range("I9"))) > 0.1 Then
        MsgBox "Text", vbOKOnly + vbCritical + vbDefaultButton1, "Überprüfen Sie bitte Ihre Eingabe!"
        Target.Select
        End If
    End If
    If Target.Address = "$m$9" Or Target.Address = "$k$9" Then
        If Abs((Range("m9") - 2 * Range("k9")) / (2 * Range("k9"))) > 0.1 Then
        MsgBox "Text", vbOKOnly + vbCritical + vbDefaultButton1, "Überprüfen Sie bitte Ihre Eingabe!"
        Target.Select
        End If
    End If
    
    
    'Zeile 10
    If Target.Address = "$K$10" Or Target.Address = "$I$10" Then
        If Abs((Range("k10") - 2 * Range("i10")) / (2 * Range("I10"))) > 0.15 Then
        MsgBox "Text", vbOKOnly + vbCritical + vbDefaultButton1, "Überprüfen Sie bitte Ihre Eingabe!"
        Target.Select
        End If
    End If
    End Sub
    


    Was mache ich falsch??? Kannst Du mir (ein letztes Mal) helfen???
    Gruß, Holger